我在 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
字符串是空的。我不明白为什么。我究竟做错了什么?