我有兩個C++結構,我必須從C#調用DLL方法時作爲參數發送。MarshalAs嵌套結構
例如,讓我們將它們定義爲:
struct A
{
int data;
}
struct B
{
int MoreData;
A * SomeData;
}
,我需要從C#調用具有以下簽名的方法:
int operation (B * data);
(請注意,我沒有控制在這些C++結構或方法上)。
在C#中,我將這些結構定義爲類:
[StructLayout(LayoutKind.Sequential)]
class A
{
public int data;
}
[StructLayout(LayoutKind.Sequential)]
class B
{
public int MoreData;
[MarshalAs(UnmanagedType.Struct)]
public A SomeData;
}
我已經創建了一個「調試dll」從C#調用,以確保在C++方法中正確接收所有數據。到目前爲止,只有在嵌套結構指針之前發送的數據才能正確發送。
當我嘗試從嵌套結構(B-> A->數據)讀取數據時,出現讀取違例錯誤(AccessViolationException)。
如何編組嵌套結構以便我可以在C++方法中讀取它?
這來得太遲了,剛完成自己的封送。不過,這是正確的答案。不管怎樣,謝謝你! – 2010-10-12 14:44:08