2010-08-11 62 views
4

我有一個用C++編寫的服務器,它位於命名管道的末尾,這個服務器的東西。可以發送到服務器的命令在位於頭文件中的枚舉中定義。通過C++頭文件在C++和c#中使用枚舉

enum { 
    e_doThing1, 
    e_doThing2 
    ... 
    e_doLastThing 
}; 

期望枚舉的值被放入發送到服務器的消息的第一個字節,以便它知道該怎麼做。我現在正在編寫一個需要訪問服務的C#客戶端。

有沒有什麼辦法可以將頭部包含到C#代碼中,所以我不必在兩個位置維護相同的列表?

感謝, 帕特里克

+0

[共享C#,C++/CLI和C++中的枚舉]的可能重複(http://stackoverflow.com/questions/3240263/sharing-an-enum-from-cc-cli-and-c) – 2010-08-11 14:38:43

回答

3

如果要將枚舉放入命名空間併爲其命名,則可以直接將頭文件添加到C#項目中。

編輯與最終的解決方案:
這樣,各地將無法正常工作,但是反過來會 - 名頭一個的.cs,包括在C#項目,然後從#包括C++。

+0

好主意,你不需要命名空間,但你需要重命名文件爲* .cs,否則編譯器不會看到枚舉(枚舉已經有了一個名字)。恥辱它不可能是這麼簡單:( – Patrick 2010-08-11 12:29:28

+2

@帕特里克:沒有停止的C++編譯器#包括一個.cs文件。 – Puppy 2010-08-11 13:24:04

+0

@帕特里克:我,真的:P – Puppy 2010-08-11 14:33:24

1

你能生成文件與自動化過程的副本喜歡上了C#項目定義的預生成步驟?所有你需要做的就是創建一個文件的副本,在「enum」和「{」之間添加一個名字,我想。

編輯:根據C++服務器暴露的接口類型,.NET甚至可以自動生成接口文件。例如,如果這個枚舉是在一個COM接口或一個.NET遠程接口中定義的,我認爲會有自動的方式根據服務器的編譯代碼在客戶端生成枚舉。

1

您可以使用託管C++。將頭文件包含在託管的C++項目中,您可以從C#中使用它。在C#包裝 :

0

您可以使用宏定義這樣

public enum class eAlgId 
{ 
    ENUM_PARAMETERS 
}; 

上CPP:

enum ProcAlgID 
{ 
ENUM_PARAMETERS 
}; 

,並在已知這兩個.h文件中:

的#define ALG_ENUM_PARAMETERS \

et1 = 0,et2,et3,et4