Ⅰ C++中如何調用com組件求大神指點
使用import引入的方式比較簡單,用智能指針來調用
#import"C:a.dll"no_namespace//不知道名字空間的話必須加上no_namespace
//在應用程序類的InitInstance函數添加:
CLSIDclsid;
CLSIDFromProgID(OLESTR("a.GetRes"),&clsid);
CComPtr<IGetRes>pGetRes;//智能指針
pGetRes.CoCreateInstance(clsid);
pGetRes->Hello();//調用介面
//在程序結束,例如Onclose處釋放
pGetRes.Release();
CoUninitialize();
Ⅱ vc 中使用com的方法
隨著Internet和Intranet應用的飛速發展,COM(Component Object Model,組件對象模型)以其巨大的潛力滲透到軟體學科的各個領域。在Windows操作平台下,眾多以COM形式提供的組件模塊,如DirectX多媒體軟體包、OLE DB/ADO資料庫組件系統等,極大地豐富了操作系統的功能。由於COM機制允許任意兩組件之間相互通信而不必關心是在何種計算機上的何種操作系統下運行,也不用關心組件是使用何種語言編制的,這使COM技術擁有了強大的生命力。尤其是Windows 2000同COM的下一代產品COM+的結合更加緊密,將使COM/COM+技術得到更廣泛的應用。本文介紹在VC++ 6.0下編寫COM客戶程序的三種方法,雖然每一種方法都可以達到使用代碼組件的目的,但詳細了解並掌握所有方法會為根據具體情況選擇適當方法提供更大的餘地。
為敘述清楚,本文所用的程序框架均為對話框模式的MFC EXE工程。在編程前,首先要確定待操作的代碼組件是否已經在系統中注冊。如果代碼組件沒有注冊,可以通過Windows\System目錄下的regsvr32. exe程序對其進行注冊。
COM庫函數
利用COM庫函數使用代碼組件的方法是本文介紹的三種方法中實現起來最麻煩和困難的方法。它要求開發人員必須具有對COM原理的深入理解。該方法實現步驟如下:
1. 首先添加COM初始和終止代碼。在應用程序類的初始化實例函數InitInstance()中添加如下代碼:
CoInitialize(NULL);
……
CoUnInitialize();
上述語句運行在MFC框架/非MFC框架中,但由於本文程序使用MFC框架,所以也可以利用AfxOleInit()函數對其進行初始化。
2. 然後用#include 語句包含對組件頭文件的引用並創建組件對象。在頭文件中包含了介面的C++定義以及說明介面ID IID和類ID CLSID的符號化常量。創建工作在初始化對話框函數中進行:
IAccount pAccount=NULL;
……
CoCreateInstance(CLSID_Account,
NULL,
CLSCTX_INPROC_SERVER,
IID_Iaccount,
reinterpret_cast (&pAccount));
3. 最後釋放組件對象。該工作應在程序退出之前完成,比如在消息WM_CLOSE的響應函數中進行:
if(pAccount!=NULL)
pAccount->Realease();
對該代碼組件中的其他功能函數的調用,可以通過組件對象的介面指針pAccount來進行:
……
BSTR bstrResult;
PAccount-> Post(100,bstrResult);
SysFreeString(bstrResult);
……
由於COM支持類在comdef. h中定義,所以還要包含對該頭文件的引用,才可以使程序正常運行。
類向導
通過類向導可以直接閱讀組件的類型庫,並產生包裝類型庫中每個介面的類,通過這些類的成員函數可以訪問組件介面的方法和屬性,與使用ActiveX控制項的方法有些類似。
首先添加對COM組件進行初始化的代碼。我們可以通過類向導的From a Type Library加入組件的.tlb類型庫文件,並從中引入其介面類。在本例中引入的類型庫文件中只包含一個從ColeDispatchDriver派生的組件包裝類IAccount。通過包裝類的成員,可以了解到組件介面能提供哪些服務,而且可以通過它們訪問組件介面的方法和屬性。
在初始化對話框函數里用COleDispatchDriver類的CreateDispatch()成員函數創建Account組件對象:
IAccount m_account;
……
m_account.CreateDispatch(「ATLSample.Account.1」));
其中ProgID值「ATLSample. Account. 1」可以通過Microsoft Visual Studio Tools 6.0里的OLE View工具查找到,其前提是該組件已被成功注冊過。
釋放Account組件對象也可以用COleDispatch-Driver類的ReleaseDispatch()函數來完成。
對於在COM庫函數方法中用過的Post方法可用下述方法調用:
CString str=m_account. Post(100);
可以看出此種方法實現了同樣的功能但實現起來要比上一種方法簡單些,而且對理解COM的要求也不高。
#import 指令
#import 指令方法非常簡便。對於類型庫文件採用該指令是非常合適的,因為不管是調試版本還是發行版本,對於類型庫文件而言,其路徑是固定的。#import指令在執行時將會從待引入的類型庫中提取出兩個文件:一個.tlh文件和一個.tli文件,後者僅僅是包裝類的函數實現,而前者則包含了許多有關的重要信息。智能介面指針也在其中定義:
_COM_SMARTPTR_TYPEDEF(IAccount,__uuidof(IAccount));
在實際編譯時,編譯器會將其展開成下述代碼,並通過_com_ptr_t模板類為介面IAccount定義一個智能指針IAccountPtr。之所以說其是智能指針,是由於它替代IAccount時,會自動處理CoCreate-Instance和所有的 IUnknow方法,使用起來非常方便:
typedef _com_ptr_t<_com_IIID< Iaccount,__uuidof(IAccount)>> IAccountPtr;
由於有了智能指針,我們就可以調用_com_ptr_t模板類的CreateInstance()函數來完成對介面指針的創建工作:
IAccountPtr m_account=NULL;
m_account.CreateInstance(__uuidof(Account));
由於在生成的.tlh文件中包含結構聲明和declspec(uuid(「」))聲明,所以在這里可以很方便地用__uuidof(Account)獲取介面的GUID。declspec(uuid(「」))聲明將GUID和類及每個介面聯系起來,允許開發人員以uuidof操作符來獲取類和介面的GUID。
需要特別指出的是: 為防止原有代碼和新引入的代碼之間發生名字沖突,編譯器會定義一個由類型庫名稱標識的命名空間,並在其中聲明的任何名稱內附加一個標識符。而為了避免指定命名空間標識,可以在#import 語句後加上using namespace,而且還可以用rename_namespace來改變命名空間。比如在本例中可以進行如下處理:
#import 「Account.tlb」 rename_namespace(「AccountDriver」)
using namespace AccountDriver;
這樣,在使用智能介面指針IAccountPtr時只需定義即可:
IAccountPtr m_account;
至於對代碼組件中的函數和屬性的調用則同前兩種方法一樣,也是通過m_account來完成訪問的。由於_com_ptr_t模板類和智能指針的引入,#import 指令方法是這三種方法中使用COM組件最簡單的一種。
Ⅲ asp.net2.0 添加了COM組件,但是無法使用是怎麼回事
組件是要注冊的,如注冊組件:將目錄內的aa.dll和cc.dll文件復制到C:\WINDOWS\system32目錄內!運行 regsvr32 組件名,記住.dll也要寫哦!組件注冊成功後進入控制面板-管理工具-組件服務:打開後找計算機-我的電腦-COM+ 應用程序點擊後右鍵屬性打開,分別設置 :安全設置基本不需要修改,標示:使用互動式用戶,基本也不用動!高級----〉設置 空閑時保持運行 !!
Ⅳ 為什麼小弟我在VS2010中添加COM組件時不會顯示在工具箱中
這個我一說你就理解了,其實很簡單:.NET FRAMEWORK組件,就是你.NET FRAMEWORK內置的類庫。【也就是C#的運行時庫】COM組件,是集成在Windows中的組件,和你的VS2008可以無縫集成,提高你的開發效率。比如,你不需要重新開發一個視頻播放器,可以直接拖拽一個COM組件中的播放器控制項,就能完成任務。WPF組件,是另外一個技術,也就是一種全新的設計理念,它和SL以前是一起開發的,後來分開,WPF做Windows界面設計,SL做跨平台的瀏覽器插件開發。-------------在開發中,最常用的,就是.NET FRAMEWORK組件內的,因為這是框架內置的,方便移植和維護。如果你用COM組件的,無法移植到Linux或者是UNIX以及MACOS中。
Ⅳ .net 播放器com添加組件
「工具箱」中單擊右鍵,選擇「選擇項」菜單,打開「選擇工具箱項」窗口,選擇「COM組件」標簽,在列表中找到並勾選「Windows
Media
Player」組件,單擊「確定」按鈕。將該組件添加到指定的工具箱選項卡中
然後在工具箱裡面找
Windows
Media
Player
控制項,拉到form裡面,拉出來的控制項就是AxWindowsMediaPlayer了,打開屬性窗口,在點擊拉過來的控制項,可以清楚的看到控制項名稱為AxWindowsMediaPlayer,這個就是你要找的控制項了
你確定你的是winform項目?
Ⅵ 請問怎樣在c#工具箱中添加AxWindowsPlayer控制項
在工具箱界面上單擊右鍵點選擇項,然後選擇COM組件,然後選中WINDOWMEDIAPLAY就OK了
Ⅶ C#添加了COM組件後的安裝包怎麼打啊
添加了EXE
以後,那些引用到的COM、DLL、OXC
組件均會以依賴項的形式帶到安裝包;
大多數COM組件是必須注冊以後才能使用的。
注冊方法:
在部署界面中的文件夾,添加EXE,COM組件會被附帶過來
選擇
COM組件,打開屬性欄(F4),那邊有一項
Regester(好象叫這個名字)
,選擇注冊為COM組件,就可以了!
Ⅷ 如何在C#中添加COM標簽
在工具箱上的權利,選擇「選項」;
彈出的「選擇工具箱項」對話框中,選擇[COM組件「選項卡上,檢查」視窗美的是播放器;
--- [OK
美Player,然後你可以看到在工具箱中。
美播放器的URL屬性設置控制到指定的多媒體文件和文件自動播放
Ⅸ 如何在C#中添加MSComm控制項
vs2005:
【工具箱】右鍵選擇【選擇項】
在彈出的對話框里點擊【com組件】按鈕,然後點擊【瀏覽】,找到MSComm控制項的dll,【確定】
Ⅹ com組件在asp.net里的使用方法
右鍵解決方案
添加引用
找到你要添加的組件,或者瀏覽你要添加的組件如.dll文件
添加即可,
如果你已經添加
在打開項目或網站的狀態下,可以在工具箱,裡面任一控制項上右擊,「選擇項」
打開的對話框中,選擇com組件選項卡,找到你已經添加的組件,添加後就可以在工具箱里直接引用了,(這里也可以直接點瀏覽找到組件的對應文件,如.dll文件)
以上是針對VS2008,其它版本也大同小異的喔,祝順利