共享DLL 和静态库DLL
来源:互联网 发布:全炫茂 知乎 编辑:程序博客网 时间:2024/06/05 18:55
一 编写DLL
第一种含有 DLLMAIN的 WIN32 DLL
#include "stdafx.h"BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;}
在要导出的类前面
AFX_EXT_CLASS
class AFX_EXT_CLASS GudianVClass{
另一种是MFC DLL 不含DLLMain
#include "stdafx.h"#include "MFCLibrary3.h"#ifdef _DEBUG#define new DEBUG_NEW#endif////TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,//则从此 DLL 导出的任何调入//MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到//该函数的最前面。////例如: ////extern "C" BOOL PASCAL EXPORT ExportedFunction()//{//AFX_MANAGE_STATE(AfxGetStaticModuleState());//// 此处为普通函数体//}////此宏先于任何 MFC 调用//出现在每个函数中十分重要。 这意味着//它必须作为函数中的第一个语句//出现,甚至先于所有对象变量声明,//这是因为它们的构造函数可能生成 MFC//DLL 调用。////有关其他详细信息,//请参阅 MFC 技术说明 33 和 58。//// CMFCLibrary3AppBEGIN_MESSAGE_MAP(CMFCLibrary3App, CWinApp)END_MESSAGE_MAP()// CMFCLibrary3App 构造CMFCLibrary3App::CMFCLibrary3App(){// TODO: 在此处添加构造代码,// 将所有重要的初始化放置在 InitInstance 中}// 唯一的一个 CMFCLibrary3App 对象CMFCLibrary3App theApp;// CMFCLibrary3App 初始化BOOL CMFCLibrary3App::InitInstance(){CWinApp::InitInstance();return TRUE;}
在要导出的类前面
#define DllExport __declspec( dllexport )
class DllExport Factory{public:static GudianVClass *GetGudianV();static void Destory();private:static CGudianView* pView;};
如果还不行的话,其它要导出的子类前添加
AFX_EXT_CLASS
class AFX_EXT_CLASS GudianVClass{
二 工程中使用DLL
1 工程编译只需LIB
因为编译EXE时,只需LIB将DLL函数地址写入即可
2 EXE运行时,只需DLL
因为LIB信息已经编译到EXE中了
3 debug/release 下编译时,使用不同版本的LIB和DLL
为方便 ,可以通过#ifdef _DEBUG 自动判断是debug版本还是release版本
#ifdef _DEBUG#define new DEBUG_NEW//第二步之二 加载LIB debug 和 release 不同模式的LIB#pragma comment( lib, "gudianDllHead\\gudian_debug.lib" ) //添加LIB库#else#pragma comment( lib, "gudianDllHead\\gudian_release.lib" )#endif
4 DLL放入子目录 通过延迟加载 隐形实现
在调用DLL前 ,通过SetDllDirectory设置DLL路径
Dlg::OnInitDialog(){CDialogEx::OnInitDialog();TCHAR szPath[255];GetModuleFileName(NULL, szPath, 255);*(_tcsrchr(szPath, _T('\\')) + 1) = 0;exeDirPath = szPath; // 含有\符CString dllPath=exeDirPath+L"mantangcai\\";SetDllDirectory(dllPath);
古典界面库网址
0 0
- 共享DLL 和静态库DLL
- 共享MFC DLL的规则DLL 、带静态链接MFC的规则DLL和MFC扩展DLL区别
- 共享MFC DLL的规则DLL 、带静态链接MFC的规则DLL和MFC扩展DLL区别
- 共享MFC DLL的规则DLL 、带静态链接MFC的规则DLL和MFC扩展DLL区别
- 关于DLL和EXE共享静态类对象
- 在共享DLL中使用MFC和在静态库中使用MFC有什么区别
- 在共享DLL中使用MFC 和在静态库中使用MFC
- 在共享DLL中使用MFC 和在静态库中使用MFC区别
- 在共享DLL中使用MFC 和在静态库中使用MFC
- 在共享DLL中使用MFC 和在静态库中使用MFC
- 在共享DLL中使用MFC 和在静态库中使用MFC的区别
- 在共享DLL中使用MFC 和在静态库中使用MFC区别
- 在共享DLL中使用MFC 和在静态库中使用MFC的区别
- 使用MFC作为共享的DLL和使用MFC作为静态链接库
- 在共享DLL中使用MFC 和在静态库中使用MFC区别 .
- MFC在共享DLL中使用和在静态库中使用的一些问题
- 在共享DLL中使用MFC 和在静态库中使用MFC的区别
- 在共享DLL中使用MFC 和在静态库中使用MFC的区别
- java clone和深度复制和浅复制的个人总结
- mysql操作脚本总结
- 关于socket网络编程,各种报错若干总结
- 为方便管理Maven中的模块,Maven提供了聚合与继承来管理
- 同步与Java内存模型
- 共享DLL 和静态库DLL
- Java中时间相关函数Date、Calendar、SimpleDateFormat
- 两数交换
- 基于3D卷积神经网络的人体行为理解(论文笔记)
- UVa live 3905 扫描线
- UVA1586 Molar Mess
- POJ-3077
- iOS项目之Swift新闻App(二)—网络数据请求和添加TableHeader
- ffmpeg解码H264缺少帧的解决办法