近日给编写了一个串口与单片机的程序,却发现生成的release版本exe文件在没有安装vc的电脑上无法正常运行,点击没有任何反应。
然后,用vc自带的库连接检查工具depends.exe检查,没有任何进展。
在网上查阅有人认为是因为程序引用了ActiveX插件,要进行插件注册,于是在一台没有安装vc的电脑上的电脑->运行 中输入
RegSvr32 H:\MSCOMM32.OCX 进行串口插件的注册(mscomm32.ocx在安装vc的电脑的c:\windows\system32路径下能找到)
这样再打开程序,就可以正常运行,确认了是Active X 插件问题。
但是应用程序每运用到一个新的电脑上就要运行一便插件注册是很不方便的,于是,便想在程序里自动注册插件。在网上看到这样一段程序
LPCTSTR pszDllName="MSCOMM32.OCX";
//装载ActiveX控件
HINSTANCE hLib = LoadLibrary(pszDllName);
if (hLib < (HINSTANCE)HINSTANCE_ERROR)
{
MessageBox("不能载入Dll文件!","结果",MB_OK);
return 0;
}
//获取注册函数DllRegisterServer地址
FARPROC lpDllEntryPoint;
lpDllEntryPoint = GetProcAddress (hLib,_T("DllRegisterServer"));
//调用注册函数DllRegisterServer
if(lpDllEntryPoint!=NULL)
{
if(FAILED((*lpDllEntryPoint)()))
{
MessageBox("调用DllRegisterServer失败!","结果",MB_OK);
FreeLibrary(hLib);
return 0;
};
MessageBox("注册成功","结果",MB_OK);
}
else
MessageBox("调用DllRegisterServer失败!","结果",MB_OK);
以上程序无法进行动态的地址搜索功能,仅仅需要在程序开始处进行简单的修改,如下
CString strPath;
TCHAR szCurrentDir[MAX_PATH];
::GetCurrentDirectory(MAX_PATH, szCurrentDir);
strPath.Format(_T( "%s"), szCurrentDir);
CString strapp=strPath+"\\MSCOMM32.OCX";
MessageBox(strapp);
LPCTSTR pszDllName=strapp;
这样就可以随着应用程序目录的不同而动态获取系统的当前应用程序目录来进行mscomm32.ocx注册。其中两个\\代表去掉转义效果
然后需要考虑的问题是,这段程序放在哪儿?由于我采用的FMC编程,一开始我放在dlg初始化函数内,却发现没有效果。在定义dlg之前也没有效果。
这个问题一直没解决。。
下面考虑采用制作安装包的方法来解决这个问题。
应用程序在制作安装包的时候有一项是提前注册程序所需要的动态链接库以及插件。
采用vc自带的installshield for microsoft visual c++ 6.0制作应用程序安装包。
制作过程如下:
首先参考了installshield的help文档里面的getstarted生成了一个可以安装的安装包test。
然后在此基础上进行修改,步骤如下
用向导生成一个工程之后
在File Groups选项里面
Program DLLs Program Executable Files Shared DLLs里面分别在links中加入 Comm.exe 和 mscomm32.ocx
在components选项中
Program Files 和Shared DLLs中双击,在右侧栏中的Included File Groups中,加入相应的文件夹Program Executable Files Shared DLLs
在Scripts选项中
在setup.rul中的函数SetupFolders加入以下内容:
在begin上面加入 TRING svPath;
在TODO:下面加入
svPath= TARGETDIR ^ "Comm.exe";
LongPathToQuote ( svPath , TRUE );
AddFolderIcon ( "" , " Comm" , svPath , "" , "" , 0 , "" , REPLACE );
(注:以上均可以在help中的getstarted中找到方法)
之后再Media选项中,用Media Build Wizard建立镜像文件,选择3.5“diskette-1.44MBytes
然后就基本完成功能,可以在没有vc的环境下可以安装并运行
分享到:
相关推荐
VisualBasic6.0编写的一个铸造过程温度场模拟的程序VisualBasic6.0编写的一个铸造过程温度场模拟的程序VisualBasic6.0编写的一个铸造过程温度场模拟的程序VisualBasic6.0编写的一个铸造过程温度场模拟的程序Visual...
图书馆管理系统,用Visual C++ 6.0编写
用Visual Basic6.0编写客户服务器程序
本书是美国微软出版社授权的Microsoft Visual Studio 98 系列中文版图书之一,详细介绍了Visual C++ 6.0 的iostream流和运行库,并用典型实例说明其用法,是关于Visual C++ 6.0 应用开发的重要参考书。全书共分成两...
VisualC6.0编写、调试和运行C程序流程.doc
Visual C++ 6.0(完整绿色版)vc++6.0、Visual_assist_X_for_VC6.0破解版(今天突然发现系统自动修改需要50积分,下载的实在抱歉)
COOL系列之Visual Basic 6.0+Visual C++ 6.0
此累积更新汇总包含安全更新和许多其他控件,它们构成 Visual Basic 6.0 运行时扩展文件的更新版本。 如何获取此累积更新汇总,Visual Basic 6.0 服务包 6 运行时扩展文件 下列文件已可从 Microsoft 下载中心下载:...
很不错的vc6.0教程!有兴趣的人可以看看 会对你有帮助的!
面向对象程序设计教程与visual c++6.0教程 经典课件与试题 期末考试 本科 面向对象程序设计教程与visual c++6.0教程 经典课件与试题 期末考试 本科
Visual Basic 6.0 控件实用程序设计100例随书原代码
《visual Basic 6.0 win32 API程序设计》pdf格式,通过tif转化的,网络上独一无二的资源,免费奉献给大家。
Visual Basic6.0分布式应用程序开发 Visual Basic6.0分布式应用程序开发.
用VB编写一个透明窗体小程序Visual Basic6.0程序,VB6.0源代码
visual basic 6.0英文版安装程序
Visual C++ 6.0提供了对面向对象技术...Visual C++ 6.0还提供了功能强大的应用程序生成向导(AppWizard),能够帮助用户自动生成一个应用程序框架,用户只要在该框架的适当位置添加代码就可以得到一个满意的应用程序。
Service Pack 6 for Visual Basic 6.0, Visual C++ 6.0 with Visual Source Safe 6.0d 提供了对这些产品所做的最新更新。建议所有的 Visual Basic 6.0、Visual C++ 6.0 和 Visual Source Safe 6.0 用户都使用这个 ...
如何实现排序算法小程序Visual Basic6.0源程序,VB6.0源代码
用visual c++ 6.0编写的画图板,小程序 可以画点线面等,可以填充,换色,写字,改字体等
此压缩包内Visual C6.0(支持win7)安装包,点击即可进行安装,为绿色版,无需破解