我有一个Delphi 2010 DLL将被用于从C#应用程序压缩一些数据。 DLL函数如下:从德尔福DLL发送二进制数据做一个C#应用程序
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#应用程序,只有部分数据被看到。如果我将Delphi DLL中的aOutPutString
更改为简单文字常量(仅用于测试),它可以正常工作。
的DLL里面,我处理字符串。在函数的结尾,我称之为:
StrPCopy(aOutPutString, vOutOutAnsiStr);
要转换AnsiString
做PAnsiChar
。
我想我不应该使用PAnsiChar
而是array of byte
,但我不知道该怎么做。
字符串是不是在压缩/序列化意义上的“二进制” ......这可能会工作了很多更好的byte [] –
我完全同意的代名词,但我不知道该怎么做。你能举个例子吗? –
对不起,我十多年来没有碰过Delphi/Pascal。 –