DLL 개발 및 호출 (2) - 내보내기 클래스를 만드는 Win32 DLL
2106 단어 Win32
DLL의 개발과 호출 (1) 은 함수 윈32DLL을 내보내는 생성 과정을 소개했는데, 이것도 가장 자주 사용하는 DLL이다.마찬가지로 DLL에 정의된 클래스는 응용 프로그램 프로세스에서도 액세스할 수 있습니다.Hello, World 화면을 표시하려면 다음과 같이 하십시오.화구화의 예를 들어 소개하다.
1. SayHello라는 Win32 DLL이라는 빈 항목을 만듭니다.2. [삽입|클래스]를 선택하여 팝업된 새 클래스 창에서 프로젝트에 대한 클래스 CsayHello를 만듭니다.클래스의 헤더 파일SayHello.h에서 키워드 사용declspec(dllexport)은 내보내기 클래스를 설명하고 관련 구성원 변수와 구성원 함수를 정의합니다.코드는 다음과 같습니다.
// SayHello.h
//
class _declspec(dllexport) CSayHello
{
public:
CSayHello();
virtual ~CSayHello();
void Say(char* szWords,int nLen);
float Sum();
void SetNum(float fNum1,float fNum2);
private:
float fNo1;
float fNo2;
};
클래스 구현 파일에서 다음과 같은 구성원 함수를 구현합니다.
//SayHello.cpp
//
#include "SayHello.h"
#include <string.h>
CSayHello::CSayHello()
{
fNo1=fNo2=0.0;
}
CSayHello::~CSayHello()
{
}
void CSayHello::Say(char* szWords,int nLen)
{
strcpy(szWords,"Hello,World!");
strcat(szWords,"\0");
}
float CSayHello::Sum()
{
return fNo1+fNo2;
}
void CSayHello::SetNum(float fNum1,float fNum2)
{
fNo1=fNum1;
fNo2=fNum2;
}
Debug 폴더에서 DLL 파일SayHello를 생성하는 프로젝트를 컴파일합니다.dll 및 가져오기 라이브러리 파일SayHello.lib.하면, 만약, 만약...def 파일에서 클래스를 내보내려면 클래스의 모든 함수나 변수를 내보내야 합니다.3. DLL을 호출한다.SayHello를 포함하는 DLL의 가져오기 라이브러리 파일을 창 클래스 헤더 파일에 로드합니다.h 헤더 파일 및 의 선언 CsayHello 클래스 객체입니다.코드는 다음과 같습니다.
#include "SayHello.h"
#pragma comment(lib,"SayHello.lib")
class CTestDlg : public CDialog
{
// Construction
public:
CTestDlg(CWnd* pParent = NULL); // standard constructor
CSayHello MySayHello;
이제 클래스 대상의 구성원 함수를 사용할 수 있습니다.DLL을 호출하는 내보내기 클래스와 DLL을 호출하는 내보내기 함수의 가장 큰 차이점은 프로그램에 내보내기 클래스를 포함해야 하는 헤더 파일입니다.따라서 SayHello.h、SayHello.dll 및 SayHello.lib을 호출자 프로젝트의 루트 디렉터리로 복사해야 제대로 실행할 수 있습니다.내보내기 클래스를 호출하는 DLL은 일반적으로 로드 시 링크됩니다.실행할 때 링크할 수도 있지만, 실행하기는 매우 번거롭다. DLL에서 모든 구성원 함수의 주소를 읽어야 하고, 보통 이 함수들의 이름은 미리 컴파일된 기호이며, DLL에서 함수를 다시 명명해야 할 수도 있다.