VS2010 簡單ATL COM開發(下)

前面一章介紹了怎麼創建ATL COM組件及註冊,下面簡單介紹如何調用COM組件。

1、在MFC中調用有一種很方便的方法,就是通過ClassWizard利用類型庫生成包裝類,不過有個前提就是com組件的接口必須是派生自IDispatch。
具體方法:
(1)VS2010新建一個MFC基於對話框程序,調出類嚮導,點擊“添加類”下拉菜單,選擇“類型庫中的MFC類”(From a type libarary)。

(2)選“註冊表”,然後在“可用類型庫”中定位到FirstCOMLib<1.0>,接下來會出來該庫中的所有接口,選擇你想生成的接口包裝類IFirstClass後點擊“完成”,嚮導會自動生成相應的.h文件,這樣你就可以在你的MFC工程中像使用普通類那樣使用COM組件了.
(3)代碼編寫:

首先引入頭文件   #include "CFirstClass.h"

爲對話框程序添加一個“測試”按鈕,添加按鈕單擊響應函數

void CFirstCOMTestDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知處理程序代碼
	CoInitialize(NULL);
	CFirstClass m_mymath;
	if (!m_mymath.CreateDispatch(_T("FirstCOM.math.1")))//創建COM對象:這裏的字符串一定要和註冊表中的ProgID一致!!! 
	{
		MessageBox(_T("創建COM組件失敗:請檢查ProgID是否正確,組件是否已經註冊"));
		return;
	}
	else
	{
		long ret = m_mymath.Add(1,2);//調用COM接口 
		CString strTemp;
		strTemp.Format(_T("%d"),ret);
		MessageBox(strTemp);
	}
	CoUninitialize();
}

關於m_mymath.CreateDispatch(_T("FirstCOM.math.1")) 中字符串"FirstCOM.math.1",其實跟我們上一章中定義類時ProgID有關,如果忘記,可以在FirstClass.rgs文件裏找,rgs是組件註冊的腳本文件,當你用 Regsvr32.exe註冊組件時,組件內部便是調用了這個文件。rgs文件是以資源的形式存於DLL內的。
HKCR
{
	FirstCOM.math.1 = s 'FirstClass Class'
	{
		CLSID = s '{C56D80DE-DA4C-4731-81A6-48B8D0BDB2FD}'
	}
	FirstCOM.math = s 'FirstClass Class'
	{		
		CurVer = s 'FirstCOM.math.1'
	}

其中 CurVer=s'FirstCOM.math.1' 中的 FirstCOM.math.1 就是我們需要的那個字符串。

(4)編譯運行,點擊測試按鈕,結果如下:



2、在SDK中調用最簡單最常用的一種,用#import導入類型庫,利用VC提供的智能指針包裝類

VS2010創建Win32控制檯應用程序,編寫如下代碼:

#include "stdafx.h"

#include "atlcomcli.h"
#import "FirstCOM.dll" no_namespace

int _tmain(int argc, _TCHAR* argv[])
{
	CoInitialize(NULL);
	CLSID clsid;
	CLSIDFromProgID(OLESTR("FirstCOM.math.1"),&clsid);
	CComPtr<IFirstClass> pFirstClass;//智能指針
	pFirstClass.CoCreateInstance(clsid);
	long ret = pFirstClass->Add(1,2);
	printf("%d\n",ret);
	pFirstClass.Release();
	CoUninitialize();

	return 0;
}
其中頭文件atlcomcli.h中定義了智能指針CComPtr。

運行結果:


還有一些調用COM組件的方法,參見VC調用COM組件

發佈了75 篇原創文章 · 獲贊 95 · 訪問量 54萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章