近日給編寫了一個串口與單片機的程序,卻發現生成的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);
LongPathToQuote ( svPath , TRUE );
AddFolderIcon ( "" , " Comm" , svPath , "" , "" , 0 , "" , REPLACE );