无法读取传递给函数的变量的内存地址作为引用调用

时间:2015-02-04 12:37:46

标签: delphi

我是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'不改变数据类型。

1 个答案:

答案 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

我们无法告诉您代码应该是什么,因为我们没有指定接口的任何详细信息。除非调用者也传递了数组的长度,否则这样的函数就是缓冲区溢出错误的诱饵。如上所述,情况就是这样。调用者如何知道要分配多少空间。设计良好的函数还允许调用者传递它们提供的数组的长度。

我对你的一般建议是,互操作是一个需要精确和细节以及边界两侧知识的主题。你需要找出那个细节。