VC生成的Release在没有装VC6.0的机器下无法运行
VC生成的Release在没有装VC6.0的机器上无法运行
我做的是一个指纹识别的程序,里面还用到了Datagrid Control和 ADO Data Control 控件,用release编译后在安装了VC6.0的机器上正常运行,但在没有装VC6.0的机器上登录后就没有反应了,主窗口也打不开,什么就都没了,已经改成静态库连接了,不懂错在哪里,求大侠解疑啊
------解决方案--------------------
必须有Datagrid Control和 ADO Data Control 控件。
查查控件文件名(.dll .ocx )
------解决方案--------------------
把需要的控件打包到程序目录,程序启动时注册一下
我做的是一个指纹识别的程序,里面还用到了Datagrid Control和 ADO Data Control 控件,用release编译后在安装了VC6.0的机器上正常运行,但在没有装VC6.0的机器上登录后就没有反应了,主窗口也打不开,什么就都没了,已经改成静态库连接了,不懂错在哪里,求大侠解疑啊
------解决方案--------------------
必须有Datagrid Control和 ADO Data Control 控件。
查查控件文件名(.dll .ocx )
------解决方案--------------------
把需要的控件打包到程序目录,程序启动时注册一下
- C/C++ code
#include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") BOOL RegisterControl(LPCTSTR szFileName) { BOOL bRet = FALSE; TCHAR mess[256]; if(PathFileExists(szFileName)) { // Path to OLE Control in shortfileName HMODULE hModule = LoadLibrary(szFileName); if(hModule) { typedef HRESULT (STDAPICALLTYPE *CTLREGPROC)() ; // Requires olectl.h CTLREGPROC DLLRegisterServer = (CTLREGPROC)GetProcAddress(hModule,"DllRegisterServer" ) ; if(DLLRegisterServer) { if(DLLRegisterServer() == S_OK) { bRet = TRUE; } else { _stprintf_s(mess, _T("注册模块失败 %s"), szFileName); } } else { _stprintf_s(mess, _T("模块%s找不到指定注册入口"), szFileName); } FreeLibrary(hModule) ; } else { _stprintf_s(mess, _T("加载模块失败 %s"), szFileName); } } else { _stprintf_s(mess, _T("目标文件不存在%s"), szFileName); } if(!bRet) { MessageBox(NULL, mess, _T("Error"), MB_OK); } return bRet; }
------解决方案--------------------
肥就是程序文件很大的意思,生成的文件有多大?
------解决方案--------------------
把纯净机上没有的,而你的程序要用的控件都打包,启动时先注册一下,一个控件反复注册是没有问题的
------解决方案--------------------
看你Release后生成的程序依赖哪些跟vc相关的动态库,然后把这些动态库拷贝到没有安装vc的机器上即可。