实现接口一种可靠的 DLL 接口实现方案
2013-06-01 20:54
387 查看
每日一贴,今天的内容关键字为实现接口
每日一道理
美丽是平凡的,平凡得让你感觉不到她的存在;美丽是平淡的,平淡得只剩下温馨的回忆;美丽又是平静的,平静得只有你费尽心思才能激起她的涟漪。
文章结束给大家分享下程序员的一些笑话语录:
《诺基亚投资手机浏览器UCWEB,资金不详或控股》杯具了,好不容易养大的闺女嫁外国。(心疼是你养的吗?中国创业型公司创业初期哪个从国有银行贷到过钱?)
---------------------------------
原创文章 By
实现和接口
---------------------------------
每日一道理
美丽是平凡的,平凡得让你感觉不到她的存在;美丽是平淡的,平淡得只剩下温馨的回忆;美丽又是平静的,平静得只有你费尽心思才能激起她的涟漪。
// 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
实现和接口
---------------------------------
相关文章推荐
- 【科研论文】一种可靠的百兆以太网接口设计与实现--基于W5300
- 抛砖引玉-使用Acegi实现多种用户登录的一种方案
- 利用网卡地址和OpenUDID,实现获取设备唯一标识的一种方案
- 基于spark排序的一种更廉价的实现方案-附基于spark的性能测试
- MySql中文全文检索的一种实现方案
- 利用C#实现IDisposable接口是一种标准的途径
- PHP中插件机制的一种实现方案
- 一种基于UDP协议实现P2P智能穿越NAT的方案
- 利用VC和ADO接口编写一个dll模块实现对数据库数据的处理
- 一种基于主板BIOS的身份认证方案及实现
- 通用对象池ObjectPool的一种简易设计和实现方案
- JS中一种实现sleep函数的方案
- 一种类似Retrofit声明接口即可实现调用的WebApi客户端框架
- 基于spark排序的一种更廉价的实现方案-附基于spark的性能测试
- 一种夜间模式简单实现方案
- 用户界面的另外一种实现方案(2)现有的方案
- 安卓开发中,在低版本SDK使用高版本的API会报错。一般处理方法是换一种实现方法,或者在高版本SDK中使用高版本API,低版本SDK中使用效果可能会差点的折衷方案;后者可以用如下技巧来实现。
- 一种基于主板BIOS的身份认证方案及实现
- 一种高性能Hierarchical RBAC实现方案
- MVCC的一种实现方案