程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 一種可靠的 DLL 接口實現方案

一種可靠的 DLL 接口實現方案

編輯:C++入門知識

[cpp]
// 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; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved