将Delphi字符串作为参数发送到DLL

将Delphi字符串作为参数发送到DLL,第1张

概述我想在Delphi 2010中调用DLL函数.该函数接受一个字符串并将其写入带有USB接口的打印机.我不知道DLL开发的语言是什么.根据文档,该函数的语法是: int WriteUSB(PBYTE pBuffer, DWORD nNumberOfBytesToWrite); 如何在Delphi中声明和使用我的函数? 我声明这样的函数: varfunction WriteUSB(myP:pByte 我想在Delphi 2010中调用DLL函数.该函数接受一个字符串并将其写入带有USB接口的打印机.我不知道DLL开发的语言是什么.根据文档,该函数的语法是:

int WriteUSB(PBYTE pBuffer,DWORD nNumberOfBytesToWrite);

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

我声明这样的函数:

varfunction 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个字节.我试图转换为不同的字符串类型(AnsiChar和ShortString),但我失败了.

这样做的正确方法是什么?

解决方法 几件事.首先,如果这是一个C接口,它看起来像是,那么你需要声明导入如下:

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字符串作为参数发送到DLL全部内容,希望文章能够帮你解决将Delphi字符串作为参数发送到DLL所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1270255.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存