我在Delphi XE4应用程序中使用NIDAQmx DLL。 DLL只有一个ANSI C头文件。
我试图转换此功能:
int32 __CFUNC DAQmxGetPhysicalChanName(TaskHandle taskHandle,
const char channel[], char *data, uInt32 bufferSize);
这是我的翻译:
function DAQmxGetPhysicalChanName(taskHandle: TTaskHandle;
chanName: PAnsiChar; chanPhysName: PAnsiChar;
bufferSize: DWORD): Integer; stdcall; external NI_DLL_NAME delayed;
当我这样称呼时:
var
s1,s2: String[200];
sp: PAnsiChar;
begin
// sp:=@s2[1]; When I uncomment this, fucntion works as
// expected, otherwice return string s2 is empty!
res:=DAQmxGetPhysicalChanName(taskHandle,@s1[1],@s2[1],200);
该功能仅在我在通话前插入sp:=@s2[1]
时有效。我从来没有真正使用sp
指针,只是它被分配的事实有帮助。没有它,s2
字符串为空。我不明白为什么。我做错了什么?