VC中,动态Release编译和静态Release编译除了编译后程序体积区别
外,还有没有其他重大影响。
比如:我这里有一个程序,以前的版本采用动态Release编译,客户
那边反应一直没有任何问题,现在程序内容没有进行任何修改,但采用
静态Release编译。但是发布后,客户那边反应程序开始运行弹出访问地址
越界错误造成程序崩溃。不知是何原因。很是头疼。
另外如果采用动态编译需要在程序安装目录中加入那些连接库才能防止
出现“无法找到动态连接库”错误(以前一些程序采用动态编译出现了此
问题而无法运行)。
那位高人指点迷津。
外,还有没有其他重大影响。
比如:我这里有一个程序,以前的版本采用动态Release编译,客户
那边反应一直没有任何问题,现在程序内容没有进行任何修改,但采用
静态Release编译。但是发布后,客户那边反应程序开始运行弹出访问地址
越界错误造成程序崩溃。不知是何原因。很是头疼。
另外如果采用动态编译需要在程序安装目录中加入那些连接库才能防止
出现“无法找到动态连接库”错误(以前一些程序采用动态编译出现了此
问题而无法运行)。
那位高人指点迷津。
解决方案 »
- listctrl遍历文件目录时,如何按照文件类型进行排序
- * 请教: 我这种情况有必要考虑 TCP打孔吗? **
- 原来这个我还不会:如何关闭一个单文档的框架窗口?
- 如何截取ie右键的事件
- VC下写一般的console程序,为何这么大?
- 我需要编写一个EXE的非窗体文件,执行它时它会自动启动NetMeeting,并且会给NetMeeting一个IP参数自动拨号,但一点这方面知识都不懂,望
- 100分请教一个关于运行的问题
- 谁知道怎么在程序里用需要认证的SMTP服务器发邮件?
- 'type cast' : cannot convert from 'class CEdit' to 'unsigned char'
- 菜鸟的问题,高手请进。
- opengl再MFC中怎么定坐标?为何我在View上画的图移动1.0的坐标单位改变很大啊?
- 求救,我现在知道如何选中麦克风录音,不知道怎么选中Stereo Mix(混音)或Mono Mix(单声道)录音,哪位看一下我的程序指导一下啊
静态就是把你要用的函数都一起做进exe了,所以只剩一个文件,尺寸也大多了。
至于访问地址越界,我倒是没见过,
要说因为文件太大,大到都无法调入内存,或者调入后都无法寻址了,
那也不至于。
动态Release没问题,就不用静态Release的
出现“找不到连接库”问题呢。
你只要把exe文件放进一个“干净”的电脑去运行,
跳出对话框说缺哪个dll,你就把那个复制过去,
然后又跳出对话框说缺另一个,你再复制过去,
一般来说MFC程序须要4个,
要是你用到更多函数,可能要得更多。
(程序中不断的调用和关闭其他可执行程序,这种调用方式很是SB,但是我不想对那些代码
进行大的修改,因为是别人写的,并且经过了好几拨):
int COnPracticeXPDlg::StartServiceApp(int iServiceType)
{
……………….
if(nResult == STATE_OK)
{
TerminateProcess(m_CurProcessInfo.hProcess,100);
CloseHandle(m_CurProcessInfo.hProcess );
CloseHandle(m_CurProcessInfo.hThread );
ZeroMemory( &m_CurStartUpInfo, sizeof(m_CurStartUpInfo) );
m_CurStartUpInfo.cb = sizeof(m_CurStartUpInfo);
ZeroMemory( &m_CurProcessInfo, sizeo(m_CurProcessInfo) );
if( !CreateProcess(pCurPath,NULL,NULL,NULL,FALSE,0,NULL, NULL,&m_CurStartUpInfo,&m_CurProcessInfo))
错误提示..........
……………….
}
说明:m_CurProcessInfo是PROCESS_INFORMATION类型,程序运行,
m_CurProcessInfo.m_hProcess未赋值,调试时候在CloseHandle(m_CurProcessInfo.hProcess )
时候发生错误,我怀疑在实践运行的Release中产生的地址越界可能就是在这里出的问题。
关键是我不想对程序框架做大的修改,怎么修改做好。
另外在Release版本中,TerminateProcess一个空值会否产生地址越界。也就是说Release
版本中,对一个未赋值的地址调用该函数有什么样地影响,是否一定要在该函数后调用CloseHandle呢?
我对该代码进行如下修改,大家提提有无问题:
BOOL bTerminateProc = TerminateProcess(m_CurProcessInfo.hProcess,100);
if(bTerminateProc)
{
CloseHandle(m_CurProcessInfo.hProcess );
CloseHandle(m_CurProcessInfo.hThread );
}