2011-09-12 7 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은 몇 가지 링크로 시작합니다.

관련 문제