我需要從C#中進入C++並帶回一個結構的二維數組。我有一切設置,如果我附加一個調試器一切似乎是正確的,除了我的二維數組不適當編組。如果我在調用本地方法之前使用值加載它,然後從本機端查看數組,我會在VS的監視窗口中看到很多「無效」指針。然後C++代碼繼續前進,並使用值加載數組,但在編組回到C#期間,出現內存訪問衝突。我不想做這個作爲1d數組。從C#到本機C++的統一二維數組結構
這裏是我的C++結構和方法的定義:
struct DoubleStringStruct
{
BSTR Value;
BSTR NumberFormat;
};
HRESULT WINAPI NativeArrayHandler(LONG rMax, LONG cMax, DoubleStringStruct** values)
{
for(LONG rn=1; rn <= rMax; rn++)
{
for (LONG cn = 1; cn <= cMax; cn++)
{
DoubleStringStruct s;
s.Value = _wcsdup(L"Test");
s.NumberFormat = _wcsdup(L"Test");
values[rn][cn] = s;
}
}
return S_OK;
}
和我的C#代碼:
[StructLayout(LayoutKind.Sequential)]
public struct DoubleStringStruct
{
[MarshalAs(UnmanagedType.BStr)]
public string value;
[MarshalAs(UnmanagedType.BStr)]
public string numberFormat;
}
[System.Runtime.InteropServices.DllImport(c_dllName)]
public static extern void NativeArrayHandler(int hMax, int cMax, DoubleStringStruct[,] args);
public void sometMethod()
{
DoubleStringStruct[,] someDSS= new DoubleStringStruct[4,3];
NativeArrayHandler(4, 3, someDSS);
}
FWIW - 我注意到在陣列尺寸參數是通過正確地傳來的本機代碼。 – Dlongnecker
嘗試使用數組([[] []')而不是多維數組([[,]')並查看是否有效。 – Ryan
Hrmm ...我認爲這是不可能的,直到我看到這個人,但我希望有更多的東西「automagic」http://stackoverflow.com/questions/6327196/problem-marshalling-c-sharp -jagged陣列到C – Dlongnecker