인터페이스 구현신뢰할 수 있는 DLL 인터페이스 구현 시나리오

2743 단어 dll
매일 붙이면 오늘의 내용 키워드는 인터페이스를 실현하는 것이다
매일 같은 이치
아름다움은 평범하다. 평범함은 너로 하여금 그녀의 존재를 느끼지 못하게 한다.아름다움은 평범하고 따스한 추억만 남을 정도로 평범하다.아름다우면서도 평온하다. 네가 애를 써야만 그녀의 잔잔한 물결을 일으킬 수 있을 정도로 평온하다.
// Service.h, DLL  (    、     )

////////////////////////////////////////////////////////////////////////////////

#ifdef SERVICE_EXPORTS

	#define SERVICE_API extern "C" __declspec(dllexport)

#else

	#define SERVICE_API

	//#define SERVICE_API extern "C" __declspec(dllimport)

#endif



interface IService

{

public:

	IService() {}

	virtual ~IService() {}



public:

	virtual void Start() = 0;

	virtual void Stop() = 0;

};



typedef IService *(*CreateInstance_t)();

typedef void (*DestroyInstance_t)(IService *pInst);



SERVICE_API IService *CreateInstance();

SERVICE_API void DestroyInstance(IService *pInst);



// Service.cpp, DLL  

////////////////////////////////////////////////////////////////////////////////

#include "Service.h"

class CService : public IService

{

public:

	CService();

	virtual ~CService();



public:

	virtual void Start();

	virtual void Stop();



private:

	//.....

};



CService::CService()

{

}



CService::~CService()

{

}



void CService::Start()

{

}



void CService::Stop()

{

}



IService *CreateInstance()

{

	return new CService();

}



void DestroyInstance(IService *pInst)

{

	if (!pInst) return;

	delete pInst;

}



SERVICE_API HRESULT WINAPI DllRegisterServer()

{

	//CMD> regsvr32.exe Service.dll           

	return S_OK;

}



SERVICE_API HRESULT WINAPI DllUnregisterServer()

{

	//CMD> regsvr32.exe /u Service.dll           

	return S_OK;

}



// Demo.cpp, DLL  

////////////////////////////////////////////////////////////////////////////////

#include "Service.h"

int WinMain(HINSTANCE hInstance,

	HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)

{

	HMODULE hDll = LoadLibraryA("Service.dll");

	if (hDll)

	{

		CreateInstance_t pfnCreateInstance =

			(CreateInstance_t)GetProcAddress(hDll, "CreateInstance");

		DestroyInstance_t pfnDestroyInstance =

			(DestroyInstance_t)GetProcAddress(hDll, "DestroyInstance");

		if (pfnCreateInstance && pfnDestroyInstance)

		{

			IService *pInst = pfnCreateInstance();



			if (pInst)

			{

				pInst->Start();

				pInst->Stop();

	

				pfnDestroyInstance(pInst);

			}

		}



		FreeLibrary(hDll);

	}



	return 0;

}

      
글은 마지막으로 프로그래머의 우스갯소리 어록인'노키아 투자 핸드폰 브라우저 UCWEB, 자금 불명 또는 지주'컵을 공유했다. 어렵게 키운 딸이 외국에 시집갔다.(아까운 건 네가 키운 거야? 중국 창업형 회사 창업 초기에 어느 은행이 국유은행에서 돈을 빌린 적이 있어?)
--------------------------------------오리지널 글 By 구현 및 인터페이스 -----------------------------------------

좋은 웹페이지 즐겨찾기