vc如何传递结构指针给delphi的dll

yuehaiyang 2008-11-02 02:30:08
用delphi写了一个dll,其中一个函数参数就是一个结构指针,在delphi中调用正常,可是在vc中如何调用?

1、下面是dll中的声明
function fReadDomainList(pdomlist :pukeyDomainList):Integer;stdcall

2、这个是delphi程序中调用
function TfrmGroup.fReadFromUkey:Boolean;
var
pukey :pukeyDomainList;
i,cnt :Integer;
s :string;
begin
Result := False;
new(pukey);
fReadDomainList(pukey);
cnt := pukey^.ItemCnt;
for i := 0 to cnt -1 do
begin
s := IntToStr(pukey^.Item[i].Domainid) +'-'+pukey^.Item[i].Domainname;
ShowMessage(s);
end;
Dispose(pukey);
Result := True;
end;

不只,此函数如何在vc中调用?如何传结构指针?
...全文
150 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenyq2008 2008-11-03
  • 打赏
  • 举报
回复
将内存地址转为整形,直接传过去就是了
yuehaiyang 2008-11-02
  • 打赏
  • 举报
回复
谢谢楼上两位,特别是1楼的,实践证明delphi的dll函数中声明为pointer类型兼容性比声明为结构指针要好很多。
五维思考 2008-11-02
  • 打赏
  • 举报
回复
注意调用方式:VC默认调用方式为cdecl 你的DLL显式调用方式为stdcall 所以在VC调用此DLL时要显式声明为stdcall
etomahawk 2008-11-02
  • 打赏
  • 举报
回复
反正就是一个指针,不管是delphi还是VC,都是4个字节。你直接传过去就OK了,以前做过。

只要注意的就是必须保证VC和Delphi的结构体的内存对齐方式要一样。

// 翻译成VC函数原型
int fReadDomainList(pukeyDomainList pdomlist); stdcall;

// 声明函数指针
typedef int (stdcall pfn_fReadDomainList*)(pukeyDomainList pdomlist);

// 调用过程,先声明一个函数指针变量
pfn_fReadDomainList pfnRead;

// 加载dll, 获取函数地址
hLib = LoadLibrary("xx.dll");
pfnRead = GetProcAddress(hLib, "fReadDomainList");

// 调用
pfnRead(....);

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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