【发布时间】:2014-05-27 05:41:59
【问题描述】:
这里是新来的,并且是互操作和 C(++) 我确实搜索了这个问题的答案,但在 SO 或 www 上找不到它。这是我没有选择正确的单词来搜索答案,或者我错过了这个非常基本的问题的重点......
使用 Delphi dll 和“C(++) dll caller”之间的互操作,您是否明确声明 Delphi dll 中的空终止符以传递回 dll 调用者?
例如DLL调用者(C代码)
char ErrorMessage[10];
(*GetMessageFromDLLFunction)(&ErrorMessage[0], 10); // (char * ErrorMessage, int buffSize)
Dll 代码(Delphi):
GetMessageFromDLLFunction(errorMessage: PAnsiChar; buffSize: Integer)
// What if the message generated in this function exceeds 10 characters?
// do I return 9 characters and a null terminator?
tmpMessage := SetLength(tmpMessage, buffSize-1);
tmpMessage := tmpMessage + #0;
System.AnsiStrings.StrCopy(errorMessage,PAnsiChar(tmpMessage));
// or do I return 9 characters without an explicit null terminator?
tmpMessage := SetLength(tmpMessage, buffSize-1);
System.AnsiStrings.StrCopy(errorMessage,PAnsiChar(tmpMessage));
什么是最佳/正确做法?
【问题讨论】:
-
不是答案,但在这种情况下,您可能会对以下内容感兴趣:stackoverflow.com/questions/1932883/…