我一直在研究如何成功將C++指針轉換成C#,但是我還沒有找到任何有用的東西。假設我有這個功能。將C++指針轉換爲C#成員#
typedef int STRUCT::*DEFINED;
protected static Method(STRUCT* sampleStruct, DEFINED pMember)
{
return (sampleStruct->*pMember);
}
我通過研究瞭解到 - > *是一個指向成員的指針。在這種情況下,我們在一個名爲STRUCT的結構中發送一個成員變量的指針。由於Method不確定哪個成員作爲參數發送,它通過指向成員的sampleStruct - > * pMember訪問它。
我認爲Reflection可以幫助將此代碼轉換爲C#或代理,但我真的不知道如何實現它,並且我還沒有在網上找到任何類似的示例。任何幫助將不勝感激。
感謝, YT
UPDATE
這是我如何在C#中實現這一點。
代替結構的,我創建一個枚舉,和類來表示C++結構,如下所示:
C++結構
public struct ServerStats
{
int serverStat1;
int serverStat2;
int serverStat3;
int serverStat4;
int serverStat5;
}
現在,在C#:
public enum ServerStatsEnum
{
serverStat1,
serverStat2,
serverStat3,
serverStat4,
serverStat5,
}
public class ServerStats
{
public int[] serverStatsArray;
public ServerStats()
{
int numElementsInEnum = Enum.GetNames(typeof(ServerStatsEnum)).Length;
serverStatsArray = new int[numElementsInEnum];
}
}
}
現在,我可以通過調用特定枚舉來訪問數組的元素,如下所示:
public static void Operation(ServerStats server1, ServerStats server2, ServerStatsEnum index)
{
Console.WriteLine("serverStatsArray[{0}] in server1 is {1}", index, server1.serverStatsArray[(int)index]);
Console.WriteLine("serverStatsArray[{0}] in server2 is {1}", index, server2.serverStatsArray[(int)index]);
}
這是更多的代碼,但它本身在C#中工作,它比其他解決方案更有效。
可以有所建樹幾分像這樣用[表達式樹(http://msdn.microsoft.com/en-us/library/bb397951.aspx),但它需要更多的代碼一起工作比C++兩輪牛車這去這裏。這可能是您最好以C#方式實現功能需求而不是移植最初的C++實現的一個領域。 –
我認爲你是對的。我正在審查功能要求,我會嘗試重新設計此解決方案。謝謝! – yeremy