2015-09-23 38 views
1

我創建了一個C++/CLI DLL與下面的代碼:如何從C++中的C++/CLI dll訪問類型?

#pragma once 

#include "msg.h" //msg_t is a struct defined here 

using namespace System; 

namespace myCLRDll 
{ 

    typedef msg_t my_msg_t; 

    public ref class Class1 
    { 
    }; 
} 

建庫,將引用添加到我的C#應用​​程序和using myCLRDll;指令,但是當我去使用my_msg_t我得到一個未定義的標識符錯誤:

The type or namespace name 'my_msg_t' could not be found (are you missing a using directive or an assembly reference?)

爲什麼這種類型不可見?我需要做任何類型的「輸出」嗎?有沒有解決方法?

+2

類1將可見,但不是typedefs - 沒有機制可以將typedefs暴露給C#或任何其他.NET語言。也就是說,C#可以看到的唯一類型是C++/CLI託管類型。 –

+0

還有什麼方法可以通過C++/CLI向C#公開一個在本地C++中定義的結構或類嗎? – Jack

+0

@DaveDoknjas:我沒有看到你編輯。將其張貼爲答案,以便我可以標記爲已接受。謝謝 – Jack

回答

4

有兩個原因,C#沒有看到的typedef:

  1. C#只能看到你的C++/CLI庫管理的類型。沒有機制允許C#直接訪問非託管類型。

  2. C++/CLI庫中的'typedef'語句永遠不可用於其他.NET應用程序。它只在範圍內的C++/CLI庫中可用。