我已經尋找了幾天,已經嘗試了所有我能找到,但仍不能得到這個工作。麻煩編組結構數據的陣列從C++到C#
詳情: 我有一個調用到我的非託管的DLL第三方股票交易應用程序。它提供的數據是dll進程/過濾器,然後保存到全局環形緩衝區中。環形緩衝區是一個100長的結構陣列。所有這些都在股票交易應用程序進程中運行。
我也有一個託管C#應用程序調用到一個不同的過程,需要儘可能快速,高效地獲取全球環形緩衝區的信息相同的dll。除了我只能獲得數組中第一個結構的數據外,其他所有工作都可以使用。在從C#調用dll之後,C#代碼不再知道arrayMD是一個結構數組,它在調試器中顯示爲一個簡單的結構。它可能是dll中的memcpy導致問題?我嘗試過[In,Out],IntPtr和Marchal.PtrToStructure組合的各種組合。我非常喜歡。任何幫助將不勝感激。
謝謝
這是我正在嘗試。 中的DLL方面:
struct stMD
{
float Price;
unsigned int PriceDir;
unsigned int PriceDirCnt;
};
// Global memory
#pragma data_seg (".IPC")
bool NewPoint = false; // Flag used to signal a new point.
static stMD aryMD [100] = {{0}};
#pragma data_seg()
void __stdcall RetrieveMD (stMD *LatestMD [])
{
memcpy(*LatestMD, aryMD, sizeof(aryMD));
}
在C#的一面:
[StructLayout(LayoutKind.Sequential)]
public struct stMD
{
public float Price;
public uint PriceDir;
public uint PriceDirCnt;
};
public static stMD[] arrayMD = new stMD[100];
[DllImport(@"Market.dll")]
public static extern void RetrieveMD(ref stMD[] arrayMD);
RetrieveMD(ref arrayMD);
可能相關:http://stackoverflow.com/questions/1197181/how-to-marshal-a-variable-sized-array-of-structs-c-sharp-and-c-interop-help –