急!!Delphi怎么调用dll中的函数?一定加分

wangw 2002-11-07 04:29:19
query.dll中一个导出函数如下:
PeresonAccount(string CardNum,ref double Total,ref string ErrMsg)

我在Delphi中用以下语句调用,但是出错了:
type
TFPersonAccount=procedure(CardNum: String; var Total: Double; var ErrMsg: String); StdCall;

var
PersonAccount: TFPersonAccount;
a: double;
eString: String;

LibHandle:=LoadLibrary('query.dll');
@PersonAccount:=GetProcAddress(LibHandle, 'PersonAccount');
PersonAccount('0101015190', a, eString);

程序在最后一个语句上出错,出错信息为:Access Violation at address 00403F38 in module...
对dll函数中被ref修饰的参数要如何处理? 对于string参数要如何处理?
要怎么才能正确调用这个函数呢?最好能给出代码,谢谢!

...全文
55 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hot3000 2002-11-07
  • 打赏
  • 举报
回复
GetProcAddress(LibHandle, 'PersonAccount');
中的'PersonAccount'函数要与'
query.dll'中的'PersonAccount'要完全一样(大小写敏感)
你最好查一查。
movingboy 2002-11-07
  • 打赏
  • 举报
回复
或许是Delphi的string与你的DLL里的string类型不兼容,你最好查一查
lws0472 2002-11-07
  • 打赏
  • 举报
回复
PeresonAccount(string CardNum,ref double Total,ref string ErrMsg)

看你的定义应该实在pb中用的吧

你的函数应该声明为:
type
TFPersonAccount=procedure(CardNum: String; Total: Dword;ErrMsg: pchar); StdCall;


不过在你的程序中没有发现对a和estring赋值,再看一下吧
a定义为dword型。

调用时PersonAccount('0101015190', a, pchar(eString));

ref在pb中是指针型的,在delphi中要对应pchar
blueshu 2002-11-07
  • 打赏
  • 举报
回复
是不是调用方式的问题?
chechy 2002-11-07
  • 打赏
  • 举报
回复
query.dll怕是c#写的吧,.net的dll不是普通的DLL,而是Assembly。不过可以转化成为COM,这样Delphi就可以调用了。
将.net的dll转为COM的工具是regasm.exe

1,182

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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