我是Delphi 6开发人员。并尝试从delphi调用C ++ DLL函数。 用C ++编写的Dll和将Char指针作为out参数。
例如
Function doGetStatus(Var szStatusData : Char) : Integer; cdecl; external 'WhizCal.dll';
当我从DLL调用函数时,我发送char变量' szStatusData'并且返回值应该是' Down'或者' Live'但它只会重新调整“D' D'或者' L'这是因为我已经传递了Char变量引用。 我的问题是,我可以做些什么来获取返回数据作为' Down'或者' Live'不改变数据类型。
答案 0 :(得分:1)
char
只是一个字符。所以你不能指望更多。
很可能C ++代码希望传递一个指向字符数组的指针。也许它应该是这样的:
function doGetStatus(szStatusData: PAnsiChar): Integer; cdecl; external 'WhizCal.dll';
你可以这样称呼它:
var
StatusData: array [0..255] of AnsiChar;
RetVal: Integer;
....
RetVal := doGetStatus(StatusData);
// check RetVal
我们无法告诉您代码应该是什么,因为我们没有指定接口的任何详细信息。除非调用者也传递了数组的长度,否则这样的函数就是缓冲区溢出错误的诱饵。如上所述,情况就是这样。调用者如何知道要分配多少空间。设计良好的函数还允许调用者传递它们提供的数组的长度。
我对你的一般建议是,互操作是一个需要精确和细节以及边界两侧知识的主题。你需要找出那个细节。