这是为什么啊,调用dll(50分)

  • 主题发起人 主题发起人 tunick
  • 开始时间 开始时间
T

tunick

Unregistered / Unconfirmed
GUEST, unregistred user!
有人用过紫光的scan32.dll这个东东么。。
我用vb调用一点问题都没有。。
改成delphi倒是也可以调用,可是扫到一半的时候就翘了。。。
为什么啊。。
function scan(s:string):longint; external '../scan32.dll';

....
begin
scan('d:/');
end;
这能有什么问题呢。。vb里面函数类型是as long,为什么换成delphi就不行了。
 
能把vb的声明贴出来吗,我认为是参数有问题,一般系统是不会用STRING的可能用PCHAR
 
试试
function scan(s:pchar):longint; stdcall; external '../scan32.dll';
...
var
pScanPath : pchar;
begin
Getmem(pScanPath,100);
strPcopy(pScanPath, 'd:/');
scan(pScanPath);
FreeMem(pScanPath);
end;


还有就是看看C的函数原型中是否使用了__cdecl, 如果是,需要把
stdcall改为 cdecl
 
我没有dll的原码。。
vb里面是这么声明的。
private declare scan lib("../scan32.dll") (s:filename as string) ....忘了。。
他那个参数的确是string.是用来指定扫描文件存放路径的。。
 
是这样的。
private declare scan lib("../scan32.dll") (s:filename as string) as long
这个as long应该是长整型把。
 
在Delphi的Dll中, 不能用String来传输!
 
那我用什么呢。。。
string就是用来传递参数都不可以么?
还有就是那个dll我不能改动。。。
 
VB里有声明是传值还是传地址,你还是用一下pchar按照polygon的做做
 
polygon说得对极。。赫赫。。谢谢了。。
 
多人接受答案了。
 
后退
顶部