Register   |   Login

Print

VC++中使用非_Stdcall方式調用Commom Motion API

VC++中使用非_Stdcall方式調用Commom Motion API

VC++中使用非_Stdcall方式調用Commom Motion API

在研华官方的Commom Motion API的使用手册中,Commom Motion API是使用_Stdcall方式調用的。
使用手册中描述如下:用户应添加头文件和必要 Lib 文件的路径,并在 Project Setting”中配置工程。用户可通过 Menu - Poject - Settings”打开 Project Setting”窗口;或右击新的工程,然后选择 Setting”打开窗口。配置如下:a. 在通用运动架构中,“Calling convension”应为 _stdcall”,因此用户需按照如下所示配置 Calling convension”:

1

但是在这种情况下,如果用户使用多线程编程或者跟其他的软件库,如视觉软件库同时做软件开发的时,因为其他软件都是使用_cdecl*方式调用库函数API。这两种方式不能同时选用。所以在其他软件或者调用多线程函数时如果选用_cdecl*方式,则Commom Motion API在编译时会报错,而用_Stdcall方式調用时,其他软件或者调用多线程函数会报错。这样会让客户很烦恼。

使用宏定义把_Stdcal定义为_declspec(dllexport)CALLBACK方式就可以解决这个冲突的问题。

首先找到驱动安装目录下的AdvMotApi.h文件,增加以下定义部分。

#if !define(_WIN31)


#define FEXPORT _declspec(dllexport)


#define FTYPE CALLBACK

#else


#define FEXPORT extern


#define FTYPE FAR PASCAL

#endif

然后把原来Common Motion API的所有函数API申明修改。如U32 Acm_DevOpen(U32 DeviceNumber, PHAND DeviceHandle); 修改为FEXPORT U32 FTYPE Acm_DevOpen(U32 DeviceNumber, PHAND DeviceHandle);即可。所用的函数都可以用替换的方式用FEXPORT U32 FTYPE去替代U32

这样保存修改后的AdvMotApi.h后。在“Project Setting”中配置工程中就可以改回原来默认的_cdecl*方式,即C的方式调用了。这样Common Motion API 可以与其他软件一起和平使用了。



[ 本帖最后由 XDL 于 2013-3-7 13:38 编辑 ]
Attachment: Your usergroup does not have permission to access attachments

TOP

Quick search in Advantech Support Portal