Code: Select all
#Pragma Once
#Define UNICODE
#Include "windows.bi"
#Ifndef BSTR
Type BSTR As WString Ptr
#EndIf
#Ifdef Allocate
#Undef Allocate
#EndIf
#Define Allocate(cx) GlobalAlloc(GMEM_FIXED+GMEM_ZEROINIT,cx)
#Ifdef DeAllocate
#Undef DeAllocate
#EndIf
#Define DeAllocate(pv) GlobalFree(pv)
#Define DM_OK 0
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Type OLE_OBJECT
As Any Ptr pVtbl
As UInteger dwRefCount
End Type
Type OLE_IUnknown
As Function (ByVal ppItf As Any Ptr Ptr,ByVal IID As Any Ptr, ByVal pp As Any Ptr Ptr) As UInteger QueryInterface
As Function (ByVal ppItf As Any Ptr Ptr) As UInteger AddRef
As Function (ByVal ppItf As Any Ptr Ptr) As UInteger Release
End Type
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Type IDMInterface extends OLE_IUnknown
As Function ( ByVal Action As BSTR, ByVal Parameters As BSTR,ByVal pInterfaceHost As IDMInterface Ptr) As UInteger DoAction
End Type
Type IDMPluginObject extends OLE_OBJECT
As IDMInterface Ptr DMHost
End Type
Type IDMPluginInterface extends OLE_IUnknown
As Function (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger getID
As Function (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger GetName
As Function (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger GetVersion
As Function (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr,ByVal Lang As BSTR) As UInteger GetDescription
As Function (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger GetEmail
As Function (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger GetHomepage
As Function (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger GetCopyright
As Function (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger GetMinAppVersion
As Function (ByVal pThis As IDMPluginObject Ptr,ByVal DMHost As IDMInterface Ptr) As UInteger PluginInit
As Function (ByVal pThis As IDMPluginObject Ptr, ByVal Params As BSTR) As UInteger PluginConfigure
As Function (ByVal pThis As IDMPluginObject Ptr) As UInteger BeforeUnload
As Function (ByVal Result As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr, ByVal EventType As BSTR, ByVal EventData As BSTR) As UInteger EventRaised
End Type
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Declare Function IDMPluginInterface_QueryInterface (ByVal pItf As IDMPluginObject Ptr,ByVal IID As Any Ptr, ByVal pp As Any Ptr Ptr) As UInteger
Declare Function IDMPluginInterface_AddRef (ByVal pItf As IDMPluginObject Ptr) As UInteger
Declare Function IDMPluginInterface_Release (ByVal pItf As IDMPluginObject Ptr) As UInteger
Declare Function IDMPluginInterface_getId (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
Declare Function IDMPluginInterface_GetName (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
Declare Function IDMPluginInterface_GetVersion (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
Declare Function IDMPluginInterface_GetDescription (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr,ByVal Lang As BSTR) As UInteger
Declare Function IDMPluginInterface_GetEmail (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
Declare Function IDMPluginInterface_GetHomepage (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
Declare Function IDMPluginInterface_GetCopyright (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
Declare Function IDMPluginInterface_GetMinAppVersion (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
Declare Function IDMPluginInterface_PluginInit (ByVal pThis As IDMPluginObject Ptr,ByVal DMHost As IDMInterface Ptr) As UInteger
Declare Function IDMPluginInterface_PluginConfigure (ByVal pThis As IDMPluginObject Ptr, ByVal Params As BSTR) As UInteger
Declare Function IDMPluginInterface_BeforeUnload (ByVal pThis As IDMPluginObject Ptr) As UInteger
Declare Function IDMPluginInterface_EventRaised (ByVal Result As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr, ByVal EventType As BSTR, ByVal EventData As BSTR) As UInteger
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Extern "WINDOWS-MS"
Declare Function RegisterPlugIn(ByVal ppPluginObject As IDMPluginObject Ptr Ptr) As UInteger 'Export
End Extern
Declare Function DllMain(ByVal hInstance As Any Ptr, ByVal dwReason As UInteger, ByVal pvReserved As Any Ptr) As UInteger 'DllEntryPoint
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Function IDMPluginObject_New(size As UInteger) As Any Ptr
Dim As IDMPluginObject Ptr objRet
Dim As IDMPluginInterface Ptr pitf
objRet=Cast(IDMPluginObject Ptr,Allocate(SizeOf(IDMPluginObject)))
objRet->pVtbl=Cast(Any Ptr,Allocate(SizeOf(IDMPluginInterface)))
objRet->dwRefCount = 1
pitf= objRet->pVtbl
pitf->QueryInterface= @IDMPluginInterface_QueryInterface
pitf->AddRef= @IDMPluginInterface_AddRef
pitf->Release= @IDMPluginInterface_Release
pitf->getId= @IDMPluginInterface_getId
pitf->GetName= @IDMPluginInterface_GetName
pitf->GetVersion= @IDMPluginInterface_GetVersion
pitf->GetDescription= @IDMPluginInterface_GetDescription
pitf->GetEmail= @IDMPluginInterface_GetEmail
pitf->GetHomepage= @IDMPluginInterface_GetHomepage
pitf->GetCopyright= @IDMPluginInterface_GetCopyright
pitf->GetMinAppVersion= @IDMPluginInterface_GetMinAppVersion
pitf->PluginInit= @IDMPluginInterface_PluginInit
pitf->PluginConfigure= @IDMPluginInterface_PluginConfigure
pitf->BeforeUnload= @IDMPluginInterface_BeforeUnload
pitf->EventRaised= @IDMPluginInterface_EventRaised
Return Cast(Any Ptr,objRet)
End Function
Function IDMPluginObject_Delete(ByVal objRet As IDMPluginObject Ptr) As UInteger
If objRet = NULL Then GoTo IDMPluginObject_Delete_Exit
If objRet->pVtbl Then _
DeAllocate(Cast(Any Ptr,objRet->pVtbl))
DeAllocate(objRet)
IDMPluginObject_Delete_Exit:
Return 0UL
End Function
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Function IDMPluginInterface_QueryInterface (ByVal pItf As IDMPluginObject Ptr,ByVal IID As Any Ptr, ByVal pp As Any Ptr Ptr) As UInteger
pItf->dwRefCount+=1
pp[0]=Cast(Any Ptr,pItf)
Return DM_OK
End Function
Function IDMPluginInterface_AddRef (ByVal pItf As IDMPluginObject Ptr) As UInteger
pItf->dwRefCount += 1
Return pitf->dwRefCount
End Function
Function IDMPluginInterface_Release (ByVal pItf As IDMPluginObject Ptr) As UInteger
pItf->dwRefCount -= 1
Return pitf->dwRefCount
End Function
'///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
'#Define def_ID Cast(Any Ptr, @WStr("{974C86E7-44AD-4C6B-B90C-67A563DEA75}"))
#Define def_ID Cast(Any Ptr, @WStr("VERHOLOM"))
#Define def_Name @WStr("Íàçâàíèå íàøåãî ïëàãèíà")
#Define def_Version @WStr("0.1.1.1")
#Define def_Description @WStr("Ñàìûé õîðîøèé ïëàãèí")
#Define def_Email @WStr("assembler_c@ukr.net")
#Define def_Homepage @WStr("verholom.narod.ru")
#Define def_Copyright @WStr("(c) Vitaly Golovanoff aka VerhoLom")
#Define def_MinAppVersion @WStr("5.0.2")
Function IDMPluginInterface_getId (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
v[0]=def_ID
Return DM_OK
End Function
Function IDMPluginInterface_GetName (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
v[0]=def_Name
Return DM_OK
End Function
Function IDMPluginInterface_GetVersion (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
v[0]=def_Version
Return DM_OK
End Function
Function IDMPluginInterface_GetDescription (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr,ByVal Lang As BSTR) As UInteger
v[0]=def_Description
Return DM_OK
End Function
Function IDMPluginInterface_GetEmail (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
v[0]=def_Email
Return DM_OK
End Function
Function IDMPluginInterface_GetHomepage (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
v[0]=def_Homepage
Return DM_OK
End Function
Function IDMPluginInterface_GetCopyright (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
v[0]=def_Copyright
Return DM_OK
End Function
Function IDMPluginInterface_GetMinAppVersion (ByVal v As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr) As UInteger
v[0]=def_MinAppVersion
Return DM_OK
End Function
Function IDMPluginInterface_PluginInit (ByVal pThis As IDMPluginObject Ptr,ByVal DMHost As IDMInterface Ptr) As UInteger
pThis->DMHost = DMHost
Return DM_OK
End Function
Function IDMPluginInterface_PluginConfigure (ByVal pThis As IDMPluginObject Ptr, ByVal Params As BSTR) As UInteger
MessageBox(GetActiveWindow(),@WStr("IDMPluginInterface_PluginConfigure "),Params,MB_APPLMODAL)
Return DM_OK
End Function
Function IDMPluginInterface_BeforeUnload (ByVal pThis As IDMPluginObject Ptr) As UInteger
Return DM_OK
End Function
Function IDMPluginInterface_EventRaised (ByVal Result As BSTR Ptr, ByVal pThis As IDMPluginObject Ptr, ByVal EventType As BSTR, ByVal EventData As BSTR) As UInteger
MessageBox(GetActiveWindow(),@WStr("IDMPluginInterface_EventRaised"),EventData,MB_APPLMODAL)
Return DM_OK
End Function
Extern "WINDOWS-MS"
Function RegisterPlugIn(ByVal ppPluginObject As IDMPluginObject Ptr Ptr) As UInteger
ppPluginObject[0] = IDMPluginObject_New(SizeOf(IDMPluginObject))
Return DM_OK
End Function
End Extern
Function DllMain(ByVal hInstance As Any Ptr, ByVal dwReason As UInteger, ByVal pvReserved As Any Ptr) As UInteger
Select Case dwReason
Case DLL_PROCESS_ATTACH: GoTo DLL_MAIN_DLL_PROCESS_ATTACH
Case DLL_PROCESS_DETACH: GoTo DLL_MAIN_DLL_PROCESS_DETACH
Case Else: GoTo DLL_MAIN_EXIT
End Select
DLL_MAIN_DLL_PROCESS_ATTACH:
GoTo DLL_MAIN_EXIT
DLL_MAIN_DLL_PROCESS_DETACH:
DLL_MAIN_EXIT:
Return DM_OK + 1
End Function
