2010-03-31 2 views
1

의 파라미터로 인터페이스를 통과.는 I 네이티브 C++ DLL 및 두 개의 클래스가 ATL

InterfaceForClassA :

STDMETHODIMP CInterfaceForClassA::createClassAObject(void) 
{ 
     ClassA* Aobject = new ClassA(); 
     return S_OK; 
} 
STDMETHODIMP CInterfaceForClassA::setNumberInClassA(SHORT pVal) 
{  
    if(Aobject != NULL) 
     Aobject->setNumber(pVal); 
    return S_OK; 
} 
STDMETHODIMP CInterfaceForClassA::getNumberInClassA(SHORT* pVal) 
{  
     if(Aobject != NULL) 
      *pVal = Aobject->getNumber(); 
     return S_OK; 
} 

InterfaceForClassB :

IInterfaceForClassA* clsAInterface; 
STDMETHODIMP CInterfaceForClassB::setClassA(IInterfaceForClassA * val) 
{ 
    val->QueryInterface(IID_IInterfaceForClassA,(void**)clsAInterface; 
} 
STDMETHODIMP CInterfaceForClassB::getClassA(IInterfaceForClassA ** returnVal) 
{ 
    clsAInterface->QueryInterface(IID_IInterfaceForClassA,(void**)returnVal); 
} 

그리고 마지막으로 내가 C# 프로젝트에 ATL DLL을 포함 교류 # 프로젝트를 가지고 내가 ATL의 DLL 클래스 전화 :

 InterfaceForClassA clsa1 = new InterfaceForClassA(); 
     clsa1.createClassAObject(); 
     clsa1.setNumberInClassA(12); 

     InterfaceForClassB clsb = new InterfaceForClassB(); 
     clsb.setClassA(clsa1); 

     InterfaceForClassA clsa2 = new InterfaceForClassA(); 
     clsa2 = clsb.getClassA(); 

     Console.WriteLine("number: " + clsa2.getNumberInClassA()); 

및 C# 프로젝트를 실행할 때 위의 마지막 줄에 NullReferenceException 오류가 발생합니다. 나 좀 도와 줄 수있어?

답변

0

CInterfaceForClassB :: setClassA 구현이 올바르지 않습니다. 그래야합니다 (& 참고).

STDMETHODIMP CInterfaceForClassB::setClassA(IInterfaceForClassA * val) 
{ 
    val->QueryInterface(IID_IInterfaceForClassA,(void**)&clsAInterface); 
} 
관련 문제