使用VS2010创建MFC工程,并添加VTK引用

来源:互联网 发布:网络教育试点工作 编辑:程序博客网 时间:2024/06/11 02:47

很多步骤是从网上找的,再结合自己的实际过程,进行改写。

软件:VS2010

     CMake - 2.8.12.2

     VTK  - 6.1.0

1.安装vtk-win32.exe,安装到d:\vtk,目录尽量短,因为后面引用更方便。
2.将vtk源代码解压到d:\vtk\sourcecode
3.下载vtkdata.zip,这是vtk例子所需要的数据,解压到d:\vtk\vtkdata

4.安装cmake,运行后界面如下图所示:


5.安装Visual Studio 2010
6.运行cmake
7.在第一个文本框“where is the source code”中选择“D:/VTK/sourcecode”目录。
8.在第二个文本框“where to build the binaries”中选择输出目录,如:“d:/vtk/bin”
9.点击“configure”按钮,选择“visual studio 10”(vs2010),然后,cmake 就会对系统举行扫描了,停下来之后,我们就可以修改cmake选项了。扫描的历程中不能出现不论什么错误,不论什么错误都会导致后来编译VTK.dsw的错误,纵然能够扫描完成。有错误的话,就要把D:\vtk\bin\目录下除vtk.exe以外的所有文件和文件夹删除,重新configure。
10.查看列表中的选项,vtk_data_root,浏览到例子数据所在位置,如“d:\vtk\vtkdata”
11.build_examples:勾选上则编译例子,
12.build_testing: 勾选上则编译测试代码,也是例子
13.vtk_use_parallel:勾选
14.build_shared_libs: 设置为on,将会多生成 dll 文件,这些dll需要拷到windows/system目录下。要是用静态库编程,即off时,应用程序可以独立运行,尺寸也比较大,要是用动态库编程, 即on时,应用程序必须找到动态库才能运行,但尺寸可以做得比较小。
15.点击“Advanced”选项,找到vtk_use_guisupport: 很多人把vtk 安装好了,却无法运行vtk 中与mfc 混合编程的例子,提示错误都是缺少vtkmfc.lib,问题就出在这个选项,我们必须把它设置为 on,再configure 之后,会出现一个新的选项vtk_use_mfc,把它也设置为on
16.修改完cmake 选项以后,不停的按configure 按键,直到没有选项预示为红色
17.点击“Generate”按钮,在bin目录下生成vtk.sln等文件。
18.用Visual Studio 2010编译bin 目录下的VTK.sln文件,生成解决方案,时间较长。结果保存在. D:\vtk\bin\bin目录下。
注意:如果在编译的时候,出现一个error,是由于windows的IE版真相对vs2008过低,提示sdk中一个错误。找到vtkMFCwindow.cpp,将前面的宏定义修改为:
  #define WINVER 0x0501//你可改为更高版本
  #endif
#define _WIN32_WINNT 0x0500 // 这是我改的
#endif

20.将D:\vtk\bin\bin\debug这个文件夹选择此中所有的DLL 后缀的文件全部复制到c:\windows\system32 (调试时推荐),或者拷贝到VC项目可执行文件所在位置(安装到其他机器时拷贝)。


VC项目设置
1.创建MFC项目
2.然后在菜单栏中选择项目->属性,选择配备属性。
3.在"C/C++"->"常规"->"附加包含目录"中,添加目录
D:/VTK/bin;D:/VTK/bin/Common;D:/VTK/bin/Utilities;D:/VTK/bin/VolumeRendering;D:/VTK/bin/Rendering;D:/VTK/bin/Charts;D:/VTK/bin/GUISupport/MFC;D:/VTK/bin/Utilities/vtkalglib;D:/VTK/sourcecode/Infovis;D:/VTK/sourcecode/Geovis;D:/VTK/sourcecode/Views;D:/VTK/sourcecode/Parallel;D:/VTK/sourcecode/VolumeRendering;D:/VTK/sourcecode/Hybrid;D:/VTK/sourcecode/Widgets;D:/VTK/sourcecode/Rendering;D:/VTK/sourcecode/Charts;D:/VTK/sourcecode/Rendering/Testing/Cxx;D:/VTK/sourcecode/IO;D:/VTK/sourcecode/Imaging;D:/VTK/sourcecode/Graphics;D:/VTK/sourcecode/GenericFiltering;D:/VTK/sourcecode/Filtering;D:/VTK/sourcecode/Common;D:/VTK/sourcecode/Utilities;D:/VTK/sourcecode/Common/Testing/Cxx;D:/VTK/bin/Utilities/vtklibproj4;D:/VTK/sourcecode/Utilities/vtklibproj4;D:/VTK/bin/Utilities/DICOMParser;D:/VTK/sourcecode/Utilities/DICOMParser;D:/VTK/bin/Utilities/vtkfreetype/include;D:/VTK/sourcecode/Utilities/vtkfreetype/include;D:/VTK/bin/Utilities/MaterialLibrary;D:/VTK/sourcecode/Utilities/MaterialLibrary;D:/VTK/bin/Utilities/verdict;D:/VTK/sourcecode/Utilities/verdict;D:/VTK/bin/Utilities/vtkhdf5;D:/VTK/sourcecode/Utilities/vtkhdf5;D:/VTK/bin/Utilities/vtkhdf5/src;D:/VTK/sourcecode/Utilities/vtkhdf5/src;D:/VTK/bin/Utilities/Cosmo;D:/VTK/sourcecode/Utilities/Cosmo;D:/VTK/bin/Utilities/VPIC;D:/VTK/sourcecode/Utilities/VPIC;D:/VTK/sourcecode/Utilities/utf8/source;D:/VTK/sourcecode/GUISupport/MFC;D:/VTK/sourcecode/Utilities/vtkalglib;%(AdditionalIncludeDirectories)
方法一:可以通过CMake来生成项目
1  首先,建立一个MFC对话框程序,工程名Viewer,删除掉自动生成的.ncb和.sln文件(在下一步用CMake重新生成)
2  使用CMake进行配置工程的VTK环境,CMakeLists.txt文件如下,需要修改的地方:VTK路径; StdAfx,Viewer,ViewerDlg,Viewer.rc,res/Viewer.rc2 则是刚刚建立的工程ImageViewer所自动生成的源文件和资源文件
cmake_minimum_required(VERSION 2.6)
IF(NOT VTK_DIR)
  MESSAGE(FATAL_ERROR "Please set VTK_DIR.")
ENDIF(NOT VTK_DIR)
INCLUDE(${VTK_USE_FILE})
INCLUDE("D:/VTK-5.6/vtk-5.6.1/GUISupport/MFC/VTKMFCSettings.cmake")
IF(VTK_MFC_DELAYLOAD_VTK_DLLS)
  VTK_MFC_ADD_DELAYLOAD_FLAGS(CMAKE_EXE_LINKER_FLAGS
    vtkMFC.dll
    vtkRendering.dll
    vtkIO.dll
    vtkFiltering.dll
    vtkCommon.dll
    )
ENDIF(VTK_MFC_DELAYLOAD_VTK_DLLS)
SET( vtkDLG_SRCS
 StdAfx
 Viewer
 ViewerDlg
 Viewer.rc
 res/Viewer.rc2
)
  TARGET_LINK_LIBRARIES(vtkDLG ${VTK_MFC_EXTRA_LIBS})
ENDIF(VTK_MFC_EXTRA_LIBS)


  #ifndef WINVER
#ifndef _WIN32_WINNT
另外还有一个错误:vtkio.dll延迟加载失败,改成添加vtkio.lib文件 
19.生成成功后在VS2010下打开解决方案INSTALL.vcproj,再生成解决方案。上边要是已往的话执行INSTALL.vcproj会很顺遂,没有错误。


方法二:直接设置(推荐)
4.在“链接器”->"常规"->"附加库目录"中,选择“从父级或项目默认设置继承”
5.在"链接器"->"输入"->"附加依赖项"中,添加lib:kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib;DelayImp.lib;D:\VTK\bin\bin\Debug\vtkMFC.lib;D:\VTK\bin\bin\Debug\vtkRendering.lib;D:\VTK\bin\bin\Debug\vtkIO.lib;D:\VTK\bin\bin\Debug\vtkFiltering.lib;D:\VTK\bin\bin\Debug\vtkCommon.lib;DelayImp.lib;D:\VTK\bin\bin\Debug\vtkGraphics.lib;D:\VTK\bin\bin\Debug\vtkImaging.lib;D:\VTK\bin\bin\Debug\vtkFiltering.lib;D:\VTK\bin\bin\Debug\vtkCommon.lib;D:\VTK\bin\bin\Debug\vtksys.lib;ws2_32.lib
6.在"链接器"->"输入"->"延迟加载的DLL":vtkMFC.dll;vtkRendering.dll;vtkIO.dll;vtkFiltering.dll;vtkCommon.dll


FIND_PACKAGE(VTK)




ADD_EXECUTABLE(vtkDLG WIN32 ${vtkDLG_SRCS})
IF(VTK_MFC_EXTRA_LIBS)
TARGET_LINK_LIBRARIES(vtkDLG vtkMFC vtkRendering vtkIO vtkFiltering vtkCommon)

0 0
原创粉丝点击