如何访问不同项目中的命名空间中的类?

时间:2011-09-12 09:05:03

标签: visual-c++ c++-cli

我在另一个项目下有三个项目,每个项目都包含一个名称空间。现在,我需要在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==========*/
    };
}

1 个答案:

答案 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是一些开头的链接。