DLL Problem

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Bigmichi

Betreff: DLL Problem

BeitragMo, Mai 09, 2005 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Was mach ich falsch ? DLL und Functions adresse sidn da o.O

BlitzBasic: [AUSKLAPPEN]
Local dll :Int =LoadLibraryA(\"comctl32.dll\")
Local addr:Int =Int(GetProcAddress(dll,\"InitCommonControlsEx\"))
Local func:Byte (lp:LPINITCOMMONCONTROLSEX)\"Win32\"

(Int Ptr(Varptr(func)))[0]=addr

Local LPS:LPINITCOMMONCONTROLSEX = New LPINITCOMMONCONTROLSEX
LPS.dwICC = ICC_STANDARD_CLASSES
LPS.dwsize = sizeOf(LPS)
Print func(LPS)


Danke schonmals =)

Suco-X

Betreff: .....

BeitragDi, Mai 10, 2005 4:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Was läuft denn bei dir falsch?
Abgesehen davon das bei mir LPSDingsBumsXYZ(Ist das der Fehler!?) nicht da ist, gibt es noch kleinere Verbesserungsvorschläge.

Code: [AUSKLAPPEN]

Strict
Local dll :Int =LoadLibraryA("comctl32.dll")
Global InitCommonControlsEx(LPS:Byte Ptr)"Win32"=GetProcAddress(dll,"InitCommonControlsEx")

Local LPS:LPINITCOMMONCONTROLSEX = New LPINITCOMMONCONTROLSEX
LPS.dwICC = ICC_STANDARD_CLASSES
LPS.dwsize = SizeOf(LPS)
Print InitCommonControlsEx(LPS)

1 : Um die Addy aus der DLL zu bekommen, empfehle ich diese Art. Übersichtlicher.
2 : Wenn eine DLL einen Pointer auf Struktur oder sonstigen Datentyp verlangt, Byte Ptr nehmen. In einem Bmax Byte Ptr kann man jede Art von Pointer(Int,float,Type,Funktion usw.) drin speichern und wieder zurückcasten. Kleines Beispiel:
Code: [AUSKLAPPEN]

Strict
Local TestWert = 100
Print TestWert
Test(Varptr TestWert)
Print TestWert
Test(Varptr TestWert)
Print TestWert

Function Test(Wert:Byte Ptr)
   Local Temp:Int Ptr = Int Ptr(Wert)
   Var Temp:+100
End Function


Wenn also Externe Funktionen aus DLL oder Lib Pointer als Funktionsparameter erwarten, immer :byte ptr nehmen.
Eine Type Instanz(Wie in deinem Code) ist schon ein Ptr. Daher kannst du bei der Übergabe auf varptr verzichten.

3 : Sagen was der Fehler ist!!!!!!!!!!!!!!
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Bigmichi

BeitragDi, Mai 10, 2005 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
hm nun hab ich es genauso gemacht wie du es gesagt hast nur bei mir kommt immer 0 Zurück also False....


Code: [AUSKLAPPEN]
Local dll :Int =LoadLibraryA("comctl32.dll")
Global InitCommonControlsEx2(LPS:Byte Ptr)"Win32"=GetProcAddress(dll,"InitCommonControlsEx")

local LPS:LPINITCOMMONCONTROLSEX = New LPINITCOMMONCONTROLSEX
LPS.dwICC = ICC_STANDARD_CLASSES
LPS.dwsize = sizeOf(LPS)
print InitCommonControlsEx2(LPS)


es sollte aber True zurück kommen o.O normalerweise...

Hier der Type dazu zum testen mal...

Code: [AUSKLAPPEN]
Type LPINITCOMMONCONTROLSEX
  Field dwSize
  Field dwICC
EndType

Suco-X

Betreff: ........

BeitragDi, Mai 10, 2005 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Wenigstens kannst du dir sicher sein das es kein Programmfehler mehr ist Wink
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Bigmichi

BeitragDi, Mai 10, 2005 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
das is gut Wink aber ich brauch das Control Very Happy muss das ja benutzen können o.O ohen geht ja fast garnix...

Hoffe jemand fidneet nen Rat für mich =)

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group