欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
VS2010 簡(jiǎn)單ATL COM開(kāi)發(fā)
分類(lèi): C++ MFC VC 2013-05-19 22:59 3529人閱讀 評論(0) 收藏 舉報

1、打開(kāi)VS2010,新建ATL COM 項目,步驟:“文件” --》“新建” --》“項目”,選擇“Visual C++” --》“ATL 項目” ,填寫(xiě)“名稱(chēng)” FirstCOM --》“確定”。

2、ATL 項目向導,勾選 【支持COM+ 1.0】和【支持部件注冊器】,其他默認,點(diǎn)擊完成。

3、切換到類(lèi)視圖,右鍵單擊項目“FirstCOM”--》“添加”  --》“類(lèi)”。

 

4、選“ATL”  --》“ATL 簡(jiǎn)單對象” --》“添加”。

5、ATL  簡(jiǎn)單對象向導,“簡(jiǎn)稱(chēng)”中輸入類(lèi)名稱(chēng)FirstClass,其他輸入框會(huì )自動(dòng)填寫(xiě),最下面的“ProgID”沒(méi)有自動(dòng)填寫(xiě),最好自己寫(xiě)上一個(gè),如FirstCOM.math,否則后面無(wú)法正確調用組件,點(diǎn)擊“完成”。如果出現提示【是否覆蓋現有文件】,點(diǎn)擊【是】即可。

6、切換到類(lèi)視圖,選中剛才添加的接口IFirstClass,如下,然后右鍵單擊【添加】添加方法。

 

7、添加方法向導,在"方法名"  下輸入Add。增加兩個(gè)輸入參數:勾選【in】,選擇參數類(lèi)型LONG,輸入參數名para1,點(diǎn)擊“添加”。同樣操作增加參數para2。然后增加一個(gè)返回參數:先選擇參數類(lèi)型LONG*,再勾選【retval】,輸入參數名result,點(diǎn)擊添加。點(diǎn)擊“完成”即可,如果點(diǎn)擊下一步,不需要填寫(xiě)信息,點(diǎn)擊“完成”即可。

8、切換到解決方案資源管理器,展開(kāi)項目“源文件”, 雙擊 FirstCom.idl 打開(kāi)IDL定義文件,看到如下代碼,就是定義的COM方法了。

 

9、雙擊打開(kāi)FirstClass.cpp  編輯代碼:*result = para1 + para2

  1. #include "stdafx.h"  #include "FirstClass.h"    
  2. // CFirstClass    
  3. STDMETHODIMP CFirstClass::Add(LONG para1, LONG para2, LONG* result)    
  4. {    
  5.     // TODO: 在此添加實(shí)現代碼    
  6.      *result = para1 + para2;    
  7.    return S_OK;    
  8. }    


 

10、編譯運行,會(huì )生成dll文件,并自動(dòng)注冊到系統中。

 

問(wèn)題及解決方法

問(wèn)題1:我在Win64位系統中編譯的,出現錯誤:無(wú)法打開(kāi)預編譯頭文件:“Debug\FirstCOM.pch”:No such file or directory。

解決:右鍵點(diǎn)擊你創(chuàng )建的項目,選擇“屬性”,彈出“FirstCOM 屬性頁(yè)”,在左側展開(kāi)"配置屬性"--》展開(kāi)“C/C++”--》選中“預編譯頭”,在右邊的“預編譯頭”下拉菜單中選擇“不使用預編譯頭文件”,點(diǎn)擊“確定”按鈕退出。

原因分析:編譯器一般都是以文件為單位進(jìn)行編譯,如果修改了工程中的一個(gè)文件,那么將導致所有文件都要重新編譯,這樣的編譯將耗費很長(cháng)時(shí)間。為了提高編譯速度,將那些不常被修改,比較穩定,文件單獨包含到一個(gè)指定的頭文件中,然后生成一個(gè)預編譯頭文件 *.pch 。 VC++中默認的頭文件為 stdAfx.h, 但光有頭文件無(wú)法編譯,所以還要用到StdAfx.cpp,StdAfx.cpp里只包含一句有效代碼,這樣編譯時(shí),通過(guò)編譯 stdAfx.cpp就把大部分系統頭文件編譯進(jìn)來(lái), Debug目錄下便會(huì )產(chǎn)生一個(gè) 存儲了預編譯信息的 *.pch 文件。如果 *.pch文件損壞或者不存在,就會(huì )出現“問(wèn)題1”所示的無(wú)法打開(kāi)預編譯頭文件的錯。

如需深究,可參考博客:無(wú)法打開(kāi)包括文件:“Stdfx.h”

問(wèn)題2:解決了問(wèn)題1之后,又出現:errorMSB8011: 未能注冊輸出。請嘗試啟用“逐用戶(hù)重定向”,或者使用提升的權限從命令提示符處注冊該組件。

解決:項目-》屬性-》鏈接器-》逐用戶(hù)重定向--》設置為 true  (該方案網(wǎng)上常見(jiàn),但仍“未能”根本解決問(wèn)題)

分析: 由于win7權限問(wèn)題,所以出現問(wèn)題3,需要通過(guò)使用命令提示符來(lái)幫助注冊該組件。

問(wèn)題3:無(wú)法啟動(dòng)程序:“I:\VSProject\FirstCOM\Debug\FirstCOM.dll”。

解決:程序 --》 附件 --》 命令提示符,在”命令提示符“上點(diǎn)擊鼠標右鍵,選擇”以管理員身份運行“命令,這個(gè)時(shí)候將打開(kāi)Dos命令窗口。

接下來(lái)輸入:regsvr32   “I:\VS Project\FirstCOM\Debug\FirstCOM.dll”  (就是 regsvr32+.dll文件所在的完全路徑了,全路徑最好用引號括起來(lái))

按Enter 鍵,就能夠注冊成功了。

 

 

下面簡(jiǎn)單介紹如何調用COM組件。

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

(2)選“注冊表”,然后在“可用類(lèi)型庫”中定位到FirstCOMLib<1.0>,接下來(lái)會(huì )出來(lái)該庫中的所有接口,選擇你想生成的接口包裝類(lèi)IFirstClass后點(diǎn)擊“完成”,向導會(huì )自動(dòng)生成相應的.h文件,這樣你就可以在你的MFC工程中像使用普通類(lèi)那樣使用COM組件了.
(3)代碼編寫(xiě):

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

為對話(huà)框程序添加一個(gè)“測試”按鈕,添加按鈕單擊響應函數

 

  1. void CFirstCOMTestDlg::OnBnClickedButton1()    
  2. {    
  3.     // TODO: 在此添加控件通知處理程序代碼    
  4.     CoInitialize(NULL);    
  5.     CFirstClass m_mymath;    
  6.     if (!m_mymath.CreateDispatch(_T("FirstCOM.math.1")))//創(chuàng )建COM對象:這里的字符串一定要和注冊表中的ProgID一致!!!     
  7.     {    
  8.         MessageBox(_T("創(chuàng )建COM組件失?。赫垯z查ProgID是否正確,組件是否已經(jīng)注冊"));    
  9.         return;    
  10.     }    
  11.     else    
  12.     {    
  13.         long ret = m_mymath.Add(1,2);//調用COM接口     
  14.         CString strTemp;    
  15.         strTemp.Format(_T("%d"),ret);    
  16.         MessageBox(strTemp);    
  17.     }    
  18.     CoUninitialize();    
  19. }    


 

關(guān)于m_mymath.CreateDispatch(_T("FirstCOM.math.1")) 中字符串"FirstCOM.math.1",其實(shí)跟我們上一章中定義類(lèi)時(shí)ProgID有關(guān),如果忘記,可以在FirstClass.rgs文件里找,rgs是組件注冊的腳本文件,當你用 Regsvr32.exe注冊組件時(shí),組件內部便是調用了這個(gè)文件。rgs文件是以資源的形式存于DLL內的。

 

  1. KCR    
  2. {    
  3.     FirstCOM.math.1 = s 'FirstClass Class'    
  4.     {    
  5.         CLSID = s '{C56D80DE-DA4C-4731-81A6-48B8D0BDB2FD}'    
  6.     }    
  7.     FirstCOM.math = s 'FirstClass Class'    
  8.     {           
  9.         CurVer = s 'FirstCOM.math.1'    
  10.     }    


 

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

 

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

 

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

VS2010創(chuàng )建Win32控制臺應用程序,編寫(xiě)如下代碼:

 

 

  1. #include "stdafx.h"  
  2.   
  3. #include "atlcomcli.h"  
  4. #import "FirstCOM.dll" no_namespace  
  5.   
  6. int _tmain(int argc, _TCHAR* argv[])  
  7. {  
  8.     CoInitialize(NULL);  
  9.     CLSID clsid;  
  10.     CLSIDFromProgID(OLESTR("FirstCOM.math.1"),&clsid);  
  11.     CComPtr<IFirstClass> pFirstClass;//智能指針  
  12.     pFirstClass.CoCreateInstance(clsid);  
  13.     long ret = pFirstClass->Add(1,2);  
  14.     printf("%d\n",ret);  
  15.     pFirstClass.Release();  
  16.     CoUninitialize();  
  17.   
  18.     return 0;  
  19. }  
  1. #include "stdafx.h"  
  2.   
  3. #include "atlcomcli.h"  
  4. #import "FirstCOM.dll" no_namespace  
  5.   
  6. int _tmain(int argc, _TCHAR* argv[])  
  7. {  
  8.     CoInitialize(NULL);  
  9.     CLSID clsid;  
  10.     CLSIDFromProgID(OLESTR("FirstCOM.math.1"),&clsid);  
  11.     CComPtr<IFirstClass> pFirstClass;//智能指針  
  12.     pFirstClass.CoCreateInstance(clsid);  
  13.     long ret = pFirstClass->Add(1,2);  
  14.     printf("%d\n",ret);  
  15.     pFirstClass.Release();  
  16.     CoUninitialize();  
  17.   
  18.     return 0;  
  19. }  

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

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
VC程序在沒(méi)裝VC的機器中運行
用ATL開(kāi)發(fā)和部署ActiveX網(wǎng)頁(yè)控件
VC知識庫文章 - COM 組件設計與應用(五)——用 ATL 寫(xiě)第一個(gè)組件
MFC寫(xiě)COM組件(趁熱打鐵)
[筆記](méi)COM組件初識
帶你玩轉Visual Studio
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久