2012-06-07 2 views
0

나는 모든 멤버 함수를 가진 추상 클래스를 가진 dll을 순수 가상 함수로 가진다. 이러한 함수를 호출하는 응용 프로그램을 작성하려고합니다. 이러한 순수 가상 함수를 호출하기 위해 취해야 할 단계는 무엇입니까?exe ​​응용 프로그램에서 dll의 순수 가상 함수를 호출하는 방법은 무엇입니까?

이 추상 클래스와

헤더 파일은 단지 프로토 타입을 수 있습니다 : interface.h DLL에서

class MathFuncExport { 

public: 

    virtual int Add(int a, int b)=0; 

    MathFuncExport(){}; 
    virtual ~MathFuncExport(){}; 
}; 

헤더 파일 [이 내 보낸 함수이다] : MathFuncDll.h

#include "intf.h" 

class MyMathFuncs : public MathFuncExport 
{ 
public: 
    MyMathFuncs(){}; 
    virtual ~MyMathFuncs(){}; 
    virtual int Add(int a, int b); 
}; 

구현 : MyMathFunsDll.Cpp 파일

#include "MathFuncDll.h" 

int MyMathFuncs::Add(int a, int b) 
{ 
    return a + b; 
} 

이것은 dll을 만들었지 만 추상 클래스에서 함수를 호출 할 수 없거나 여기에 링크가 누락되었습니다. 이 문제를 해결할 때 도와주세요.

감사합니다.

+0

두 클래스 모두에 __declspec (dllexport) 특성을 적용하여 내보낼 수 있습니다. 구체적인 클래스를 숨기려면 클래스 팩토리가 필요합니다. –

답변

0

순수 가상을 호출 할 수 없습니다. 기능 구현을 강제하기 위해 구현됩니다. 기본 클래스가 DLL에 있으므로 다른 클래스를 파생시키는 데 클래스를 사용하려면 클래스를 내 보내야합니다.

클래스를 내보내는 가장 쉬운 방법은 암시 적 연결을 사용하는 것입니다. 이 방법을 사용하면 클래스 선언 및 가져 오기 라이브러리의 헤더가 필요합니다. 서로 다른 연결 고리의 오버록을 위해서 check this link.

약간의 데모 용으로 Win32 dll을 만드십시오. 필요한 경우 MFC 지원을 확인하고 심볼 내보내기 상자를 선택하십시오.

이렇게하면 샘플 클래스와 전역 변수 내보내기가 포함 된 dll이 만들어집니다. DLL (내보내기)과이 DLL (가져 오기)과의 실행 가능한 링크의 의미가 다른 특수 매크로가 만들어지는 헤더 파일을 확인하십시오.

암시 적 연결을 사용하는 방법을 이해하면 dll의 기본 클래스에서 실행 가능 모듈의 코드를 사용하는 것처럼 클래스를 파생시킬 수 있습니다.

+0

순수 가상 함수 또는 추상 클래스를 호출하는 방법에 대한 자세한 설명을 읽습니다. 이 링크 http://tweakbits.com/articles/dll/index.html을 확인하십시오. – user1139891

관련 문제