Hallo Leute,
ich habe da ein Problem, ich habe mit PB 3.94 eine DLL geschrieben. Diese wird im Verzeichniss des zugehörigen Programms gespeichert.
Wenn ich das ganze unter ME laufen lasse funzt es. Wenn es unter XP gestartet wird, dann bleibt die Anwendung stecken. Es rührt sich nichts.
Ich dache es liegt an einer Procedure in der DLL, da diese ein Window auf dem Desktop produziert. War es aber nicht. Sobald man die DLL öffnet, bleibt das Programm hängen.
Was mache ich da falsch?
Danke für die Hilfe!
GRUSS
INGO
Purebasic DLL und Windows XP
Purebasic DLL und Windows XP
Ein Computer gehorcht Deinen Befehlen, nicht Deinen Absichten!
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Vielleicht sorgste dafür, der der Pfad deiner Anwendung auch zum CurrentDir wird
Für den Rest gibts ne Suchfunktion

Für den Rest gibts ne Suchfunktion
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Hallo,
Du hast Recht, vielleicht ist das eine gute Idee, aber bevor ich es bei Tips und Tricks einstelle, sollten wir mal testen ob ich nur einen Nagel im Kopf habe, oder es an meiner Maschine liegt.
Also versuch.dll und versuch_DLL_starten laufen auf meinem Noteboock mit Win ME föllig klaglos!
Wenn ich den Versuch unter XP mache, dann bleibt das Programm versuch_DLL_starten hängen!!! Auch im PB-Compiler! In der IDE steht nur "Executable gestartet" danach rührt sich nix mehr bis man das Programm anhält.
IDE und Compiler sowie alle anderen Anwendungen laufen weiter!
Ändere ich nun den Code in der DLL (so_geht_es_dann) läuft es auch unter XP.
Wer möchte kann es ja mal testen ob er die gleiche Fehler erscheinung hat. Damit man testen kann hier noch die Eckdaten: PB 3.94 XP SP2 Compiler: debugger eingeschaltet, XP Skin-Unterstützung eingeschaltet, Alle CPU´s
Diese beiden laufen bei mir nur unter ME:
versuch.dll
verusch_dll_starten.pb
Diese beiden laufen bei mir unter XP und ME
so_geht_es_dann.dll
so_geht_es_dann_dll_starten.pb
GRUSS
Ingo
Du hast Recht, vielleicht ist das eine gute Idee, aber bevor ich es bei Tips und Tricks einstelle, sollten wir mal testen ob ich nur einen Nagel im Kopf habe, oder es an meiner Maschine liegt.
Also versuch.dll und versuch_DLL_starten laufen auf meinem Noteboock mit Win ME föllig klaglos!
Wenn ich den Versuch unter XP mache, dann bleibt das Programm versuch_DLL_starten hängen!!! Auch im PB-Compiler! In der IDE steht nur "Executable gestartet" danach rührt sich nix mehr bis man das Programm anhält.
IDE und Compiler sowie alle anderen Anwendungen laufen weiter!
Ändere ich nun den Code in der DLL (so_geht_es_dann) läuft es auch unter XP.
Wer möchte kann es ja mal testen ob er die gleiche Fehler erscheinung hat. Damit man testen kann hier noch die Eckdaten: PB 3.94 XP SP2 Compiler: debugger eingeschaltet, XP Skin-Unterstützung eingeschaltet, Alle CPU´s
Diese beiden laufen bei mir nur unter ME:
versuch.dll
Code: Alles auswählen
Dim wert_feld.w(10)
ProcedureDLL Versuch_Funktion_1(wert.w, position.w)
wert_feld(position) = wert
MessageRequester("Hallo", "Der Wert: "+Str(wert)+" wurde an die Position: " + Str(position) + " eingetragen", 0)
EndProcedure
ProcedureDLL.w Versuch_Funktion_2(position.w)
wert.w = wert_feld(position)
ProcedureReturn wert
EndProcedure
Code: Alles auswählen
If OpenLibrary(0, "D:\Basic\Projekte\testareal\versuch.dll")
CallFunction(0, "Versuch_Funktion_1", 100, 3)
Delay (1000)
ergebnis.w = CallFunction(0, "Versuch_Funktion_2", 3)
Debug ergebnis
CloseLibrary(0)
Else
MessageRequester("FEHLER","DLL konnte nicht geöffnet werden!",0)
EndIf
so_geht_es_dann.dll
Code: Alles auswählen
Structure array
wert_feld.w[10]
EndStructure
Global feld.array
ProcedureDLL Versuch_Funktion_1(wert.w, position.w)
feld\wert_feld[position] = wert
MessageRequester("Hallo", "Der Wert: "+Str(wert)+" wurde an die Position: " + Str(position) + " eingetragen", 0)
EndProcedure
ProcedureDLL.w Versuch_Funktion_2(position.w)
wert.w = feld\wert_feld[position]
ProcedureReturn wert
EndProcedure
Code: Alles auswählen
If OpenLibrary(0, "D:\Basic\Projekte\testareal\so_geht_es_dann.dll")
CallFunction(0, "Versuch_Funktion_1", 100, 3)
Delay (1000)
ergebnis.w = CallFunction(0, "Versuch_Funktion_2", 3)
Debug ergebnis
CloseLibrary(0)
Else
MessageRequester("FEHLER","DLL konnte nicht geöffnet werden!",0)
EndIf
Ingo
Ein Computer gehorcht Deinen Befehlen, nicht Deinen Absichten!