| |
![zurück](../images/b_zurueck.gif)
Fortgeschrittene ProgrammierungKniffeliges COM-Problem | | ![](../images/trans.gif) | Autor: unbekannt | Datum: 31.05.03 16:12 |
| Hi Allz,
es gibt ein Interface: IStorage (GUID = "{0000000B-0000-0000-C000-000000000046}"), das mittels der OLE-Funktion:
Private Declare Function StgCreateDocFile Lib "Ole32.dll" Alias _
"StgCreateDocfile" (ByVal pwcsName As Long, _
ByVal grfMode As Long, ByVal reserved As Long, _
ppstgOpen As Long) As Long
Private Const STGM_COLLECTION = &H2000&
Private Const STGM_CONVERT = &H20000
Private Const STGM_CREATE = &H1000&
Private Const STGM_DELETEONRELEASE = &H4000000
Private Const STGM_DIRECT = &H0&
Private Const STGM_DIRECT_SWMR = &H400000
Private Const STGM_FAILIFTHERE = &H0&
Private Const STGM_NOSCRATCH = &H100000
Private Const STGM_NOSNAPSHOT = &H200000
Private Const STGM_OPEN = &H80000000
Private Const STGM_OUTPUT = &H8000&
Private Const STGM_PRIORITY = &H40000
Private Const STGM_READ = &H0&
Private Const STGM_READWRITE = &H2&
Private Const STGM_RECURSIVE = &H1000000
Private Const STGM_SHARE_DENY_NONE = &H40&
Private Const STGM_SHARE_DENY_READ = &H30&
Private Const STGM_SHARE_DENY_WRITE = &H20&
Private Const STGM_SHARE_EXCLUSIVE = &H10&
Private Const STGM_SIMPLE = &H8000000
Private Const STGM_STRICTOPEN = &H40000000
Private Const STGM_TRANSACTED = &H10000
Private Const STGM_WRITE = &H1&
Private Const S_OK = &H0&
Private Sub Form_Load()
Dim sFName As String
Dim nFlags As Long
Dim rVal As Long
Dim pUnkIStorage As Long
Dim vTable As Variant
sFName = "C:\DLL\VBStorage" & Chr(0)
nFlags = STGM_CREATE Or STGM_READWRITE Or STGM_SHARE_EXCLUSIVE
rVal = StgCreateDocFile(StrPtr(sFName), nFlags, 0&, VarPtr(pUnkIStorage))
If rVal = S_OK Then
MsgBox Hex(pUnkIStorage) 'Address Pointer IStorage-Interface
' *pUnkIStorage ->
' vTable->QueryInt
' erface
End If
End Sub in eine Laufzeitinstanz versetzt werden kann. Um das Interface in VB weiterverwenden zu können, muss der Zeiger auf IUnknown des Interface, der in *pUnkIStorage liegt, einem Objekt übergeben werden. Es gibt für das Objekt keine Type.Lib! Man könnte daran denken, eine Klasse zu definieren, über die die Funktionen des Interface via Implements eingebunden werden können, allerdings lassen sich in VB-erzeugte Klassen nicht so ohne weiteres dazu verwenden, ein Interface entgegen zu nehmen: Vielmehr, sie wollen eines creieren. Wir wollen mit einem bereits von OLE creierten Interface aber fortfahren Wie können wir schaffen, das was hinter *pUnkIStorage liegt in eine Variable vom Typ Object oder Klasse zu zwingen?
Wenn uns das nicht gelingt, müssen wir alles in eine DLL packen - was eigentlich Schade wäre.
Wir können ja in VB nicht über einen Zeiger auf eine Funktion eine Funktion aufrufen. 0 | ![](../images/trans.gif) |
![](../images/48x48/info.gif) | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
![nach oben](../images/b_top.gif) ![zurück](../images/b_zurueck.gif) |
|
Neu! sevEingabe 3.0 ![Das Eingabecontrol der Superlative](../images/werbung/sevein20_100x100.jpg)
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Access-Tools Vol.1 ![Access-Tools CD Vol.1](../images/werbung/apvol1_68x100.gif)
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|