vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Kniffeliges COM-Problem 
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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Kniffeliges COM-Problem973unbekannt31.05.03 16:12
Kleiner Hinweis,655unbekannt31.05.03 18:30
Re: Kniffeliges COM-Problem694thom@s01.06.03 18:16
Re: Kniffeliges COM-Problem717unbekannt01.06.03 22:32

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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