gpt4 book ai didi

delphi - 将 Delphi 字符串作为参数发送给 DLL

转载 作者:行者123 更新时间:2023-12-03 15:03:56 25 4
gpt4 key购买 nike

我想在Delphi 2010中调用一个DLL函数。该函数接受一个字符串并将其写入具有USB接口(interface)的打印机。我不知道DLL是用什么语言开发的。根据文档,该函数的语法为:

int WriteUSB(PBYTE pBuffer, DWORD nNumberOfBytesToWrite);

如何在 Delphi 中声明和使用我的函数?

我这样声明函数:

var
function WriteUSB(myP:pByte;n:DWORD): integer ; external 'my.dll';

我应该在声明中使用 stdcall 还是 cdecl 吗?

我这样调用DLL函数:

procedure myProc;
var
str : string:
begin
str := 'AAAAAAAAAAAAAAAAAAAAA';
WriteUSB(str,DWORD(length(tmp)));
end;

但是这段代码总是给我带来异常。我知道问题是 String 是 Unicode 并且每个字符 > 1 个字节。我尝试转换为不同的字符串类型(AnsiCharShortString),但失败了。

正确的做法是什么?

最佳答案

有几件事。首先,如果这是一个 C 接口(interface)(看起来确实如此),那么您需要像这样声明导入:

function WriteUSB(myP:pAnsiChar; n:DWORD): integer; cdecl; external 'my.dll';

然后要调用该函数,您需要使用 Ansi 字符串,并将其转换为 PAnsiChar,如下所示:

procedure myProc;
var
str : AnsiString;
begin
str := 'AAAAAAAAAAAAAAAAAAAAA';
WriteUSB(PAnsiChar(str), length(str));
end;

(不需要强制转换为 DWORD。)如果您这样做,它应该可以正常工作,不会给您带来任何麻烦。

关于delphi - 将 Delphi 字符串作为参数发送给 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3314963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com