有一个方法:就是再用DELPHI包装一次。 function fun (Filename:PChar;Directory:PChar):int;stdcall; var sFileName, sDirectory: string; begin sFileName := string(FileName); sDirectory := string(Directory); unpackfunction() Result := ; end;
function unpackfunction (sFilename:string;sDirectory:pchar):boolean;far;external 'mylib.dll' 在VB中这样声明,死机!!! Private Declare Function unpackfunction Lib "'mylib.dll" (byval sFilename As String, sDirectory As String) As Boolean string 改为Pchar VB声明时按值传送byval
Boolean 改为 DWord
function unpackfunction (Filename:PChar;Directory:PChar):int;stdcall;
var
sFileName, sDirectory: string;
begin
sFileName := string(FileName);
sDirectory := string(Directory);
....
end;
这样在VC和VB中就不会有问题了!!
我这个DLL是别人写好了给我的,函数接口也告诉了我.
只是我现在发现在DEHPI中可以如我所说的方式调用此函数,却无法在VB中调用,请问我应该如何在VB或VC中调用此函数?谢谢!!!
此DLL原型函数已经无法修改了,因为写此函数的人已经找不到了.
我用VB6无法调用此函数,死机.
function fun (Filename:PChar;Directory:PChar):int;stdcall;
var
sFileName, sDirectory: string;
begin
sFileName := string(FileName);
sDirectory := string(Directory);
unpackfunction()
Result := ;
end;
再说,我也不懂DEPHI.我现在怀疑此DLL是用DEPHI写的,可惜我已经无法修改原型函数了,有办法解决么?
我想主要是参数类型的问题,有没对应关系,我可以使用其他类型么?请诸位高手继续指点,谢谢!!!
在声明函数时要注明__stdcall
我给你一个例子吧:
在VB中这样声明,死机!!!
Private Declare Function unpackfunction Lib "'mylib.dll" (byval sFilename As String, sDirectory As String) As Boolean
string 改为Pchar
VB声明时按值传送byval