【发布时间】:2017-09-09 10:05:30
【问题描述】:
我想在我的 delphi 7 项目中使用 c++ DLL。我在我的 delphi7 项目中成功调用了 DLL 的一个函数,但在另一个参数为 stringbuilder 的函数中出现错误。 C++函数细节如下。(我从dll的头文件中得到)
WN_COMM_ERR WINAPI MYFUNCTION(WN_COMM_HANDLE handle, const char *command, char *answer, unsigned long maxlen, unsigned long timeout_ms, WN_ANSWER_TYPE *type);
而且答案类型是枚举类型:-
typedef enum {
WN_ANSWER_ACK = '>', // An OK frame was received
WN_ANSWER_NACK = '!', // An ERR frame was received
WN_ANSWER_TOUT = 0, // Command timed out before an answer could be received
}WN_ANSWER_TYPE;
我已经在 c# 代码中成功调用了相同的函数并且它正在工作。但我不知道如何在 delphi7 上调用它,因为答案参数是 stringbuilder 类型,而在 delphi7 中它们不是任何 stringbuilder 类型的东西。我尝试使用 Pansichar,string,pchar 但未在答案类型变量中获得值:-
C# 声明:工作
[DllImport("wn_comm.dll", CharSet = CharSet.Unicode)]
public static extern UInt32 MYFUNCTION(IntPtr handle, string command, StringBuilder answer, UInt32 maxlen, UInt32 timeout_ms, ref Int32 answer_type);
调用 C# 函数:工作
WriteNowWrapper.MYFUNCTION(this.comm_handle, command, sbAnswer, (uint)sbAnswer.Capacity, Timeout, ref answerType)
当我从我的 c# 应用程序调用上面时,我已成功接收 answertype 和 sbanswer 变量值。
Delphi7 声明:不工作
function MYFUNCTION (handle:Longint; command:string;var answer:PAnsichar; maxlen:integer; Timeout:integer; VAR answretype:INTEGER) : longint; stdcall; external 'wn_comm.dll';
Delphi7调用函数:不工作
MYFUNCTION(self.comm_Handle,command,answer,2,Timeout,answerType)
当我从 delphi7 应用程序调用 MYFUNCTION 时。它成功执行并更新了作为整数类型参数的 answertype 中的值,但在 answer 变量中我变得空白。
谁能帮助我我做错了什么?
【问题讨论】:
标签: c# c++ delphi dll type-conversion