锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
public
聽IObjectSafetyImpl
<
CPolyCtl,聽INTERFACESAFE_FOR_UNTRUSTED_CALLER聽
|
聽INTERFACESAFE_FOR_UNTRUSTED_DATA
>
COM_INTERFACE_ENTRY(IObjectSafety)2.聽 杞崲cer鏍煎紡涓簊pc鏍煎紡錛?br />
cert2spc聽聽聽dream.cer聽聽聽dream.spc聽聽聽3.聽 緇檆ab鏂囦歡絳懼悕
signtool聽signwizard4.聽 鍦╳eb欏典笂宓屽鍏ョ鍚嶇殑CAB鏂囦歡
<BODY>
<OBJECT聽ID="PolyCtl"聽
CLASSID="CLSID:4CBBC676-507F-11D0-B98B-000000000000"
CODEBASE="http://example.sq-soft.com/mydir/myctl.cab#version=1,0,0,1">
</OBJECT>
</BODY>CODEBASE 涔熷彲浠ョ洿鎺ユ寚鍚?OCX 鎴?DLL 鏂囦歡錛?/p>
涓夈佸垱寤篊AB鏂囦歡(鎽樺綍鑷狹SDN錛?/strong>
1.聽 鍒涘緩INF鏂囦歡
;聽Sample聽INF聽file聽for聽POLYGON.DLL
[version]聽
;聽version聽signature聽(same聽for聽both聽NT聽and聽Win95)聽do聽not聽remove
signature="$CHICAGO$"
AdvancedINF=2.0聽聽
[Add.Code]
polygon.dll=polygon.dll
atl.dll=atl.dll
;聽needed聽DLL
[atl.dll]
file-win32-x86=thiscab
FileVersion=2,00,0,7024
DestDir=11
RegisterServer=yes聽
[polygon.dll]
file-win32-x86=thiscab
clsid=
{4CBBC676-507F-11D0-B98B-000000000000}聽
FileVersion=1,0,0,1聽
RegisterServer=yes聽聽
;聽end聽of聽INF聽file
file-win32-x86=http://example.microsoft.com/mydir/NEEDED.DLL聽鍏抽敭瀛椻渇ile-win32-x86鈥濆皢騫沖彴鏍囪瘑涓?x86 鐗瑰畾鐨勩?/p>
鍙氳繃鍦?Windows 璧勬簮綆$悊鍣ㄤ腑鐨勬枃浠朵笂鍗曞嚮榧犳爣鍙抽敭鏉ヨ幏鍙栨枃浠剁殑鐗堟湰鍙楓備粠鏄劇ず鐨勫垪琛ㄤ腑閫夋嫨鈥滃睘鎬р濓紝鐒跺悗鍦ㄦ樉紺虹殑瀵硅瘽妗嗕腑閫夋嫨鈥滅増鏈濋夐」鍗°傛湁鏃墮渶瑕佸湪鏂囦歡鐗堟湰涓澶栨彃鍏ヤ竴涓?0銆備緥濡傦紝鍦ㄥ璇濇涓?ATL.DLL 鐨勭増鏈彿鏄劇ず涓?2.00.7024銆傝屽湪 INF 鏂囦歡涓紝榪欏彉涓?2, 00, 0, 7024銆?/p>
鈥淒estDir鈥濇槸灝嗚鍔犺澆鏂囦歡鐨勭洰褰曟墍鍦ㄧ殑浣嶇疆錛?1 鎸囧畾緋葷粺鐩綍涓?WINDOWS/SYSTEM 鎴?WINNT/SYSTEM32錛?0 鎸囧畾 Windows 鐩綍銆乄INDOWS 鎴?WINNT銆傚鏋滄湭鎸囧畾浠諱綍 DestDir錛堝吀鍨嬫儏鍐碉級錛屽垯浠g爜瀹夎鍦ㄥ浐瀹氱殑 OCCACHE 鐩綍涓?/p>
鈥渃lsid鈥濇槸灝嗚瀹夎鐨勬帶浠剁殑 CLSID銆?br />
2.聽 鍒涘緩CAB鏂囦歡
鍒涘緩浜?INF 鏂囦歡鍚庯紝榪愯 CABARC 瀹炵敤宸ュ叿浠ュ垱寤?CAB 鏂囦歡銆傚簲鍦ㄥ寘鍚簮鏂囦歡鐨勭洰褰曚笅榪愯 CABARC銆傚湪鍛戒護琛屼笂錛屾寜婧愭枃浠跺嚭鐜板湪 INF 涓殑欏哄簭鎺掑垪瀹冧滑錛屽茍灝?INF 鏂囦歡鏀懼湪鏈鍚庛備緥濡傦細
搴斿湪鍖呭惈婧愭枃浠訛紙INF銆丱CX 鍜?DLL 鏂囦歡錛夌殑鐩綍涓嬭繍琛?CABARC銆傚皢鍦?CAB 鏂囦歡涓瓨妗g殑鏂囦歡搴旇鎸夊畠浠湪 INF 鏂囦歡涓垪鍑虹殑鍚屼竴欏哄簭鍦ㄥ懡浠よ涓垪鍑恒傚湪涓婇潰鐨勭ず渚嬩腑錛孖NF 鏂囦歡搴旇灝?NEEDED1.DLL 鍒楀湪絎竴浣嶏紝鎺ヤ笅鏉ユ槸 NEEDED2.DLL錛岀劧鍚庢槸 MYCTL.OCX銆?/p>
-s 閫夐」鍦ㄥ帇緙╂枃浠朵腑淇濈暀鐢ㄤ簬浠g爜絳懼悕鐨勭┖闂淬?b>n 鍛戒護鎸囧畾甯屾湜鍒涘緩 CAB 鏂囦歡銆?br />聽
DECLARE_DISPATCH_MAP()
DECLARE_INTERFACE_MAP()
2.聽 聽.cpp鏂囦歡瀹炵幇鎺ュ彛銆佸垎媧綢D鏄犲皠
//
鏄犲皠鍒嗘淳ID
BEGIN_DISPATCH_MAP(cThisClass,聽CBaseClass)
聽聽聽聽聽DISP_FUNCTION_ID(CThisClass,聽
銆銆銆銆銆銆銆銆銆銆銆 "
ComFunc
"
,
銆銆銆銆銆銆銆銆銆銆聽銆 DISP_ID,聽
銆銆銆銆銆銆銆銆銆銆銆聽聽 LocalFuncName,聽
銆銆銆銆銆銆銆銆銆銆銆聽聽 VARIANT_RETURN_TYPE,聽
銆銆銆銆銆銆銆銆銆銆銆聽聽 VARIANT_PARAMS_TYPE)
END_DISPATCH_MAP()
聽聽聽聽聽聽
//
鏄犲皠浜嬩歡鎺ュ彛
BEGIN_INTERFACE_MAP(CThisClass,CBaseClass)聽聽聽聽
聽聽聽聽聽INTERFACE_PART(CThisClass,聽DIID_IEventXX,銆Dispatch)聽
//
榪欓噷Dispatch涓篊CmdTart綾葷殑涓涓粨鏋?璇ュ畯濉厖榪欎釜緇撴瀯
END_INTERFACE_MAP()
3.聽 #import "...\緇勪歡鍚?tlb" no_namespace named_guids聽no_namespace
4. 鍒濆鍖朇OM搴撱丏ispatch緇撴瀯騫跺緩绔嬭繛鎺?/p>
EnableAutomation(
);聽聽聽聽//鍚屼笂闈㈢殑瀹忎竴璧峰疄鐜頒簡IDispatch鎺ュ彛
5.聽 瀹炵幇鏄犲皠鍑芥暟(LocalFuncName)
6.聽 鍗歌澆COM搴撱佸彇娑堣繛鎺?/p>
AfxConnectionUnadvise(
)聽聽聽
鏂規硶浜?聽 浣跨敤ATL鏄犲皠瀹忥紝緇ф壙IDsipEventImpl
1.聽聽聽#import "...\緇勪歡鍚?tlb" no_namespace named_guids
2.聽 瀹炵幇浜嬩歡鎺ユ敹綾籆EventSink
聽聽聽聽聽聽a.聽聽浣跨敤ATL瀹忓畾涔夊嚱鏁頒俊鎭粨鏋劼犅犅犅犅犅?/p>
聽聽聽聽聽 b.聽 聽ATL瀹忔槧灝勪簨浠跺嚱鏁奧犅犅犅犅犅犅犅犅犅犅?/p>
BEGIN_SINK_MAP(CEventSink)
聽聽聽聽聽聽聽SINK_ENTRY_INFO(
1
,聽DIID_I
,聽DISP_ID,聽LocalFunc,聽
&
FuncINfo)
聽聽聽聽聽聽聽
END_SINK_MAP()
聽聽聽聽聽#ifndef聽__EVENTSINK_H
聽聽聽聽聽#define聽__EVENTSINK_H
聽聽聽聽聽
聽聽聽聽聽namespace聽
聽聽聽聽聽
{
聽聽聽聽聽static聽const聽int聽DISPID_SHOW聽=聽1;
聽聽聽聽聽static聽const聽int聽DISPID_SHOW2聽=聽2;
聽聽聽聽聽
聽聽聽聽聽_ATL_FUNC_INFO聽OnShowInfo聽=
聽聽聽聽聽
{
聽聽聽聽聽聽CC_STDCALL,聽//calling聽conv
聽聽聽聽聽聽VT_EMPTY,//return聽value
聽聽聽聽聽聽0聽,//number聽of聽arguments
聽聽聽聽聽聽NULL//argumnent聽types
聽聽聽聽聽};
聽聽聽聽聽_ATL_FUNC_INFO聽OnShow2Info聽=
聽聽聽聽聽
{
聽聽聽聽聽聽CC_STDCALL,聽//calling聽conv
聽聽聽聽聽聽VT_EMPTY,//return聽value
聽聽聽聽聽聽1聽,//number聽of聽arguments

聽聽聽聽聽聽
{聽VT_I2}//argumnent聽types
聽聽聽聽聽};
聽聽聽聽聽
聽聽聽聽聽}
聽聽聽聽聽
聽聽聽聽聽class聽CEventSink聽:聽聽public聽IDispEventImpl<1,聽CEventSink,聽&DIID__IAtlTest2Events,聽&LIBID_TEST2Lib>
聽聽聽聽聽
{
聽聽聽聽聽public:聽
聽聽聽聽聽聽聽CEventSink()
{};
聽聽聽聽聽聽聽virtual聽~CEventSink()
{};
聽聽聽聽聽
聽聽聽聽聽聽聽void聽__stdcall聽OnShow();聽//娌℃湁鍙傛暟鐨勬儏鍐?/span>
聽聽聽聽聽聽聽void聽__stdcall聽OnShow2(short);//鏈夊弬鏁扮殑鎯呭喌
聽聽聽聽聽
聽聽聽聽聽聽聽//蹇呴』瑕佺敤SINK_ENTRY_INFO,蹇呴』鎸囧畾鍙傛暟淇℃伅
聽聽聽聽聽聽聽BEGIN_SINK_MAP(CEventSink)
聽聽聽聽聽聽聽聽SINK_ENTRY_INFO(1,DIID_ISimpleCOMEvents,DISPID_SHOW,OnShow,&OnShowInfo)
聽聽聽聽聽聽聽聽SINK_ENTRY_INFO(1,DIID_ISimpleCOMEvents,DISPID_SHOW2,OnShow2,&OnShow2Info)
聽聽聽聽聽聽聽END_SINK_MAP()
聽聽聽聽聽};
聽聽聽聽聽
聽聽聽聽聽#endif