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
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
verusch_dll_starten.pb
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
Diese beiden laufen bei mir unter XP und ME
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
so_geht_es_dann_dll_starten.pb
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
GRUSS
Ingo