我有一个 Delphi 2010 DLL,用于压缩来自 C# APP 的一些数据。DLL 函数如下所示:
function CompressString(aInputString: PAnsiChar; aInputStringSize: Integer;
var aOutPutString: PAnsiChar; var aOutPutStringSize: Integer;
var aErrorMsgBuffer: PAnsiChar; var aErrorMsgBufferSize: integer): Integer;
stdcall; export;
C# 方法如下所示:
[DllImport("MyDLL.dll", CallingConvention=CallingConvention.StdCall, CharSet=CharSet.Ansi)]
public static extern int CompressString(string aInputString,
int aInputStringSize, ref string aOutPutString,
out int aOutPutStringSize, ref string aErrorMsgBuffer,
out int aErrorMsgBufferSize);
我的问题是aOutPutString
被截断,C# 应用程序只能看到部分数据。如果我aOutPutString
在 Delphi DLL 中更改为一个简单的文字常量(仅用于测试),它可以正常工作。
在 DLL 中,我正在处理字符串。在函数结束时,我调用:
StrPCopy(aOutPutString, vOutOutAnsiStr);
转换一个AnsiString
do PAnsiChar
。
我想我不应该使用PAnsiChar
but array of byte
,但我不知道该怎么做。