Developing COM Components using VC-ATL(3-4) (轉)
:namespace prefix = o ns = "urn:schemas--com::office" />
建立後的IDL
ValidateCreditCardServer.idl清單
import "oaidl.idl";
import "ocidl.idl";
[
,
uuid(B1D1C73C-E340-4FDC-8734-92ECEC64DC4E),
dual,
helpstring("IValidateCard Interface"),
pointer_default(unique)
]
interface IValidateCard : IDispatch
{
};
[
uuid(B3404054-C33E-4931-B737-5783CEEFEC),
version(1.0),
helpstring("ValidateCreditCardServer 1.0 Type Library")
]
library VALIDATECREDITCARDSERVERLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(C79635D2-7B86-4B20-A83C-0565DCA54C3C),
helpstring("ValidateCard Class")
]
coclass ValidateCard
{
[default] interface IValidateCard;
};
};
文中黑體部分表示在中加入元件類後形成的程式碼,在框架中加入元件類之前,只有型別庫部分,而在建立元件類後我們可以看到上面部分是一個元件類的介面,下面部分是一個元件類,其巢狀在型別庫中。呵呵,三部分全到齊了。
另外,也說明一下VALIDATECREDITCARDSERVERLib這幾個字母的用處,大家想到沒有呀?呵呵,它就是在客戶端中使用名字空間時使用的呀。詳細請見Visual C++Visual C++元件。
3. 增加元件的功能。
要實現這一點,你必須增加檢驗信用卡有效性的。如何增加函式到你的元件,請按以下步驟操作:
在 VC++工作平臺的左邊的 Workspace 的 ClassView 卡片中找到介面 IValidateCard項,按右鍵,在出現的快捷選單中選擇 Add Method …,出現 Add Method to Interface 對話方塊,在對話方塊中輸入要增加的函式的函式名、引數和返回值型別。在這裡,我們在Method Name中輸入
ValidateCreditCard
在Parameters中輸入
[in] BSTR bstrCCNo,[in]BSTR bstrCCType,[out,retval]long *val
然後,按確認按鈕退出。
類似地輸入以下三個函式
函式功能
Method Name
Parameters
檢驗信用卡的號碼是否合法
LuhnCheck
[in] BSTR bstrCCNo,[in]BSTR bstrCCType
檢驗信用卡的長度是否合法
LengthCheck
[in] BSTR bstrCCNo,[in]BSTR bstrCCType
檢驗信用卡的型別是否合法
PrefixCheck
[in] BSTR bstrCCNo,[in]BSTR bstrCCType
現在你可以看見為你的元件建立的介面定義語言檔案的變化,你將在IDL檔案ValidateCreditCardServer.idl中看到上面增加的所有函式的入口。
ValidateCreditCardServer.idl清單
// ValidateCreditCardServer.idl : IDL for ValidateCreditCardServer.dll
//
// This file will be processed by the MIDL tool to
// produce the type library (ValidateCreditCardServer.tlb) and marshalling code.
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(B1D1C73C-E340-4FDC-8734-92ECEC64DC4E),
dual,
helpstring("IValidateCard Interface"),
pointer_default(unique)
]
interface IValidateCard : IDispatch
{
[id(1), helpstring("method ValidateCreditCard")] HRESULT ValidateCreditCard([in] BSTR bstrCCNo,[in]BSTR bstrCCType,[out,retval]long *val );
[id(2), helpstring("method LuhnCheck")] HRESULT LuhnCheck([in] BSTR bstrCCNo,[in]BSTR bstrCCType);
[id(3), helpstring("method LengthCheck")] HRESULT LengthCheck([in] BSTR bstrCCNo,[in]BSTR bstrCCType);
[id(4), helpstring("method PrefixCheck")] HRESULT PrefixCheck([in] BSTR bstrCCNo,[in]BSTR bstrCCType);
};
...
另外它也在元件類的實現類的標頭檔案ValidateCard.h和實現檔案ValidateCard.cpp中分別加入函式的入口。
// ValidateCard.h : Declaration of the CValidateCard
#ifndef __VALIDATECARD_H_
#define __VALIDATECARD_H_
#include "resource.h" // main symbols
/////////////////////////////////////////////////////////////////////////////
// CValidateCard
class ATL_NO_VTABLE CValidateCard :
public CComObjectEx
public CComCoClass
public IDispatchImpl
{
public:
CValidateCard()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_VALIDATECARD)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CValidateCard)
COM_INTERFACE_ENTRY(IValidateCard)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// IValidateCard
public:
STDMETHOD(PrefixCheck)(/*[in]*/ BSTR bstrCCNo,/*[in]*/BSTR bstrCCType);
STDMETHOD(LengthCheck)(/*[in]*/ BSTR bstrCCNo,/*[in]*/BSTR bstrCCType);
STDMETHOD(LuhnCheck)(/*[in]*/ BSTR bstrCCNo,/*[in]*/BSTR bstrCCType);
STDMETHOD(ValidateCreditCard)(/*[in]*/ BSTR bstrCCNo,/*[in]*/BSTR bstrCCType,/*[out,retval]*/long *val);
};
#endif //__VALIDATECARD_H_
(篇幅所限,未完,待續)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-963666/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Developing COM Components using VC-ATL(1) (轉)dev
- Developing COM Components using VC-ATL(2-3) (轉)dev
- Developing COM Components using VC-ATL(2-2) (轉)dev
- Developing COM Components using VC-ATL(3-3) (轉)dev
- Developing COM Components using VC-ATL(3-5) (轉)dev
- Developing COM Components using VC-ATL(3-6) (轉)dev
- Developing COM Components using VC-ATL(3-7) (轉)dev
- Developing for ARKit 1.5 update using Unity ARKit PlugindevUnityPlugin
- [轉帖]10 Hardware Components of Oracle ExadataOracle
- Angular 2 Components CommunicateAngular
- 探索Web ComponentsWeb
- [譯] Architecture Components 之 Adding Components to your ProjectProject
- 從HTML Components的衰落看Web Components的危機HTMLWeb
- Web Components 小欖Web
- 「 重磅 」React Server ComponentsReactServer
- Styled-Components初探
- Web Components 原生元件 TrendsWeb元件
- 【譯】Web Components簡介Web
- Web Components系列(一) —— 概述Web
- Building Custom ComponentsUI
- astro中建立web componentsASTWeb
- SAP Commerce Cloud Build Manifest ComponentsCloudUI
- Flutter Flame 教程3 -- Components元件Flutter元件
- 初識 Web Components 與 StencilWeb
- 【譯】容器元件 (Container Components)元件AI
- Atag – Web Components 最佳實踐Web
- visual components premium特色功能REM
- Web Components之Custom ElementsWeb
- Altium designer 從原理圖更新至PCB時出現提示:failed to match * of * components using unique identifiersAIIDE
- XML 程式設計思想: UBL 1.0(以及 ebXML Core Components 等)(轉)XML程式設計
- Web Components 入門例項教程Web
- [譯] styled-components v3.1.0
- [譯] Web Components 的高階工具Web
- Visual Components軟體特點
- 淺析Web components的痛點Web
- Web Components 系列(五)—— 關於 TemplatesWeb
- Web Components 系列(五)—— 詳解 SlotsWeb
- CSS in JS 之 Styled-components 用法CSSJS