Du solltest nicht mehr mit den API-Funktionen zur Nutzung einer DLL arbeiten, da hat PB bessere Funktionen, die dann auch
sicherer sind.
GetProcAddress_(...) benötigt die Funktion in Literalen als ASCII, wobei PB es aber als UNICODE übergibt. Das Programm erkennt also die Funktion nicht und gibt dann selbstverständlich "Fehler" bzw. 0 zurück.
Dein Code sollte also so aussehen:
Code: Alles auswählen
Procedure D3D_Init()
Global D3DInst
Global D3D.IDirect3D9
Global D3DWnd.D3DPresent_Parameters
Global D3DDevice.IDirect3DDevice9
Global D3DInst
D3DInst = LoadLibrary_("D3D9.dll")
If D3DInst
Protected *func = Ascii("Direct3DCreate9")
D3D = CallFunctionFast(GetProcAddress_(D3DInst, *func), #D3D_SDK_VERSION)
FreeMemory(*func)
EndIf
ProcedureReturn D3D
EndProcedure
ungetested!
Besser wäre es mit Prototypes und GetFunction zu arbeiten, oder mit Import, wobei man dann auf das evtl. Fehlen
der DLL nicht reagieren kann.
Getestete Version würde ich Dir ja gerne geben, aber ohne definition der Structure D3DPresent_Parameters und der
konstanten #D3D_SDK_VERSION in Deinem Beispielsource ist mir das zu Aufwendig
Gruß
Thomas