插件工程模板的制作

由于即将开发的C++插件具有相同的标准规范,所以在正式开发插件前,先创建几种常用工程,配置好后就作为其他工程的模板。要创建新的插件工程时,直接复制模板工程的所有文件,替换文件名和内容,就得到新的工程。

VC++ 6.0 工程配置(不使用MFC的普通DLL插件工程)

  1. 对于不使用MFC的普通DLL插件工程,使用“Win32 Dynamic-Link Library”向导创建工程,输入模板工程名称(例如为Win32DllTempl),使用选项“An empty DLL project”或“A simple DLL project”完成创建;
  2. 接下来进行工程设置:
    选择“All Configurations”,进入“C/C++”页面
    1)设置警告级别为最高级“Level 4”;
    2)设置预处理定义列表,由于我们要使用UNICODE编码,故去掉 _MBCS,换成 UNICODE 和 _UNICODE,去掉不需要的 WIN32DLLTEMPL2_EXPORTS,最终得到的列表为 WIN32,_WINDOWS,_USRDLL,UNICODE,_UNICODE
    3)在“C++ Language”组中,选中“Enable Run-Time Type Information (RTTI)”选项,以便使插件接口动态转换能生效
    4)在预编译头文件中设置为“Use precompiled header file (.pch)”,对应头文件为 stdafx.h
    5)在“Code Generation”组中,对Debug和Release的“Use run-time library”分别设置为“Debug Multithreaded DLL”和“Debug Multithreaded”,即使用动态库版的C++运行时文件

    选择“All Configurations”,进入“Link”页面
    1)将LIB列表的默认值“kernel32.lib user32.lib advapi32.lib”等所有LIB去掉,以后需要哪个再加
    2)选中“Generate mapfile”选项,以便程序崩溃时可使用特殊技术定位到出错位置
  3. 设置工程的各种输出路径
    切换到Debug配置模式,在“General”页面,分别设置临时文件和输出文件的目录为
    ..\..\..\Obj\VC60\Debug\Win32DllTempl
    ..\..\..\Bin\VC60\Debug\Plugins

    在“Link”页面的“General”组,将输出文件由Win32DllTempl.dll改为Win32DllTempl.Plugin.dll(这样批量加载插件时就可以用 *.Plugin.dll 匹配,避免加载不是插件的DLL文件),输出文件的全名为 ..\..\..\Bin\VC60\Debug\Plugins/Win32DllTempl.Plugin.dll
    在“Customize”页面,设置符号调试库文件为:
    ..\..\..\Bin\VC60\Debug\Symbols/Win32DllTempl.Plugin.pdb
    在“Debug”页面,设置符号映射文件为
    ..\..\..\Bin\VC60\Debug\Symbols/Win32DllTempl.Plugin.map
    在“Project Options”编辑框中最末尾找到Win32DllTempl.Plugin.lib,由于我们不需要LIB文件,故把对应的文件全名改为
    ..\..\..\Obj\VC60\Debug\Lib/Win32DllTempl.Plugin.lib

    对于Release配置模式下的输出路径,将上述路径中的 Debug 改为 Release 即可。

VC++ 6.0 工程配置(使用MFC的插件工程)

最好使用MFC扩展DLL,这样就可以避免在多个DLL之间切换MFC环境的问题,具体是用“MFC AppWizard (dll)”向导创建工程,然后选择“MFC Extensin DLL (using shared MFC DLL)”。

在这里我们采用更简单的方法,在上面介绍的Win32DLL工程基础上,把得到的工程目录复制出来,替换工程名称。然后进行如下工程设置:

  1. 选择“All Configurations”,进入“General”页面,选择MFC类型为“Use MFC in a Shared DLL
  2. 预处理定义列表改为 WIN32,_WINDOWS,_AFXEXT,_UNICODE,_WINDLL,_AFXDLL

 

VC++ 2005/2008 工程设置

相对于VC++6.0,VC++ 2005/2008 的工程设置更简单,默认已经是UNICODE、Multithreaded DLL、开启了RTTI。

分别创建Win32DLL和MFC扩展DLL工程,选中这两个工程、选择所有配置模式,设置下面的各种路径:

临时文件目录:  ..\..\..\Obj\VC80\$(ConfigurationName)\$(ProjectName)
输出文件目录:  ..\..\..\Bin\VC80\$(ConfigurationName)
输出文件:        $(OutDir)\Plugins/$(ProjectName).Plugin.dll
符号调试文件:  $(OutDir)\Symbols/$(ProjectName).Plugin.pdb
符号映射文件:  $(OutDir)\Symbols/$(ProjectName).Plugin.map
生成LIB文件:   $(IntDir)/$(ProjectName).Plugin.lib

 

选择警告级别为 Level 4 (/W4),开启MAP文件输出选项

对于MFC工程,将Link页中的模块定义文件值“.\MFCExtTempl.def”去掉

posted @ 2010-08-30 18:38  张云贵  Views(1660)  Comments(1Edit  收藏  举报