• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            如何實現ocx控件的注冊

            Posted on 2009-09-03 22:05 S.l.e!ep.¢% 閱讀(1150) 評論(0)  編輯 收藏 引用 所屬分類: InstallShield
            為了擴展應用程序的功能,許多系統都使用了或多或少的activex控件,這些控件必須在系統中注冊后才能夠使用。所以分發powerbuilder應用程序時,必須將系統所使用到的這些activex控件一起分發到用戶所使用的計算機上,并且注冊它們,只有這樣系統才能繼續使用這些控件。

              本文將提供三種實現方案,供讀者選擇使用。


              方法一:在installshield中使用程序對控件進行注冊


              installshield提供了一套編程語言,語法規則與c++語言非常類似,使用很容易掌握。選中“scripts”頁,你就可以看到安裝程序實際執行的源代碼,通過添加代碼可以實現許多功能。要注冊控件必須先將控件所需文件拷貝到目標計算機上,所以必須選擇適當的位置添加注冊語句。setupregistry()函數就是在文件復制完畢后進行系統注冊的地方,所以在這里注冊控件最合適。

              function setupregistry()

               number nrootkey, nresult;

               string szprogram, szcmdline, szmsg;

               string szhkey;

               string szkey, szclass, sznumname, sznumvalue;

              begin

               nresult = createregistryset( ″″ );

              //注冊程序中用到的ocx控件

              szprogram = ″regsvr32 /s″;

              //假設我們將myocx.ocx文件復制到〈commonfiles〉\my shared下

              szcmdline = commonfiles^″\\my shared\\myocx.ocx″;

              //給執行文件路徑加上
            引號

              longpathtoquote (szcmdline, true);

              //執行生成的命令:例如regsvr32 /s ″c:\ program files\common files\my shared″。

               if (
            launchappandwait(szprogram, szcmdline, wait) 〈 0) then

               messagebox(″myanimatex 控件注冊失敗!″, severe);

              endif;

              return nresult;

              end;


              方法二:用注冊表的方法實現


              大家知道,一般安裝程序結束后,為了使系統可以運行,經常需要重新啟動計算機,這是由于安裝程序修改了注冊表或者一些系統文件(autoexec.bat等),必須重新啟動才能生效。注冊表中有這樣一個主鍵,專門用于存放一些只運行一次的程序,存放在這里的一些執行命令只是在windows系統啟動時運行一次,之后便被清空,所以取名為runonce:


              hkey—local—machine\software\microsoft\windows\currentversion\runonce,所以我們可以在installshield中的注冊表編輯器中在該主鍵下添加要執行的代碼,來完成控件的注冊,如上圖所示。

              注意,此方法必須保證安裝程序彈出“是否重新啟動計算機”的對話框,這樣才能保證用戶知道必須重啟后才能正常使用本系統。


              方法三:在pb程序中實現


              安裝程序只需負責將ocx拷貝到相應路徑下,pb程序必須可以得到這個路徑,建議拷貝到windows系統目錄或者與執行文件同目錄下。

              具體代碼:

              //首先定義api函數,如果ocx控件在與執行文件同目錄下,使用getcurrentdirectory函數;如果ocx控件放在系統目錄下,使用getsystemdirectory函數。

              function ulong getcurrentdirectory(ulong nbufferlength,ref string lpbuffer) library ″kernel32.dll″ alias for ″getcurrentdirectorya″

              function uint getsystemdirectory(ref string lpbuffer,uint usize) library ″kernel32.dll″ alias for ″getsystemdirectorya″

              //在pb應用(application)的open事件,假設ocx控件在windows系統目錄下。

              string ls—pathname,ls—command

              ulong ll—requiredbuffersize

              ls—pathname = space(255)

              ll—requiredbuffersize = getsystemdirectory(ls—pathname,255)

              

              if ll—requiredbuffersize=0 or ll—requiredbuffersize〉255 then

              //報錯信息

              else

              ls—command = ″regsvr32 /s ″ + ″~″″ + ls—pathname + ″\myocx.ocx″ + ″~″″

               run (ls—command)

              …

              end if

              regsvr32后面的“/s”執行參數是為了隱藏注冊成功消息框。


            久久强奷乱码老熟女| 免费精品久久天干天干| 亚洲国产精品久久| 亚洲国产成人精品女人久久久 | 久久精品国产亚洲AV蜜臀色欲| 久久天天婷婷五月俺也去| 久久综合久久自在自线精品自| 91精品观看91久久久久久| 久久人做人爽一区二区三区| 久久精品国内一区二区三区 | 国产精品美女久久久网AV| 亚洲人成精品久久久久| 久久亚洲电影| 国产精品久久久久久久午夜片 | 亚洲婷婷国产精品电影人久久| 久久精品国产99国产精品澳门| 2021国内精品久久久久久影院| 91久久精品无码一区二区毛片| 色综合久久久久无码专区 | 久久人人爽人人爽人人片AV不| 国产精品久久久久久久午夜片 | 国产精品成人久久久久三级午夜电影| 综合网日日天干夜夜久久| 久久久精品久久久久特色影视| 久久久91精品国产一区二区三区| 久久久久久久久久久久久久| 久久久无码精品亚洲日韩软件| 国产亚洲成人久久| 精品久久久久久国产免费了| 久久精品国产只有精品2020| 色综合久久中文色婷婷| 久久综合久久久| 国产精品成人无码久久久久久| 欧美一区二区精品久久| 婷婷久久综合九色综合98| 国产欧美久久久精品| 久久国产精品久久精品国产| 国内精品久久久久久久影视麻豆| 办公室久久精品| 香蕉久久夜色精品国产尤物| 亚洲精品乱码久久久久久蜜桃不卡 |