一个DLL函数调用的问题(50分)

  • 主题发起人 maple_guo
  • 开始时间
M

maple_guo

Unregistered / Unconfirmed
GUEST, unregistred user!
函数格式如下:
Declare integer GetSerialNumber in DiskSerial.dll Integer nDrive, String @lpBuffer

在Delphi中声明如下:
implementation

{$R *.dfm}

function GetSerialNumber(nDrive: Integer
lpBuffer: Pointer): Integer;
Stdcall
external 'DiskSerial.dll';

对吗?

procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
lpBuffer: string;
begin
GetSerialNumber(0, @lpBuffer)
//报错!!!
ShowMessage(lpBuffer);
end;
 
你 DiskSerial.dll 是用什么写的,如果是VC的话

有可能是调用方式的问题
把 函数声明中的 stdcall 改为 cdecl

即:

function GetSerialNumber(nDrive: Integer
lpBuffer: Pointer): Integer;
cdecl
external 'DiskSerial.dll';
 
试试以下声明:
function GetSerialNumber(nDrive: Integer
var sStr:ShortString): Integer;
Stdcall
external 'DiskSerial.dll';
这样调用:
Buffer: ShortString;
begin
//结果不对的话先级 buffer 赋足够长的值。Buffer='aaaaaaaaaaaaaaaaaaaaaaaaa';
GetSerialNumber(0, Buffer);

 
还有一点要注意,
调用的时候要写成:
GetSerialNumber(0, PChar(lpBuffer));
 
谢谢各位!接受了jsxjd兄的答案。
 

Similar threads

回复
3
查看
111
妙兔无花
B
回复
15
查看
126
Beyond2002
B
顶部