Delphi & C++ POS 与 DLL 的通信
Delphi & C++ POS communication with DLL
我正试图让我的财务打印机在没有用c++编写的"驱动程序"的情况下工作,并与文件通信。我想避免这种情况,并使用财务打印机的dll文件进行直接通信。
在我发送命令"F0"(打印机状态)后,在c++应用程序中,答案是:060052000001000000018400000003ae51452020524d2033333033833322020202031352e30382e323031332031343a3330
在我发送命令"F0"(打印机状态)后,在delphi应用程序中的答案是:䁘
c++代码:
extern "C" __declspec(dllimport) char* __stdcall TransmitPrinterCommand(int IPCom, char* Port, int BaudRateNr, char* Command);
cprt = TransmitPrinterCommand(0, cp.c_str(), StrToInt(Baud), EditCommand->Text.c_str());
if (cprt.Length() == 2)
{ ... error
delphi代码:
function TransmitPrinterCommand(IPCom:integer; Port:AnsiString; BaudRateNr:integer; Command:AnsiString):WideChar;
stdcall; external 'QPrintFM.dll';
...
procedure TForm1.Button1Click(Sender: TObject);
var
cprt:WideChar;
begin
cprt:=TransmitPrinterCommand(0,AnsiString('COM2'), 9600, AnsiString(txtKomanda.Text));
txtRez.Text:=cprt;
end;
编辑3
正如Re0sless建议的那样,我在中更改了代码
function TransmitPrinterCommand(IPCom:integer; Port:AnsiString; BaudRateNr:integer; Command:AnsiString):PAnsiChar;
stdcall; external 'QPrintFM.dll';
cprt:=TransmitPrinterCommand(0,AnsiString('COM2'), 9600, AnsiString(txtKomanda.Text))
现在所有的工作葡萄酒。
提前感谢!
C++函数的Delphi翻译是错误的。不能跨越DLL边界使用托管Delphi字符串。相当于char*的Delphi,指向以null结尾的char数组的指针是PAnsiChar。
您需要:
function TransmitPrinterCommand(
IPCom: Integer;
Port: PAnsiChar;
BaudRateNr: Integer;
Command: PAnsiChar
): PAnsiChar; stdcall; external 'QPrintFM.dll';
这样称呼它:
cprt := TransmitPrinterCommand(
0,
'COM2',
9600,
PAnsiChar(AnsiString(txtKomanda.Text))
);
我不确定释放函数返回值的协议是什么。这是你应该仔细检查的事情。您无法解除分配它,所以DLL导出一个解除分配程序,或者内存是静态分配的。
相关文章:
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- UCRTbase.dll涉及TCP通信的C ++ Windows Embedded Standard崩溃
- 创建与Windows服务通信的非托管DLL(在C 中)
- 如何在C++中从DLL到调用应用程序进行通信
- 独立 DLL 之间的内部进程通信
- 如何在Windows调用的DLL和主应用程序之间进行通信
- Delphi & C++ POS 与 DLL 的通信
- 使用C/C++DLL和Python/Pyserial与Opticon条码读取器进行通信
- c侦听器与winsock-sender dll之间的套接字通信
- DLL与主程序的通信
- 在 c# 接口应用程序之间进行通信并注入到另一个进程 dll
- 与dll相互通信的最佳方式是什么?