在我的C#代码中,我正在尝试从遗留C++ DLL中获取结构数组(代码我无法更改).
在该C++代码中,结构定义如下:
struct MyStruct
{
char* id;
char* description;
};
Run Code Online (Sandbox Code Playgroud)
我正在调用的方法(get_my_structures)返回一个指向MyStruct结构数组的指针:
MyStruct* get_my_structures()
{
...
}
Run Code Online (Sandbox Code Playgroud)
还有另一种方法可以返回结构的数量,因此我知道返回了多少结构.
在我的C#代码中,我已经定义了MyStruct:
[StructLayout(LayoutKind.Sequential)]
public class MyStruct
{
[MarshalAsAttribute(UnmanagedType.LPStr)] // <-- also tried without this
private string _id;
[MarshalAsAttribute(UnmanagedType.LPStr)]
private string _description;
}
Run Code Online (Sandbox Code Playgroud)
互操作签名如下所示:
[DllImport("legacy.dll", EntryPoint="get_my_structures")]
public static extern IntPtr GetMyStructures();
Run Code Online (Sandbox Code Playgroud)
最后,获取MyStruct结构数组的代码如下所示:
int structuresCount = ...;
IntPtr myStructs = GetMyStructures();
int structSize = Marshal.SizeOf(typeof(MyStruct)); // <- returns 8 in my case
for (int i = 0; i < structuresCount; i++)
{
IntPtr data = …Run Code Online (Sandbox Code Playgroud)