C# APP から一部のデータを圧縮するために使用される Delphi 2010 DLL があります。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
が、array of byte
その方法がわかりません。