Реферат Курсовая Конспект
Creating a COM object in ASM - раздел Образование, Creating A Com Object In Asm...
|
IUnknown * pUnkOuter, //Pointer to outer object when part of an
// aggregate REFIID riid,
Reference to the interface identifier
Oid** ppvObject); //Address of output variable that receives
The interface pointer requested in riid
HRESULT LockServer(BOOL fLock);
Declare the ClassFactory object structure
ClassFactoryObject STRUCT
LpVtbl DWORD 0 ; function table pointer
NRefCount DWORD 0 ; object and reference count
ClassFactoryObject ENDS
Declare the MyCom object structure
MyComObject STRUCT
LpVtbl DWORD 0 ; function table pointer
NRefCount DWORD 0 ; reference count
NValue DWORD 0 ; interface private data
MyCom.idl : IDL source for MyCom.dll
//
This file will be processed by the MIDL tool to
Produce the type library (MyCom.tlb) and marshalling code
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(F8CE5E41-1135-11d4-A324-0040F6D487D9),
helpstring("IMyCom Interface"),
pointer_default(unique)
]
Library MyComLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid(F8CE5E43-1135-11d4-A324-0040F6D487D9),
helpstring("MyCom Class")
]
GetValue PROTO :DWORD, :DWORD
SetValue PROTO :DWORD, :DWORD
MIDL MyCom.idl
This produces several output files which you can mostly ignore, and most importantly MyCom.tlb, our type library. This library should be added to the dll resource file with
HKEY_CLASSES_ROOTCMyCom
(Default) "CMyCom simple client"
HKEY_CLASSES_ROOTCMyComCLSID
(Default) "{A21A8C43-1266-11D4-A324-0040F6D487D9}"
HKEY_CLASSES_ROOTCLSID{A21A8C43-1266-11D4-A324-0040F6D487D9}
(Default) "CMyCom simple client"
HKEY_CLASSES_ROOTCLSID{A21A8C43-1266-11D4-A324-0040F6D487D9}CMyCom
(Default) "CMyCom"
HKEY_CLASSES_ROOTCLSID{A21A8C43-1266-11D4-A324-0040F6D487D9}InprocServer32
(Default) "C:MASM32MYCOMMYCOM.DLL"
ThreadingModel "Single"
HKEY_CLASSES_ROOTTypeLib{A21A8C42-1266-11D4-A324-0040F6D487D9}
(Default) (value not set)
HKEY_CLASSES_ROOTTypeLib{A21A8C42-1266-11D4-A324-0040F6D487D9}1.0
(Default) "MyCom 1.0 Type Library"
HKEY_CLASSES_ROOTTypeLib{A21A8C42-1266-11D4-A324-0040F6D487D9}1.0
(Default) (value not set)
HKEY_CLASSES_ROOTTypeLib{A21A8C42-1266-11D4-A324-0040F6D487D9}1.0 win32
(Default) " C:masm32COMMyCom MYCOM.DLL"
HKEY_CLASSES_ROOTTypeLib{A21A8C42-1266-11D4-A324-0040F6D487D9}1.0FLAGS
(Default) "O"
AddRef_MC proc this_:DWORD
Mov eax, this_
Inc (MyComObject ptr [eax]).nRefCount
Mov eax, (MyComObject ptr [eax]).nRefCount
Ret ; note we return the object count
Release_MC proc this_:DWORD
Mov eax, this_
Dec (MyComObject ptr [eax]).nRefCount
Mov eax, (MyComObject ptr [eax]).nRefCount
.IF (eax == 0)
The reference count has dropped to zero
No one holds reference to the object
So let's delete it
Invoke CoTaskMemFree, this_
Dec MyCFObject.nRefCount
xor eax, eax ; clear eax (count = 0)
ENDIF
Ret ; note we return the object count
Release_MC endp
MyCom is also a trivial interface to implement. The MyCom object has an extra member where the 'value' property is held.
GetValue proc this_:DWORD, pval:DWORD
Mov eax, this_
Mov eax, (MyComObject ptr [eax]).nValue
Mov edx, pval
Mov [edx], eax
Xor eax, eax ; return S_OK
Ret
GetValue endp
SetValue proc this_:DWORD, val:DWORD
Mov eax, this_
Mov edx, val
Mov (MyComObject ptr [eax]).nValue, edx
Xor eax, eax ; return S_OK
Ret
SetValue endp
RaiseValue PROC this_:DWORD, val:DWORD
Mov eax, this_
Mov edx, val
Add (MyComObject ptr [eax]).nValue, edx
Xor eax, eax ; return S_OK
Ret
Option Explicit
Private MC As New MyCom
Private Sub Command1_Click()
MC.Raise (Text2) Text1 = MC.Value
End Sub
Private Sub Form_Load()
Set MC = New MyCom
MC.Value = 100
Text1 = MC.Value
– Конец работы –
Используемые теги: Creating, com, Object, ASM0.068
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Creating a COM object in ASM
Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов