国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
VB運(yùn)行時(shí)動(dòng)態(tài)注冊(cè)添加控件的方法


  1. //=========================================================================  
  2. // 動(dòng)態(tài)注冊(cè) ActiveX 控件 LPCTSTR = const char *  
  3. //=========================================================================  
  4. BOOL __stdcall pfyRegControl(LPCTSTR lpFileName)  
  5. {   LPCTSTR lpDllName = lpFileName;             //ActiveX控件的路徑及文件名  
  6.     HINSTANCE hLib = LoadLibrary(lpDllName);    //裝載ActiveX控件  
  7.     if (hLib < (HINSTANCE)HINSTANCE_ERROR)  
  8.     {   return FALSE;  
  9.     }  
  10.     FARPROC lpDllEntryPoint;  
  11.     lpDllEntryPoint = GetProcAddress(hLib, lpfnRegister);   //獲取注冊(cè)函數(shù)DllRegisterServer地址   
  12.     if(lpDllEntryPoint != NULL)                 //調(diào)用注冊(cè)函數(shù)DllRegisterServer   
  13.     {   if(FAILED((*lpDllEntryPoint)()))  
  14.         {   FreeLibrary(hLib);   
  15.             return FALSE;   
  16.         }  
  17.         return TRUE;  
  18.     }else  
  19.     return FALSE;   
  20. }   
  21.   
  22. //=========================================================================  
  23. // 動(dòng)態(tài)卸載 ActiveX 控件  
  24. //=========================================================================  
  25. BOOL __stdcall pfyUnRegControl(LPCTSTR lpFileName)   
  26. {   LPCTSTR lpDllName = lpFileName;             //ActiveX控件的路徑及文件名  
  27.     HINSTANCE hLib = LoadLibrary(lpDllName);    //裝載ActiveX控件  
  28.     if (hLib < (HINSTANCE)HINSTANCE_ERROR)  
  29.     {   return FALSE;  
  30.     }  
  31.     FARPROC lpDllEntryPoint;     
  32.     lpDllEntryPoint = GetProcAddress(hLib, lpfnUnReg);  //獲取注冊(cè)函數(shù)DllUnregisterServer地址  
  33.     if(lpDllEntryPoint != NULL)                 //調(diào)用注冊(cè)函數(shù)DllUnregisterServer  
  34.     {   if(FAILED((*lpDllEntryPoint)()))   
  35.         {   FreeLibrary(hLib);  
  36.             return FALSE;   
  37.         }  
  38.         return TRUE;   
  39.     }else  
  40.     return FALSE;   
  41. }  


對(duì)于VB只要用API聲明這兩個(gè)函數(shù)即可,按一樣的方法調(diào)用,當(dāng)然最簡單的是Shell "cmd /c regsvr32 /q abc.dll"之類的命令行

這些也是可以的,重復(fù)注冊(cè)不會(huì)造成破壞,只是感覺不爽,因此下面提供一種感覺更舒服的方法

  1. Public Sub Main()   '注意工程的入口函數(shù)必須是Sub Main,如果是某個(gè)窗體,這個(gè)窗體包含未注冊(cè)的控件則直接出錯(cuò)  
  2.     Dim strCom As String  
  3.     'frmMain.Controls.Add "MSComctlLib.TreeView", "tv"  '從報(bào)錯(cuò)得到progid=MSComctlLib.TreeCtrl.2  
  4.     If pfyCheckClass(StrConv("MSComctlLib.TreeCtrl.2", vbUnicode)) = 0 Then  
  5.         '類未注冊(cè)  
  6.         strCom = Environ("Windir") & "\mscomctl.ocx"  
  7.         If Dir(strCom) = "" Then strCom = Environ("Windir") & "\system32\mscomctl.ocx"  
  8.         '不再用Dir函數(shù)  
  9.         If FileLen(strCom) = 0 Then    '系統(tǒng)沒有該文件  
  10.             If Dir(App.Path & "\mscomctl.ocx") = "" Then  
  11.                 MsgBox "缺少組件!程序運(yùn)行需要如下微軟組件:" & vbCrLf & "mscomctl.ocx", vbCritical, "#Error"  
  12.                 End  
  13.             End If  
  14.         Else  
  15.             FileCopy App.Path & "\mscomctl.ocx", strCom  
  16.         End If  
  17.         If pfyRegControl("mscomctl.ocx") = 0 Then  
  18.             MsgBox "控件: mscomctl.ocx  注冊(cè)失??!請(qǐng)手動(dòng)注冊(cè)該組件!", vbExclamation, "#Error"  
  19.             Open App.Path & "\reg.bat" For Output As #1  
  20.                 Print #1, "rem ======================================"  
  21.                 Print #1, "rem 游俠組件注冊(cè)批處理,請(qǐng)雙擊運(yùn)行……"  
  22.                 Print #1, "rem 游俠技術(shù) http://blog.csdn.net/prsniper"  
  23.                 Print #1, "rem ======================================"  
  24.                 Print #1, "regsvr32 mscomctl.ocx"  
  25.                 Print #1, "pause"  
  26.             Close #1  
  27.             End  
  28.         End If  
  29.     End If  

上面的pfyCheckClass是我封裝的根據(jù)類名檢查某個(gè)控件是否注冊(cè)的函數(shù),其C/C++的源碼如下:

  1. //===============================================================  
  2. // ActiveX控件類注冊(cè)狀態(tài)判斷  
  3. //===============================================================  
  4. INSERT_API BOOL __stdcall pfyCheckClass(const USHORT *lpClass)  
  5. {   //S_OK 類標(biāo)志符檢索成功   CO_E_CLASSSTRING 類標(biāo)志符無效   REGDB_E_WRITEREGDB 寫入標(biāo)志符到注冊(cè)表出錯(cuò)  
  6.     HRESULT hr;  
  7.     CLSID clsId;  
  8.     hr = CLSIDFromProgID(lpClass, &clsId);  
  9.     if(hr == S_OK) return TRUE;  
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ActiveX 控件注冊(cè)的幾種方法
VC++注冊(cè),卸載OCX控件,以及判斷是否注冊(cè)
vc如何動(dòng)態(tài)注冊(cè)控件
◆VB6不能加載MSCOMCTL.OCX的解決辦法,好用
系統(tǒng)錯(cuò)誤&H80040111(-2147221231)。ClassFactory無法供應(yīng)請(qǐng)求的類別
網(wǎng)易博客歡迎您
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服