当前位置: 代码迷 >> PB >> 关于PB带指针类型的API调用异常
  详细解决方案

关于PB带指针类型的API调用异常

热度:112   发布时间:2016-04-29 08:59:47.0
关于PB带指针类型的API调用错误
VC的头文件中定义如下:
int rdi_open(const char* server, int port);
我在PB中需要通过API来调用这个function
我的定义如下:
FUNCTION int rdi_open(String server, long port) LIBRARY "rdiapi.dll"

在使用时代码如下:
long li_rdi_open,li_port
string ls_server = "10.192.84.8"
li_port = 27917
li_rdi_open = rdi_open(ls_server, li_port);

结果出现如下错误:
Specified argument type differs from required argument type at runtime in DLL function rdi_open.
 (invalid stack pointer on return from function call) at line 16 in open event of object w_data_trans.

急请求高手协助解决!万分感谢!

------解决方案--------------------
试一下,定义成:
FUNCTION int rdi_open(ref String server, long port) LIBRARY "rdiapi.dll" 

------解决方案--------------------
你在vc中定义函数的返回值是int,那在pb中声明
FUNCTION long rdi_open(String server, long port) LIBRARY "rdiapi.dll"
------解决方案--------------------
这个你只能用C包装一下再给PB调用,因为你的头文件里面定义的都是C调用方式,要在PB里面调用需要定义为stdcall方式调用。两种方式清理堆栈的方式不同
------解决方案--------------------
是的,你需要用VC重新包装dll才可以使用,因为你使用的dll中方法的公布方式不对,无法在PB中调用,如果在VC中调用应该没有问题。
------解决方案--------------------
FUNCTION int rdi_open(String server, long port) LIBRARY "rdiapi.dll" 后加 alias for "rdiapi.dll;ansi" 试试
  相关解决方案