2014-10-20 44 views
1

我知道已經有很多類似於這個的問題,但是我無法解決我的問題。用C++/CLI將C++結構包裝起來並使用C#

我寫了這個小代碼在Visual C++

#pragma once 

using namespace System; 

namespace MyWrapper { 
public ref class MySubClass{ 
     String^ username; 
     String^ password; 
    }; 

public enum class MyEnum{ 
     VALUE1 = 1, 
     VALUE2 = 2, 
     VALUE3 = 3, 
     VALUE4 = 4 
    }; 

public ref class MyClass{ 
     String^ string1; 
     String^ string2; 
     String^ string3; 
     long exampleNumber; 
     MyEnum choosenValue; 
     MySubClass credentials; 
     unsigned int otherNumber; 

    }; 
} 

MyClass是在外部DLL使用的結構和我寫了這個看着DLL的源代碼。它編譯,我可以從我的C#代碼看出來,這個C#代碼的工作:

MyClass instance = new MyClass(); 

但這不起作用:

instance.string1 = "test"; 

無法找到string1MyClassstring1只是一個例子,我看不到任何我需要的值。我做錯了什麼?

+2

string1是私有的,所以你不能從外部訪問它。 – JeffRSon 2014-10-20 15:54:09

+1

我想你可能想使用'property' - [如何:在C++/CLI中使用屬性](http://msdn.microsoft.com/en-us/library/2f1ec0b1.aspx)。你可以使用'get'和'set'來轉發你的C++'struct'(儘管你應該以不同的方式命名) – crashmstr 2014-10-20 15:54:32

+0

謝謝,我正在閱讀它!這是我第一次使用C++/CLI,並且我有很多東西要學習! – HypeZ 2014-10-20 15:57:39

回答

4

默認情況下,類的成員是私有的。你需要聲明它們是公開的。

public ref class MyClass 
{ 
public: 
    String^ string1; 
    String^ string2; 
    String^ string3; 
    long exampleNumber; 
    MyEnum choosenValue; 
    MySubClass credentials; 
    unsigned int otherNumber; 
}; 

如果你是包裝結構是純數據容器,那麼它可能是使用ref struct而非ref class更方便。默認情況下,ref struct的成員具有public可訪問性。


從評論上之後,你現在有問題credentials,這是你的代碼ref class。就我個人而言,我傾向於使用這兩種結構的ref struct。然後它可能是最簡單的使用屬性公開包含的結構:

public ref struct MySubClass 
{ 
    String^ username; 
}; 

public ref struct MyClass 
{ 
private: 
    MySubClass credentials; 
public: 
    property String^ username { 
     String^ get() 
     { 
      return credentials.username; 
     } 
     void set(String^ value) 
     { 
      credentials.username = value; 
     } 
    } 
}; 
+1

哇它的工作,我覺得現在非常愚蠢。謝謝,我會在5分鐘內將這個標記爲答案:) – HypeZ 2014-10-20 15:57:09

+0

只是另一件事:我不能從C#代碼設置instance.credentials,它說它是「只讀」!我剛剛聲明瞭一個MySubClass對象,並將其分配給instance.credentials – HypeZ 2014-10-20 16:02:44

+0

只是做了它(MyClass和MySubClass都是ref結構),但仍然是相同的錯誤:(當從C#讀取MyClass元數據看起來像MySubClass是唯一被標記爲只讀的 – HypeZ 2014-10-20 16:07:54