将Delphi字符串作为参数发送到DLL
发布时间:2020-12-15 09:42:28 所属栏目:大数据 来源:网络整理
导读:我想在Delphi 2010中调用DLL函数.该函数接受一个字符串并将其写入带有USB接口的打印机.我不知道DLL开发的语言是什么.根据文档,该函数的语法是: int WriteUSB(PBYTE pBuffer,DWORD nNumberOfBytesToWrite); 如何在Delphi中声明和使用我的函数? 我声明这样的
我想在Delphi 2010中调用DLL函数.该函数接受一个字符串并将其写入带有USB接口的打印机.我不知道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个字节.我试图转换为不同的字符串类型(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是不必要的.)如果你这样做,它应该工作,而不会给你任何麻烦. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |