我一直在尝试以下方式调用 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'的字段'Name':无效的托管/非托管类型组合(字符串字段必须与LPStr、LPWStr、BStr或ByValTStr配对)。
然而,这些组合都不起作用,因为Delphi的字符串是带有长度前缀的,并且它肯定是Ansi的(我已经尝试过其他字符串参数)。有人知道如何解决这个问题吗?