次の方法で、Delphi で作成されたメソッドを呼び出そうとしています。
function _Func1(arrParams: array of TParams): Integer;stdcall;
type
TParams = record
Type: int;
Name: string;
Amount : Real;
end;
私のコードは次のとおりです。
[DllImport("some.dll", EntryPoint = "_Func1", CallingConvention = CallingConvention.StdCall)]
public static extern int Func(
[MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.Struct)] TParams[] arrParams)
構造体は次のとおりです。
[StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct TParams
{
public int Type;
[MarshalAs(UnmanagedType.AnsiBStr)]
public string Name;
public double Amount;
}
このメソッドを呼び出すと、次のエラーが表示されます: タイプ 'TParams' のフィールド '名前' をマーシャリングできません: 管理対象/非管理対象の型の組み合わせが無効です (文字列フィールドは、LPStr、LPWStr、BStr、または ByValTStr とペアにする必要があります)。
ただし、Delphi の文字列には長さがプレフィックスとして付けられており、確実に Ansi であるため、これらの組み合わせはどれも機能しません (他の文字列パラメーターで試しました)。誰もこれを解決する方法の手がかりを持っていますか?