DLL函数的调用问题(100分)

  • 主题发起人 主题发起人 我无言
  • 开始时间 开始时间

我无言

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个DELPHI写的DLL,其中一个函数的传入和返回参数都是结构,
DELPHI 中的函数声明:function callmydll(in_data :Tin_dll):Tout_dll;
DELPHI中的结构定义如下
TYPE
Tin_dll record
stru1 :byte
stru2 :array[0..6] of char
stru3 :array[0..4,0..239] of byte
end;

TYPE
Tout_dll record
stru1 :byte
stru2 :char
stru3 :array[0..5] of char
我在DELPHI写程序中可以正确调用该DLL,但是在PB8中却调用出错,提示不支持的类型,请问能否在PB8中调用,如果能,其中的传入结构和返回结构如何定义?谢谢!
如果不能,是不是需要修改以上结构的参数,改成WINDOWS标准的数据类型,怎样改,谢谢了!
 
Byte就是8位无符号整型,Char是字符型,这些已经都是Windows的标准类型了,所以,象你上面
这样定义的输入和输出结构类型是正确的。
我个人认为你应该注意两点:
1、函数声明因该这样:function callmydll(in_data :Tin_dll):Tout_dll;
stdcall;
2、函数名、参数、返回类型,都要注意大小写
应该没问题了。再有问题,就是DLL程序或调用程序的问题了。
 
将DLL中的结构写成Tin_dll= packed record
stru1 :byte
stru2 :array[0..6] of char
stru3 :array[0..4,0..239] of byte
end;

 
以上两种方法都试了,还是没有搞定,我做了个实验,同样的DLL函数,只要函数的参数
不是结构,在PB中调用就没有问题,一旦参数换成一个结构,PB调用就会出错,提示不支持
的参数类型,但是用DELPHI调用又不会报错,搞不懂!
 
用指针方式当参数
 
同意楼上,换个指针类型就行了,我听说PB很多数据类型都不支持,不过我没用过
 
指针类型? 应该怎么样用哦? 申明都不成功的啊!
 
你指的指针方式是在PB的函数声明中参数前面加上REF?还是在DELPHI中把DLL的参数换成
指针型的参数?请赐教!
 
多人接受答案了。
 
后退
顶部