인터페이스 구현신뢰할 수 있는 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 구현 및 인터페이스 -----------------------------------------
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LoadLibrary에서 126 오류가 발생하면 원인이되는 파일 이름을 찾는 방법Loadlibrary에서 DLL을 동적으로 로드할 때 로드 실패입니다. 실패한 파일 이름은 알려주지 않습니다. 로드하고자 하는 DLL 자체를 로드할 수 없다면 이야기는 간단하지만, 대상 DLL이 다른 DLL을 로드하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.