最近想做个插件化的项目。
先开辟个地盘,记录一下。
看了相关文章:
http://topic.youkuaiyun.com/t/20050811/10/4202295.html
http://topic.youkuaiyun.com/t/20050511/10/3997353.html
2008-8-25
带有界面的插件化的方法:
第一种:动态库解决方法.
1:建立一个动态库。
2:建立一个固定的输出接口。
3:在DLL的输出接口中添加如下方法:
AfxSetResourceHandle(AfxGetInstanceHandle());
要在Create窗体之前添加。
4:相应的在调用的地方:
首先要添加:
//先保存本地资源.
HINSTANCE hOldInst;
hOldInst = ::AfxGetResourceHandle();
//===低级调用方法等代码.
CoInitialize(NULL);
HMODULE hDll = LoadLibraryA("E://CheckWord.dll");
LoadWindows GetName = (LoadWindows) GetProcAddress(hDll,"LoadWindows"); //函数指针已经声明
GetName();
CoUninitialize();
//===调用完毕
//回复本地资源
::AfxSetResourceHandle(hOldInst);
第二种: ATL建立的COM
1:建立一个ATL的COM组件。
2:COM的添加一个DLL的输出接口
3:在接口中加入如下的语句
AFX_MANAGE_STATE(AfxGetStaticModuleState());
要在每个函数的第一行代码处添加。
4:在掉用的地方直接写:
//===低级调用方法等代码.
CoInitialize(NULL);
HMODULE hDll = LoadLibraryA("E://CheckWord.dll");
LoadWindows GetName = (LoadWindows) GetProcAddress(hDll,"LoadWindows"); //函数指针已经声明
GetName();
CoUninitialize();
带有界面的插件化的方法:
第一种:动态库解决方法.
1:建立一个动态库。
2:建立一个固定的输出接口。
3:在DLL的输出接口中添加如下方法:
AfxSetResourceHandle(AfxGetInstanceHandle());
要在Create窗体之前添加。
4:相应的在调用的地方:
首先要添加:
//先保存本地资源.
HINSTANCE hOldInst;
hOldInst = ::AfxGetResourceHandle();
//===低级调用方法等代码.
CoInitialize(NULL);
HMODULE hDll = LoadLibraryA("E://CheckWord.dll");
LoadWindows GetName = (LoadWindows) GetProcAddress(hDll,"LoadWindows"); //函数指针已经声明
GetName();
CoUninitialize();
//===调用完毕
//回复本地资源
::AfxSetResourceHandle(hOldInst);
第二种: ATL建立的COM
1:建立一个ATL的COM组件。
2:COM的添加一个DLL的输出接口
3:在接口中加入如下的语句
AFX_MANAGE_STATE(AfxGetStaticModuleState());
要在每个函数的第一行代码处添加。
4:在掉用的地方直接写:
//===低级调用方法等代码.
CoInitialize(NULL);
HMODULE hDll = LoadLibraryA("E://CheckWord.dll");
LoadWindows GetName = (LoadWindows) GetProcAddress(hDll,"LoadWindows"); //函数指针已经声明
GetName();
CoUninitialize();
-----------------
在COM 中的STDMETHOD(OnDisconnection)函数声明是干什么的,也是接口?请同仁赐教。