用VC++编写供PowerBuilder使用的DLL

来源:互联网 发布:电动车情报网 软件 编辑:程序博客网 时间:2024/05/14 05:14

在用VC++编写供PowerBuilder使用的DLL时,要注意下面2点:

  • 调用约定

C++函数有_stdcall、_cdecl、_fastcall等多种调用约定,调用约定用来说明函数参数的压栈顺序和由谁(函数自身还是调用者)来修改堆栈。
编写供PB调用的DLL时,要使用_stdcall调用约定,如下所示:

 

  • def文件

在生成DLL的工程中,使用def文件中的EXPORTS来指定要导出的函数可防止函数名出现错误。


例如,DLL要输出如下两个函数:
      extern "C" _declspec(dllexport) int _stdcall ReadCard(char* str);
      extern "C" _declspec(dllexport) char* _stdcall GetIP(int id);


则def文件书写如下(工程名为TEST):
      LIBRARY "TEST"
      DESCRIPTION 'TEST Windows Dynamic Link Library'
      EXPORTS
      ; Explicit exports can go here
      GetIP @1
      ReadCard @2


编译生成DLL后,在PB中要调用GetIP函数时,先做如下声明:
      Function string GetIP(int tid) library("TEST.dll"); 

 

然后就可以在后面的代码中调用该函数了。

PB中声明的函数的形式要与原来VC++中的函数一致。


注意,def文件名需和DLL工程名相同。例如,DLL工程名为TEST,则创建TEST.def。

 

 

 

原创粉丝点击