【发布时间】:2012-10-22 12:25:53
【问题描述】:
我在类型库中定义了一个结构,该类型库导入到 Delphi 5 和 C# 程序集中。
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct MyStruct
{
public uint a;
public float b;
}
MyStruct = packed record
a: LongWord;
b: Single;
end;
在 Delphi 方面,我有一个指向所述结构的 C 样式数组的指针,我想通过 COM 将其传递给 C# 程序集。理想情况下,我希望它在 c# 端作为 myStruct[] 结束,但我会使用一个指向正确编组的内存块的指针,因为这些结构都是 blittable。
我尝试过的两种方法是
void DoFoo([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] MyStruct[] fooArray, int size);
void DoBar(MyStruct[] barArray, int length);
转换为类型库并导入delphi后是
procedure DoFoo(var fooArray: MyStruct; size: Integer); safecall;
procedure DoBar(barArray: PSafeArray; length: Integer); safecall;
我认为安全数组不适用于结构,而另一个显然不是数组。
任何想法/链接/非常感谢。
【问题讨论】:
-
我想我可以把整个东西当作一个字节[],把它安全地排列到 c# 中,然后给它做一些不安全的指针。
标签: c# delphi com-interop