如何从调用的DLL中返回几个整型变量?

netscaler 2002-10-01 10:03:31
我声明了如下函数function string abc(ref long a,ref long b,ref long c,ref longd) library "some.dll"
在DLL中函数的定义为 LPSTR abc(LPINT A,LPINTB,LPINT C,LPINT D)
现在问题是我无法从函数调用中返回四个整型变量,PB提示出错,说传递的参数类型与函数要求的不匹配,但我看PB网站上LPINT是与REF LONG对应的,请问是否应该用别的类型。(我也试过LPBYTE等,都不行,反正我只要调用参数中有REF 类型,就从来没调用成功过)
...全文
91 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
netscaler 2002-10-28
  • 打赏
  • 举报
回复
问题解决了,是调用的问题,我原来用_stdcall不成功是因为没有在.DEF文件中声明导出函数,致使PB无法找到函数。谢谢大家。
WangAQ 2002-10-11
  • 打赏
  • 举报
回复
不同的调用约定(calling convention)返回时对堆栈的处理是不一样的。应该用_stdcall。
WangAQ 2002-10-03
  • 打赏
  • 举报
回复
本来在不同的编译器之间调用DLL就是很乱的事。如果用 _stdcall,就要用DEF文件导出函数名,否则VC的编译器会修改输出函数名。检查一下你的DLL看有没有可能引起问题的地方。
netscaler 2002-10-03
  • 打赏
  • 举报
回复
我没有用.def文件,我直接写了_declspec(export),用WINAPI好象也不行,WINAPI好象就是#define winapi _stdcall,这样写了,连函数也无法调用了,我试了,就算在函数中不修改STRUCT,返回时一样出错,我怀疑是不是平台的关系,我用的是PB7。0,是否有补钉可用。
hjd_cw 2002-10-03
  • 打赏
  • 举报
回复
用 WINAPI 声明函数,就可以了。
如:
int WINAPI func_name(.....)

然后还要在 .def 文件里,将函数export 出来。
netscaler 2002-10-03
  • 打赏
  • 举报
回复
我是用ref struct来传出结果,但返回时总是出错,我想在VC6下编译DLL后再试试。
hjd_cw 2002-10-03
  • 打赏
  • 举报
回复
用 WINAPI 声明函数,就可以了。
如:
int WINAPI func_name(.....)

然后还要在 .def 文件里,将函数export 出来。
hjd_cw 2002-10-03
  • 打赏
  • 举报
回复
最好不要在DLL的函数里返回string,建议由参数传出。
netscaler 2002-10-03
  • 打赏
  • 举报
回复
我能调用DLL中的函数,但在函数返回时出错,难道这和_stdcall有关吗?,函数名PB是认识的,VC在编译的时候没有把函数名变成aaa@10之类的形式。请教
netscaler 2002-10-02
  • 打赏
  • 举报
回复
VC做的,vc7.0
netscaler 2002-10-02
  • 打赏
  • 举报
回复
我在DLL导出函数前加上_stdcall,PB就无法调用了,我是这样声名的
extern "C" _declspec(dllexport) DWORD _stdcall GetTerminalIP(LPVOID struct_ip),PB提示错误R0015:错误地调用外部函数,如果我不加_stdcall,可以调用,但函数返回时PB说类型不匹配,我现在不知道到底是PB的问题,还是在WIN2000下不行,或者我的DLL写的不对,我发现参照SYBASE网站上的PB API调用原型这篇文章,其中有一些不匹配的地方,原来我PB中STRUCT成员定义的INT类型,对应DLL中INT类型,但发现不行,如果定成LONG型可以传入参数,我现在都改为DWORD类型,在DLL中也能对STRUCT赋值,但函数返回后出错。我做过实验,就算参数是一个REF STRING类型,在DLL中对其赋值后,函数返回后PB还是要报错,但这时我在PB中看到值其实已经返回了,
反正只要带有REF STRING类型的参数,我的函数就没有调用成功过,真不知道怎么回事。
WangAQ 2002-10-02
  • 打赏
  • 举报
回复
你拿什么做的DLL?VC嘛?
hjd_cw 2002-10-02
  • 打赏
  • 举报
回复
看看DLL导出的函数是否 标准调用:WINAPI 。
netscaler 2002-10-02
  • 打赏
  • 举报
回复
我改成ref struct也不行啊,我调试DLL时,看到PB传入了结构指针,我也对结构赋值,但在RETURN后,PB还是类型不匹配。我是在WIN2000下,到底PB该传什么参数才能得到正确结果。
WangAQ 2002-10-01
  • 打赏
  • 举报
回复
我的印象里,只有ref string 好用。
LPINT应该是与INT相对应,不妨试试看。
你可以用结构来传递多个变量,结构支持REF
Cango 2002-10-01
  • 打赏
  • 举报
回复
你把要调用的DLL中的那个函数的返回值改为一个整型数组不就行了吗

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧