在 Delphi 中,我将 AnsiString 数据发送到 C++ DLL 函数,但输入值丢失了。为什么会出现这种情况?
In Delphi, I send AnsiString Data to C++ DLL Function, but input value was lost. Why happened this situation?
我了解了一些更详细的问题。所以,我改变了问题。
感谢之前回答问题的人。
现在,这是一个详细的问题。
在delphi中,我将AnsiString类型的数据发送给DLL中的C++函数
在Delphi07
TFunctionA = function (aHandle: FunctionAHANDLE ; input: AnsiString): AnsiString; cdecl;
....
FunctionA('Test string value');
在 C++ DLL 中
char * FunctionA(char *input){
....
return pReturn;
};
在这种情况下,我使用 Visual Studio 15 Debug 确认了数据(char *input),数据丢失了(AnsiString)
但在 Delphi 中,TFunctionA 的 Return 类型将 AnsiString 更改为 AnsiChar,
然后传输数据(char *input)("Test string value").
TFunctionA = function (aHandle: FunctionAHANDLE ; input: AnsiString): AnsiChar; cdecl;
我不知道这种情况,因为我从未与 Delphi 合作过。
Delphi的AnsiString
与C的char *
类似,但绝对不是一回事。假设你的 C 函数是:
char * FunctionA(char *input){
....
return pReturn;
};
那么您的 Delphi 声明应该如下所示:
function FunctionA(Input: PAnsiString): PAnsiString; cdecl;
您将以这种方式使用它:
var
SomeInput, SomeOutput: AnsiString;
begin
SomeInput := 'foobar';
SomeOutput := AnsiString(FunctionA(PAnsiChar(SomeInput)));
Writeln(SomeOutput);
end;
给你先 "convert" (不是真的,但足够接近) AnsiString
SomeInput 到 PAnsiChar
,这是一个零终止的字符串,正好等于 C 的 char *
.您将其传递给您的 C 函数,然后(真正)将 char *
结果(与 Delphi 的 PAnsiChar
相同)转换为 Delphi 的 AnsiString
.
或者,如果您想用 C/C++ 术语来解释它,您有一个 C++ string
,您可以使用 [=23] "convert" 到 char *
=],然后借助 string(char *)
构造函数,基于 char *
创建一个新的 string
。
我了解了一些更详细的问题。所以,我改变了问题。 感谢之前回答问题的人。
现在,这是一个详细的问题。 在delphi中,我将AnsiString类型的数据发送给DLL中的C++函数
在Delphi07
TFunctionA = function (aHandle: FunctionAHANDLE ; input: AnsiString): AnsiString; cdecl;
....
FunctionA('Test string value');
在 C++ DLL 中
char * FunctionA(char *input){
....
return pReturn;
};
在这种情况下,我使用 Visual Studio 15 Debug 确认了数据(char *input),数据丢失了(AnsiString)
但在 Delphi 中,TFunctionA 的 Return 类型将 AnsiString 更改为 AnsiChar, 然后传输数据(char *input)("Test string value").
TFunctionA = function (aHandle: FunctionAHANDLE ; input: AnsiString): AnsiChar; cdecl;
我不知道这种情况,因为我从未与 Delphi 合作过。
Delphi的AnsiString
与C的char *
类似,但绝对不是一回事。假设你的 C 函数是:
char * FunctionA(char *input){
....
return pReturn;
};
那么您的 Delphi 声明应该如下所示:
function FunctionA(Input: PAnsiString): PAnsiString; cdecl;
您将以这种方式使用它:
var
SomeInput, SomeOutput: AnsiString;
begin
SomeInput := 'foobar';
SomeOutput := AnsiString(FunctionA(PAnsiChar(SomeInput)));
Writeln(SomeOutput);
end;
给你先 "convert" (不是真的,但足够接近) AnsiString
SomeInput 到 PAnsiChar
,这是一个零终止的字符串,正好等于 C 的 char *
.您将其传递给您的 C 函数,然后(真正)将 char *
结果(与 Delphi 的 PAnsiChar
相同)转换为 Delphi 的 AnsiString
.
或者,如果您想用 C/C++ 术语来解释它,您有一个 C++ string
,您可以使用 [=23] "convert" 到 char *
=],然后借助 string(char *)
构造函数,基于 char *
创建一个新的 string
。