情况说明:
光谱显示工程(64 Bit Window10+VS2015+TeeChart8),在原来的机子上能运行,拷贝之后运行不了。
问题所在:
导入TeeChart控件时,用了绝对路径,导致无法打开文件;另外,TeeChart8.ocx在使用时必须先注册,否则无效。而且只能在x86下运行,x64会意外中断。
解决方法:
把导入路径改成相对路径(已经修改完毕),然后注册TeeChart8.ocx,在x86下运行即可。
具体调试记录:
1. C1083 无法打开类型库文件:
“F:\\Hyperspectral\\USGS-SPLib06\\SP_Demo\\teechart\\TeeChart8.ocx”:No such file or directory SP_Demo e:\project\sp_demo\sp_demo\ctitles.h 3
【把路径(teechart文件夹)修改成相对路径,7个C**.h都要修改
#import "..\\teechart5+8\\TeeChart8.ocx" no_namespace】
2.触发中断
SP_Demo.exe!CSP_DemoApp::InitInstance() 行 75 C++
注册TeeChart8.ocx以后,换成32位运行即可。
先注册TeeChart8.ocx,再运行(x86)。
注册:如果是 64位机子,拷贝teechart文件夹中的TeeChart8.ocx到C:\Windows\SysWOW64中,然后以管理员身份运行cmd.exe,执行命令cd C:\Windows\SysWOW64 ,进入到这个目录,再执行regsvr32 TeeChart8.ocx(如果是32位机子,则拷贝到C:\Windows\System32,其他步骤类似)。
注册成功后, Release或Debug(x86),运行即可。
其他:(在网上查找的相关错误解决方法笔记)
1. 关于TeeChart控件
安装完了无非就用到个.ocx文件,还有就是自带很多MFC的例子,下载了个TeeChart 的ocx文件,注册就好了。
若没有注册,则会显示:找不到#import**** TeeChart5.tlh
2. 关于中断在入口函数int nResponse =dlg.DoModal();处
int nResponse = dlg.DoModal();
//有模式地显示这个对话框,直到对话框关闭。保存一个模式对话框的返回结果,如果是按ok退出的,则nResponse=IDOK,否则nResponse = IDCANCEL,这样就可以做不同的处理。
如果中断在此,可能的问题:
——》DoModal调用没有成功
——》没有为指针申请空间之类的问题
※看看InitDialog中是否有问题
※看看Dialog中是否有在运行机器上未注册的控件.
中断以后,用F11跟踪进去,以下是整理的网友的方法
断在某处
处理方法
备注
"CreateDlgIndirect"这个函数里面
【在vc140.pdb,MFCApplication1.pch文件中】
在代码中添加了ActiveX控件,确没有用到。所有果断的删去了
在dll中生成对话框,如果包括了ActiveX控件,在创建对话框失败时,需要考虑在CApp::InitInstance()中添加OleInitialize(NULL) & AfxEnableControlContainer()
if (CreateDlgIndirect(lpDialogTemplate, CWnd::FromHandle(hWndParent), hInst))
dialog resource找不到,或者,parent窗口没传对或不存在。
ASSERT(FALSE);
把资源中的某个控件删除了,
并且DoDataExchange还在使用这个控件的ID
查找对应的ID的DEFINE,看看是否在DoDataExchange使用。
并且此ID无相关的在.rc文件中的定义。
3. 删除了控件,但还在用ID
若是修改了控件,保存工程之后,再打开删除该控件,则resourse.h中还有该控件的信息,rc文件中没有。删除控件,需:1.删除控件方法的声明和实现(.h和.cpp中找到映射的函数名删除即可)2.如果控件有关联变量,要在相应的头文件中删除。3.在资源文件中删除相应的控件资源ID(如 :#define IDC_BUTTON1 100 )
4. 关于新建MFC工程调用TeeChar
http://www.cnblogs.com/qiengo/p/4238567.html
※类中的头文件第一句:#import "D:\\ProgramFiles\\TeeChart Pro v5 ActiveXControl\\TeeChart5.ocx",(自动加入import+ TeeChart5的安装路径)
都提示"Error:无法打开源文件E:\project\MFCApplication1\MFCApplication1\Debug\Teechart5.tlh"
注意:#include "CSeries.h"要放在MFCApplication1Dlg.cpp文件#include"stdafx.h"等后面
※CTChart.h中 class CTChart : publicCOleDispatchDriver
ColeDispatchDriver不是类名或结构名
没有解决
※运行成功后出现一样的中断——intnResponse = dlg.DoModal();处
————》换成release X86即可。