Hi!
Ich möchte aus der DLL "pstorec.dll" (im system32 verzeichnis) die Funktion "PStoreCreateInstance" verwenden.
Dazu muss ich, nachdem was ich bisher gelesen habe,
1. die dll laden mit "LoadLibrary",
2. mit "GetProcAddress" den Pointer auf die Adresse der Funktion ermitteln,
3. die Funktion aufrufen, und
4. schließlich die dll mit "FreeLibrary" wieder freigeben.
Doch das Aufrufen der Funktion klappt nicht, weil ich mit den Übergabeparametern nicht zurecht komme.
Laut MSDN ist die Funktion folgendermaßen strukturiert:
HRESULT PStoreCreateInstance(
IPStore** ppProvider,
PST_PROVIDERID* pProviderID,
void* pReserved,
DWORD dwFlags
); (Quelle: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devnotes/winprog/pstorecreateinstance.asp)
Zitat: | | Parameters
ppProvider
[out] A pointer to the retrieved interface pointer for the storage provider. When you finish using the interface, decrement its reference count by calling its IUnknown::Release method. This parameter cannot be NULL.
pProviderID
[in] A pointer to the GUID that identifies the storage provider. If this parameter is NULL, then the base storage provider is used.
pReserved
[in] Reserved; must be NULL.
dwFlags
[in] Reserved; must be zero.
Return Values
The return value is an HRESULT. A value of S_OK indicates the function was successful. | |
Aber ich kann keine mir bekannten Variablen-Typen von VB erkennen. Ist "IPStore **" etwa ein Datentyp? Und das Ergebnis "HRESULT" ist mir in VB auch unbekannt.
Ich habe die Funktion einfach mal in einem Modul folgerndermaßen deklariert:
Public Declare Function PStoreCreateInstance Lib "pstorec.dll" (ByVal _
ppProvider As Long, ByVal pProviderID As Long, ByVal pReserved As Long, ByVal _
dwFlags As Long) As Long In meinem VB-Sub versuche ich dann die oben genannten Schritte durchzuführen:
Dim myLibrary As Long
Dim fctPtr As Long
Dim fctCall As Long
myLibrary = LoadLibrary(App.Path & "\pstorec.dll")
If (myLibrary <> 0) Then
fctPtr = GetProcAddress(myLibrary, "PStoreCreateInstance")
If (fctPtr <> 0) Then
'Funktionsaufruf, der scheitert:
fctCall = PStoreCreateInstance(PStore, 0&, 0&, 0&)
End If
End If
FreeLibrary myLibrary Als fctPtr wird 1581862525 zurückgegeben, das könnte ja eine realistische Adresse zur Funktion sein.
fctCall gibt allerdings -2147024809 zurück. Dies scheint ein Fehlercode zu sein....
Wie komme ich nun bloß an die korrekte Deklaration der Funktion, bzw den korrekten Aufruf :/
Könnt ihr mir bei meinem Problem helfen?
Vielen Dank und Gruß,
Stefan
mov ah, 4ch
int 21h |