2011-09-12 34 views
0

我在另一個項目下有三個項目,每個項目都包含一個名稱空間。現在,我需要在Visual Studio 2008中調用一個名稱空間下的類。請不要問我爲主項目添加依賴關係,以便我可以訪問名稱空間和所有類,就像本地名稱空間由於某些限制,我無法做到這一點。告訴我類似派生類的概念,以便我可以訪問該類。如何訪問不同項目中的名稱空間中的類?

的LanguageTable類,我想打電話給如下:

#define GFX_LANGUAGE_MAX 20 

namespace gfx_viewer_win32 
{ 
    public ref class LanguageTable 
    { 
    public:  
    static Dictionary<String ^, List<String ^>^>^language_string_table; 
    static array<String ^> ^language_string_id; 

    LanguageTable(void) 
    { 
    } 
    ~LanguageTable(void) 
    { 
    }  
    }; 
} 

從那裏我想打電話給LanguageTable類的地方如下:

#pragma once 
using namespace gfx_coder_prj_parser; 

namespace Code_generator 
{ 
public ref class CCodeGenerator : CCodeParserMultiLayer 
    { 
     CCodeGenerator(void) 
     { 
     } 
     ~CCodeGenerator(void) 
     { 
     } 
     /*============I want to call LanguageTable class from here==========*/ 
    }; 
} 
+0

你想從另一個進程調用一個類(比如遠程調用)嗎?或者你想將項目鏈接在一起(如使用靜態/動態庫的應用程序)?請給予更多的信息。 –

回答

0

如果你不想添加LanguageTable類的程序集作爲參考,您可以通過System.Reflection達到它。首先加載該程序集,並創建LanguageTable一個實例,現在你可以通過搜索他們的名字一樣

Assembly^langTableAssembly = Assembly::Load("assembly_name" or binary_data_of_assembly ); 
object^langTable = langTableAssembly->CreateInstance("gfx_viewer_win32::LanguageTable", ...with_other_params); 
Type^langTableType = langTable->GetType(); 
MemberInfo^langStringID = langTableType.GetMember("language_string_id")[0]; 
MethodInfo^someMethod = langTableType.GetMethod("method_name"); 
someMethod->Invoke(langTable, ...other_params); 

它不是,雖然一個好方法調用它的方法,訪問屬性。它取決於名稱,名稱的任何更改(通過重構等),您必須修復上面的代碼。我不能說,這是最好的表現。

最後,一旦加載,程序執行過程中將不會卸載LanguageTable的程序集。如果你想卸載它,這是另一個故事「玩Appdomains

Herehere是一些開始的鏈接。

相關問題