AcceptFiles.dll unter BlitzMax

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Nicdel

Betreff: AcceptFiles.dll unter BlitzMax

BeitragDi, Dez 08, 2009 22:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Heute wollte ich die praktische AcceptFiles.dll von ChristianK unter BMax verwenden. Ich benutze folgenden Code:

BlitzMax: [AUSKLAPPEN]

Graphics 1280,800

'DLL (Acceptfiles)
DLLHandle = LoadLibraryA("acceptfiles.dll")

Global InitAcceptFiles(hwnd:Int)"Win32" = GetProcAddress(DLLHandle, "_InitAcceptFiles@4")

Local hwnd:Int = GetActiveWindow()

InitAcceptFiles(hwnd)


Leider bekomme ich bei InitAcceptFiles(hwnd) immer den Fehler "Attempt to call uninitialized function pointer". Woran liegt das?

Mfg Nicdel
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Artemis

BeitragMi, Dez 09, 2009 8:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie der Fehler schon sagt versuchst du einen nicht initialisierten Funktionspointer aufzurufen.

Entweder ist das DLLHandle falsch, was du mit einem einfachen
Code: [AUSKLAPPEN]
Assert DLLHandle, "DLL wurde nicht geladen"

nach LoadLibraryA testen.

Wenn das nicht der Fall ist, dass musst du überprüfen, ob der Funktionsname korrekt ist (Fängt der wirklich mit _ an?).

Gut geht das mit dem Dependency Walker.

BtbN

BeitragMi, Dez 09, 2009 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Der exportierte funktions-name fängt immer mit einem _ an, dieser wird jedoch beim laden genau so wieder automatisch angefügt. D.h. er ist zu viel.

Nicdel

BeitragMi, Dez 09, 2009 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für eure Hilfe, ohne "_" und ohne "@4" hat's funktioniert Smile

Neues Problem: Anscheinend gibt es Unterschiede zwischen einem String in Blitz3D und BlitzMax.
Die Funktion in der Userlib für B3D:
Code: [AUSKLAPPEN]
AcceptedFile$( index% )

Der Code in BlitzMax:
BlitzMax: [AUSKLAPPEN]
[...]

Global AcceptedFileCount()"Win32" = GetProcAddress(DLLHandle, "AcceptedFileCount")

Global AcceptedFile:String(index:Int)"Win32" = GetProcAddress(DLLHandle, "AcceptedFile")

[...]

Local FileCount:Int = AcceptedFileCount()

For Local z:Int = 0 Until FileCount

Print AcceptedFile(z)

Next

[...]


In B3D bekomme ich den Dateipfad zurück, in BlitzMax das hier als Ausgabe:
Code: [AUSKLAPPEN]

৔औ﹩৑ﴦﱥ৕ﭦহ捻﹜঍瘟ﱯথকﯤ৑便হ捻ঝ益﹥ࢁ簾cক便ﱳ঱çउﻧ঍瘟কﭳঅু簾঱盛ঐﯦ্ࠨDﵡ 

danach stürzt das Programm ab. Nachdem ich es beendet habe kommt folgendes:
Code: [AUSKLAPPEN]
è¡è¡¹¦tÔfnfiÑ&eÕfn¹¤\¥o¥¦g•ä Ѧe¹¤\¦e¦C•es±çi   ça¥\•fs…fcÁ¦t±§eæeÍ#   é$\­&u¹¦tÔfnfiÑ&eÕfn¹¤\¥o¥¦g•ä Ѧe¹¤\¦e¦C•es±çi   ça¥\•fs…fcÁ¦t±§eæeÍ
@x¡x¡
Process complete


Gibt es dafür eine Lösung? Oder eine Alternative zur AcceptFiles.dll?
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

BtbN

BeitragMi, Dez 09, 2009 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
MaxGUI kann von Haus aus Drag&Drop akzeptieren.

Nicdel

BeitragMi, Dez 09, 2009 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Und ohne MaxGUI? Ich will sie mir eigentlich nicht kaufen Wink
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

BtbN

BeitragMi, Dez 09, 2009 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne MaxGUI ist es sehr schwer, das wirklich Platform-Übergreifend hinzubekommen. Vorallem wird die DLL irgendwie BB-Interna nutzen, fürchte ich. Der String kann konvertiert werden(Lese hierzu die Doku von BMax, da steht das genau erklärt).
Ansonsten bliebe dir nur, für jedes OS zu suchen, wie es dort geht und es gesondert einzubauen.

Nicdel

BeitragMi, Dez 09, 2009 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab die Lösung gefunden:

BlitzMax: [AUSKLAPPEN]
Global AcceptedFile:Byte Ptr(index:Int)"Win32" = GetProcAddress(DLLHandle, "AcceptedFile")

[...]

Print String.FromCString(AcceptedFile(z))


Danke BtbN Smile
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group