动态库调用 (200分)

  • 主题发起人 主题发起人 Lotus123
  • 开始时间 开始时间
L

Lotus123

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi的动态库中定义一函数,其中有一参数为记录型数组
例如
Type
tardDemo = Record
p1 : Integer;
p2 : Single;
p3 : pChar;
end;
...
Function FTest(Out ardDeno : Array of TardDemo) : Integer;
SafeCall;
...
请问在PB中应如何调用?
 
另外参数类型如何定义,使得不同的开发语言调用时不会出错?
急......
 
你这样好象是COM的定义方法,你是用的COM还是DLL
 
你要在pb中调用,最好使用标准c调用的函数格式,否怎很可能,pb不支持SaceCall
 
to zm30: 是DLL
 
请问老叫花子:cdecl、stdcall、safecall有何区别?
 
还是动态数组?
用字符串合成。
 
To jsxjd:我想将一张表中的符合条件的数据(记录数是变化的,但是我可以将其作为一个参数返回)
通过数组的方式返回给调用者
 
stdcall可以应用到不同的语言调用中去,safecall是对于COM用的。
如果是DLL的话,你可以把他设定为stdcall,关于pb中调用动态连接库我也不会/
你还是得上网搜索一下。
 
PB我不熟悉,但是在Foxpro没有指针类型。
Foxpro在调用含指针或记录参数的API时,是用字符串的方式实现的。
将参数的内容逐个字节构造成一个字符串,然后传递字符串。
我曾经在Foxpro中调用了一些比较复杂的API,来实现系统托盘。
原理就是这样,要动手,先试试简单的API。
 
在PB下面定义一个结构,其结构中的元素与Delphi中的记录相同。
但是,有一个问题是,在Delphi中记录中的p3的数据类型应该改为LPSTR(它Windows单元),
而在PB中相应改为string数据类型。
 
但问题是在PB中定义结构后,调用时如果返回多行记录则会出错(单行记录没问题)
 
另外在Foxpro中能定义结构类型吗?
(背景:我做的是一个标准函数,用DLL的形式封装,供别的开发商(HIS系统)调用,
开发工具多样,PB、Delphi、Foxpro等)
 
在 foxpro 中不能定义结构,但可以传送指针,结构的内容是通过字符串构造的。
 
也就是说,我以结果作为参数,Foxpro没法调用?(我对Foxpro不太了解)
还有PB能调用返回记录集的函数吗?
如:Function Demo : OleVariant;
在PB中如何调用?
 
在pb中定义一个用户对象,在local External function里定义,像下面:
function int b64_size(ulong size, ulong flag) library "des64.dll"
在用的时候定义一个实例就可以用了。
 
多人接受答案了。
 

Similar threads

后退
顶部