Will you create a com-dll or call a com-object.
For use com-object search COMate or use this
Code: Select all
;-TOP
; Kommentar : DCOM Object Helper
; Author : mk-soft
; Second Author :
; Datei : ComHelper.pb
; Version : 1.03
; Erstellt : 01.05.2006
; GeƤndert : 01.07.2006
; -------------------------------------------------------------------
;- Konstanten
#CLSCTX_INPROC_SERVER = $1
#CLSCTX_INPROC_HANDLER = $2
#CLSCTX_LOCAL_SERVER = $4
#CLSCTX_REMOTE_SERVER = $10
#CLSCTX_ALL = (#CLSCTX_INPROC_SERVER|#CLSCTX_INPROC_HANDLER|#CLSCTX_LOCAL_SERVER|#CLSCTX_REMOTE_SERVER)
; -------------------------------------------------------------------
;- Strukturen
; -------------------------------------------------------------------
; Globale Variablen
Global LastError.l
Global LastMessage.s
; -------------------------------------------------------------------
CompilerIf Defined(FormatMessage, #PB_Procedure) = #False
Procedure.s FormatMessage(ErrorNumber.l)
Protected *Buffer, len, result.s
len = FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER|#FORMAT_MESSAGE_FROM_SYSTEM,0,ErrorNumber,0,@*Buffer,0,0)
If len
result = PeekS(*Buffer, len - 2)
LocalFree_(*Buffer)
ProcedureReturn result
Else
ProcedureReturn "Errorcode: " + Hex(ErrorNumber)
EndIf
EndProcedure
CompilerEndIf
; -------------------------------------------------------------------
Procedure CreateObject(Object.s, CLSTYPE.l = #CLSCTX_LOCAL_SERVER | #CLSCTX_INPROC_SERVER)
Protected hr.l, CLSID.GUID, pCf.IClassFactory, *Object.IDispatch
LastError = 0
LastMessage = ""
hr = CoInitialize_(0)
If hr <> #S_OK And hr <> #S_FALSE
LastError = hr
LastMessage = "Error CoInitialize: " + FormatMessage(hr)
End
EndIf
hr = CLSIDFromProgID_(Object, CLSID.GUID)
If hr <> #S_OK
LastError = hr
LastMessage = "Error CLSIDFromProgID: " + FormatMessage(hr)
ProcedureReturn 0
EndIf
hr = CoGetClassObject_(@CLSID, CLSTYPE, #Null, ?IID_IClassFactory, @pCf.IClassFactory)
If hr <> #S_OK
LastError = hr
LastMessage = "Error CoGetClassObject: " + FormatMessage(hr)
ProcedureReturn 0
EndIf
hr = pCf\CreateInstance(#Null, ?IID_IDispatch, @*Object.IDispatch)
pCf\Release()
If hr <> #S_OK
LastError = hr
LastMessage = "Error CreateInstance: " + FormatMessage(hr)
ProcedureReturn 0
Else
ProcedureReturn *Object
EndIf
EndProcedure
; -------------------------------------------------------------------
Procedure ReleaseObject(*Object.IDispatch)
If *Object
*Object\Release()
EndIf
EndProcedure
; ---------------------------------------------------------
;- DataSection IID
DataSection
IID_NULL: ; {00000000-0000-0000-0000-000000000000}
Data.l $00000000
Data.w $0000, $0000
Data.b $00, $00, $00, $00, $00, $00, $00, $00
IID_IUnknown : ; {00000000-0000-0000-C000-000000000046}'
Data.l $00000000
Data.w $0000, $0000
Data.b $C0, $00, $00 , $00 , $00, $00 , $00 , $46
IID_IDispatch:
Data.l $00020400
Data.w $0000, $0000
Data.b $C0,$00,$00,$00,$00,$00,$00,$46
IID_IClassFactory:
Data.l $00000001
Data.w $0000, $0000
Data.b $C0, $0, $0, $0, $0, $0, $0, $46
EndDataSection
P.S. for virtual table(jump list) show Interfaces on PB-Help