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