近日给编写了一个串口与单片机的程序,却发现生成的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);