1. 程式人生 > >Active 控制元件 寫法

Active 控制元件 寫法

Application Setting選擇為:
Server-Type:Dynamic-Link Library (dll)
Additional-Options: Allow merging of proxy/stub code
這裡說一句,對於所有隻用於web的activex控制元件,不管有沒有介面,都應該用這兩個選項。

測試的時候,使用 IE 32位 成功率 比較高
regsvr32.exe 在win7 64位系統上 也分為 64位系統 和32位 系統

ie 32位:
工具 —-> Internet 選項 —->自定義級別—>
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

3 activex 控制元件的 64位和32位的問題

因為要支援64位的ie,所以現在編了兩個版本,一個32位,一個64位,可是這兩個dll的classid是一樣的,接下來要怎麼打包安裝他們呢,如何區分,讓給他們對應到相應的ie上呢?

應該需要編譯2個版本,一個 WIN32 ,一個 X64 ,原來我做 IME 輸入法的時候就這樣弄的。

嗯,說的沒錯,確實不用改,做兩個安裝包分別註冊一下就可以了,謝謝大家,結貼!

你改了就不對了,改了你的使用者也得兩個版本。

看了一些帖子 activeX 控制元件 剛開始 還是用 ie32位的測試比較好

學習參考資料

《COM實用入門教程第三講.ppt》
COM元件是跨應用的
vbscript,Javascript這些解釋性語言跟Word,Excel等提供的巨集語言如何認識開發者為COM元件提供的自定義介面呢?
ATL開發平臺都能自動實現IDispatch介面,COM的開發人員一般不需要手動實現該介面。

常用的COM資料型別有:

CHAR, CHAR*, BYTE, BYTE*, SHORT, SHORT*, USHORT, USHORT*, INT, INT*, UINT, UINT*, LONG, LONG*, ULONG, ULONG*, FLOAT, FLOAT*, DOUBLE, DOUBLE*, VARIANT_BOOL, VARIANT_BOOL*, BSTR, BSTR*, IUnknown*, IUnknown**, IDispatch*, IDispatch**, VARIANT, VARIANT*
CHAR: typedef char CHAR;
CHAR*, CHAR的指標
BYTE, typedef unsigned char BYTE;
BYTE*, BYTE的指標
SHORT, typedef short SHORT;
SHORT*, SHORT的指標
USHORT, typedef unsigned short USHORT;
USHORT*, USHORT的指標
INT, typedef int INT;
INT*, INT的指標
UINT, typedef unsigned int UINT;
UINT*, UINT的指標
LONG, typedef long LONG;
LONG*, LONG的指標
ULONG, typedef unsigned long ULONG;
ULONG*, ULONG的指標
FLOAT, typedef float FLOAT;
FLOAT*, FLOAT的指標
DOUBLE, typedef double DOUBLE;
DOUBLE*, DOUBLE的指標
VARIANT_BOOL, COM中的布林型別
typedef short VARIANT_BOOL;
/* 0 == FALSE, -1 == TRUE */
VARIANT_BOOL*, VARIANT_BOOL的指標
BSTR, COM中的字串型別
BSTR*, BSTR的指標
BSTR是指向的是寬字串的指標,是一個帶有字元計數值的字串,且這個計數值是儲存在字元陣列的開頭。
錯誤的賦值:
BSTR bstr = L”Hello UIPower”;
之所有錯誤,是因為這樣子的字串前面沒有計數值

BSTR SysAllocString(const OLECHAR *)是COM中申請BSTR字串的方法。
BSTR SysAllocStringLen(const OLECHAR *, UINT) 根據字串指標與字元個數構造BSTR字串。
UINT SysStringLen(BSTR) 獲取字串前面的計數值。
void SysFreeString(BSTR)釋放字串,當COM中的字串(BSTR)不再使用時,呼叫該函式。

    BSTR bstrA = SysAllocString(L"Hello BSTR");

    BSTR bstrB = SysAllocStringLen(bstrA, SysStringLen(bstrA));

    SysFreeString(bstrA);

    SysFreeString(bstrB);

VARIANT簡介

c++, vbscript, javascript……計算機語言多種多樣,COM產生的目的之一就是要跨語言,而VARIANT資料型別就具有了跨語言的特性,同時它可能儲存任何的資料型別,說誇張一點,它是“萬能資料型別”。
VARIANT*, VARIANT的指標
為實現“萬能型別”的功能,在c++中,VARIANT是一個結構體。該結構體內部又有聯合體(聯合了多種基本的資料型別),又有變數型別標誌VARTYPE vt。可見VARIANT被設定得多麼巧妙,合理。
VARIANT結構體的定義,太長了,我們在這邊不寫出來了,我們可以檢視Visual Studio 安裝目錄\VC\PlatformSDK\Include\oaidl.h檔案中關於VARIANT結構體的定義。
VariantInit()函式,用來初始化一個VARIANT 變數,把vt域設定成VT_EMPTY,表示空型別。vt域指示VARIANT結構體中的聯合體所儲存的資料型別。
VariantClear()函式,用來清除一個VARIANT變數。
VARIANT var;
VariantInit(&var);
//此時 var.vt == VT_EMPTY;
//…其它操作
VariantClear(&var);

用VARIANT儲存LONG型別。
VARIANT var;
VariantInit(&var);

var.vt = VT_I4;  //為什麼vt是VT_I4呢?
var.lVal = 100;
VariantClear(&var);

//檢視VARIANT結構體定義之前的註釋可以檢視到VT_I4與資料型別的對應關係,同時也可以檢視到VT_I2,VT_R4等與相應資料型別的對應關係。

用VARIANT儲存FLOAT型別。
VARIANT var;
VariantInit(&var);

var.vt = VT_R4;
var.fltVal = 1.23f;
VariantClear(&var);

用VARIANT儲存BSTR型別。
VARIANT var;
VariantInit(&var);

var.vt = VT_BSTR;
var.bstrVal = SysAllocString(L"Hello UIPower");
VariantClear(&var);

用VARIANT儲存BOOL型別。
VARIANT var;
VariantInit(&var);

var.vt = VT_BOOL;
var.boolVal = VARIANT_FALSE;
VariantClear(&var);

從VARIANT讀取相應型別的值

    if (var.vt == VT_I4)
    { 
        long lValue = var.lVal;
    }
    else if (var.vt == VT_R4)
    {
        float fValue = var.fltVal;
    }
    else if (var.vt == VT_BSTR)
    {
        BSTR bstrValue = var.bstrVal;
    }
    else if (var.vt == VT_BOOL)
    {
        VARIANT_BOOL varbValue = var.boolVal;
    }

COM資料型別的轉換

    //LONG轉換成FLOAT
        VARIANT var;
        VariantInit(&var);

        var.vt = VT_I4;
        var.lVal = 100;

        VariantChangeType(&var,&var,0, VT_R4);

        if (var.vt == VT_R4)
        {
            float fValue = var.fltVal;
        }

        VariantClear(&var);

22

        //LONG轉換成BSTR
        VARIANT var;
        VariantInit(&var);

        var.vt = VT_I4;
        var.lVal = 100;

        VariantChangeType(&var,&var,0, VT_BSTR);

        if (var.vt == VT_BSTR)
        {
            BSTR fValue = var.bstrVal;
        }

        VariantClear(&var);

VARIANT型別的派生類

         直接通過VARIANT API,比如VariantInit, VariantClear等來操作VARIANT比較麻煩,不方便。

    給VARIANT賦值也需要設定VARIANT.vt,再設定VARIANT.lVal或VARIANT.fltVal等,也比較麻煩,不方便。

    於是有人編寫了派生類(子類)來繼承VARIANT,然後在派生類中拓展VARIANT的使用方法,使VARIANT的使用更方便,更直接

目前VARIANT的派生類主要有_variant_t,CComVariant,COleVariant。
_variant_t是VC為支援COM型別而自帶的VARIANT派生類,在Visual Studio安裝目錄\VC\include\comutil.h中定義。
CComVariant是ATL庫為支援COM型別而自帶的VARIANT派生類,在Visual Studio 安裝目錄\VC\atlmfc\include\atlcomcli.h中定義。
COleVariant是MFC庫為支援COM型別而自帶的VARIANT派生類,在Visual Studio 安裝目錄\VC\atlmfc\include\afxdisp.h中定義。

它們的功能都類似。下面我們以CComVariant為例講解VARIANT型別的派生類。

CComVariant是VARIANT的派生類(子類),擁有VARIANT的所有用法,可以訪問VARIANT的成員。比如CComVariant.lVal或CComVariant.vt或CComVariant.fltVal等。可用CComVariant替代VARIANT。

CComVariant提供了多種方法(包括構造方法,賦值方法),方便了使用者的使用

構造時,會對自身呼叫VariantInit()函式。

析構時,會對自身呼叫VariantClear()函式。
所以使用CComVariant代替VARIANT,就不需要再使用VariantInit()函式與VariantClear()函式。

IE8 多個程序 也可以
選擇 變灰的 上面的 那個iexplore.exe

這裡寫圖片描述

相關推薦

Active 控制元件 寫法

Application Setting選擇為: Server-Type:Dynamic-Link Library (dll) Additional-Options: Allow merging of proxy/stub code 這裡說一句,對於所有

什麼是Active X控制元件

一個典型的空間包括設計時和執行時的使用者介面,唯一的IDispatch介面定義控制元件的方法和屬 性,唯一的IConnectionPoint介面用於控制元件可引發的事件。除此之外,一個控制元件還可以包含對 其整個生命週期的一執性支援,以及對剪貼,拖放等使用者介面特性的支援。從結構上看,一 個控制元件有大量必須

VC6.0利用Active X控制元件開發串列埠通訊軟體

 MSComm控制元件   Visual C++為我們提供了一種好用的ActiveX控制元件Microsoft Communications Control(即MSComm)來支援應用程式對串列埠的訪問,在應用程式中插入MSComm控制元件後就可以較為方便地實現對通過計算機

My97DatePicker(WdatePicker)日期控制元件用法

WdatePicker[html] view plain copy print? <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!-- 它的官網是http://www.my97.n

QT獲取控制元件的內容去傳參的小發現

1://處理文字框(內容是一個連續的字串)的方法(不能直接用文字框的內容去傳參,//否則會有意想不到的錯誤發生,需要利用先拷貝到陣列,然後利用陣列去傳參), #include <QStringList> #include <QString> int arg

qt 小控制元件之textEdit

獲取 textedit 的文字內容:QString text = ui->textEdit->toPlainText(); 設定textedit 的文字內容:ui->textEdit->append(“lkf”);此方法追加內容是換行追加 char b[10]

ext3.0 樹控制元件處理

前幾個月,一直在學習ext,並用它做了個專案,其中涉及到大量的樹列表的建立,動態修改。現在不忙了,總結出來: //建立節點 root為樹的根節點,node當前要加入的節點,nodeArray所有的樹節點(可以不包括根節點) checked表示樹節點是否加入check框,帶check框的節點都

高階控制元件ListVie的使用

activity_main.xml 檔案(配置檔案) <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http:

高階控制元件 自動提示文字框與下拉列表

一、 高階控制元件使用步驟 1 、獲取資料 2 、建立介面卡 3 、繫結介面卡 二、自動提示文字框 1 、AutoCompleteTextView(單一提示) android:completionThreshold=”1” 2 、MultiAutoCompleteTextV

控制元件TextView與EditText的簡單運用

文字框(TextView) 簡介 TextView直接繼承View,作用就是在介面上顯示文字(類似於Swing中的JLabel),同時它還是EditText、Button兩個UI元件類的父類。 另外Android關閉了它的文字編輯功能,如果想編輯內容,則可以使用EditText。

duilib CWebBrowser控制元件 cxx與js互動

轉自:http://blog.csdn.net/sunflover454/article/details/60873557(侵刪) C++和js相互呼叫是個有意思的事情。 一、js中呼叫C++函式。函式原型 [html]  view plain

使WPF程式應用預置的控制元件風格, 如Aero, Luna, Royale, Classic等

原文: 使WPF程式應用預置的控制元件風格, 如Aero, Luna, Royale, Classic等      WPF預設有Aero, Classic, Luna, Royale主題, WPF程式會根據Windows主題決定WPF程式所使用的控制元件

C#Form.SplitContainer中清除控制元件textbox值(窗體.容器.控制元件

文章目錄 問題背景 問題程式碼 問題解決 正確清除程式碼 問題延申 問題背景 早上在完善不確定度計算器時,想要清空實驗資料輸入時所有textbox控制元件值。 問題程式碼

安卓常用控制元件RecyclerView+HorizontalScrollView實現item側滑效果 安卓常用控制元件RecyclerView+HorizontalScrollView實現item側滑效果

原 安卓常用控制元件RecyclerView+HorizontalScrollView實現item側滑效果 2017年10月28日 12:23:14 低-調

10 地圖新增圖例控制元件

在上述文章中,我們已經為地圖添加了比例尺、鷹眼等控制元件,但還有一個控制元件也是地圖所必需的,那就是圖例控制元件,它顯示當前地圖上新增的所有圖層的圖例(預設效果,可以手動控制顯示單個圖層的圖例),效果如下所示: 具體實現如下: 1 圖例控制元件的實現主要是依據“esri/dijit

12 地圖新增測量控制元件

地圖的測量控制元件主要實現在web端的地圖測量功能,包括距離量算、面積量算和經緯度獲取。我們可以用官方提供的預設樣式來新增,也可以自定義樣式來新增地圖量算控制元件。下面來看一下顯示效果: 面積量算: 距離量算: 經緯度獲取: 具體的操作如下: 1 測量控制元

webbrowser 控制元件實現WinForm與WebForm互動

 WebBrowser 控制元件可以讓你裝載Windows Form 應用程式中的 Web 網頁和其它採用瀏覽器的檔案。可以使用webbrowser 控制元件將現有的web框架控制項加入至 Windows Form 客戶端應用程式。還是直接看程式碼吧。 WebBrowser 控制項

[Swift]ViewController中xib控制元件為空

在ViewController的xib中定義了一些控制元件,然後在使用的時候會因為這個控制元件為空而崩潰,報錯為: Swift Error fatal error: unexpectedly found nil while unwrapping an Optional value

EXT各個控制元件隱藏不可編輯等操作以及一些控制元件操作

//FieldSet2 $get(‘FieldSet’).hide(); //TextField設定 不可編輯 Ext.getCmp(“TextField”).readOnly = true; //帶文字框 $get(‘TextField’).setDisabled(true);//不帶

常用控制元件——圖片框與進度條

訊息提示框 1. Toast(吐絲框) 1.1 Toast是Android中的一種簡易的訊息提示框 1.2 使用這個類的最簡單的方法是呼叫靜態方法構造您所需要的一切,並返回一個新的Toast物件。 Toast toast=Toast.makeText(getApplicationCo