Seite 3 von 4

Re: Prozedur in DLL ausführen: Invalid memory access.

Verfasst: 05.12.2009 20:50
von Kiffi
Mok hat geschrieben:

Code: Alles auswählen

CallDLL_OptionWindow(Random(32)) ;was da drinne steht is ja wurscht... oder?
gut, dann schau Dir meinen Code nochmal genau an.

Mittlerweile bin ich mir nicht mehr so sicher, Dir den Gebrauch
von Threads zu empfehlen, denn hierbei muss man einiges
beachten. Ansonsten fliegt einem der Code alle Nase lang
um die Ohren.

Wieso lagerst Du den Code eigentlich in eine DLL aus? Der
Übersichtlichkeit halber? Nimm doch lieber IncludeFile().

Grüße ... Kiffi

Re: Prozedur in DLL ausführen: Invalid memory access.

Verfasst: 05.12.2009 21:08
von Mok
Kiffi hat geschrieben:Wieso lagerst Du den Code eigentlich in eine DLL aus? Der
Übersichtlichkeit halber?
Ja, eigentlich schon.
Mir ist es lieber, ich habe mein Hauptprogramm in einer extra-Datei und das ganze Zeugs, was mehr oder weniger nur zur Benutzerfreundlichkeit da ist (Optionen, Hilfe usw.) in einer oder mehreren externen Dateien.
Kiffi hat geschrieben:Nimm doch lieber IncludeFile().
Da gibts 2 Probleme:
1.) Der Programmierer will seinen Code nicht weitergeben (also ClosedSource): das ist nicht mein Problem, da das sowieso OpenSource sein soll.
2.) Wenn jemand PureBasic kann, kann er/sie die Datei umändern, wie er/sie will. Da kann man das Programm dann komplett manipulieren und/oder zu Sachen missbrauchen, die es gar nicht können sollte.

Re: Prozedur in DLL ausführen: Invalid memory access.

Verfasst: 05.12.2009 21:21
von ts-soft
Mok hat geschrieben:
Kiffi hat geschrieben:Nimm doch lieber IncludeFile().
Da gibts 2 Probleme:
1.) Der Programmierer will seinen Code nicht weitergeben (also ClosedSource): das ist nicht mein Problem, da das sowieso OpenSource sein soll.
2.) Wenn jemand PureBasic kann, kann er/sie die Datei umändern, wie er/sie will. Da kann man das Programm dann komplett manipulieren und/oder zu Sachen missbrauchen, die es gar nicht können sollte.
Was hat das eine mit dem anderen zun :bounce:
Sorry, aber wird langsam immer lustiger hier :lol:

Re: Prozedur in DLL ausführen: Invalid memory access.

Verfasst: 05.12.2009 22:13
von Mok
Ich weiß ja nicht was ich falsch mache, aber irgendwie redet jeder an jedem anderen total vorei

Re: Prozedur in DLL ausführen: Invalid memory access.

Verfasst: 06.12.2009 00:57
von Kiffi
@Mok:

PB-Code, den man mit IncludeFile() einbindet, wird mit in die Exe
einkompiliert. Du erhältst hast also hinterher nur eine Datei.

Die Variante, die Du beschreibst (Exe lädt zur Laufzeit PB-Code
nach) ist so ohne weiteres in PB überhaupt nicht möglich.

Grüße ... Kiffi

Re: Prozedur in DLL ausführen: Invalid memory access.

Verfasst: 06.12.2009 12:44
von Mok
Da muss ich wohl was missverstanden haben... näheres verschweige ich der Peinlichkeit halber :mrgreen:
====================
So, das Hauptproblem des Topics wäre gelöst, nur bekomme ich jetzt nach jeglichen Zugriffen auf die Include-Datei bei irgendeinem SetGadgetText(#TegtGadget<NUMMER>,StrF(ZAHL,2)," "+UnitName) ein "The specitified Gadget is not initialized."
Ich habe aus der op1.pb einfach eine op1.pbi gemacht, und die ProcedureDLL zu Procedure gemacht. Ich habe auch geschaut, ob eventuell manche Gadgets den gleichen Namen haben, aber in meinen Augen müsste alles korrekt sein :(

Re: Prozedur in DLL ausführen: Invalid memory access.

Verfasst: 06.12.2009 12:47
von Kiffi
Mok hat geschrieben:Ich habe aus der op1.pb einfach eine op1.pbi gemacht, und die ProcedureDLL zu Procedure gemacht. Ich habe auch geschaut, ob eventuell manche Gadgets den gleichen Namen haben, aber in meinen Augen müsste alles korrekt sein :(
was nun mindestens noch fehlt ist die korrekte Enumeration
Deiner Window- und Gadget-Konstanten.

Grüße ... Kiffi

Re: Prozedur in DLL ausführen: Invalid memory access.

Verfasst: 06.12.2009 12:51
von Mok
Kiffi hat geschrieben:was nun mindestens noch fehlt ist die korrekte Enumeration
Deiner Window- und Gadget-Konstanten.

Code: Alles auswählen

;Enumeration im Hauptprogramm
Enumeration
  #MainWindow
EndEnumeration

Enumeration
  #TextGadget_1
  #TextGadget_2
  #TextGadget_3
  #TextGadget_4
  #TextGadget_1a
  #TextGadget_2a
  #TextGadget_3a
  #TextGadget_4a
  #TextGadget_5
  #ButtonGadget_1
  #ButtonGadget_2
EndEnumeration


;Enumeration in op1.pbi (INC_HelpWindow)
  Enumeration
    #Window_1
  EndEnumeration
  
  ;- Gadget Constants
  ;
  Enumeration
    #Text_3
    #Text_4
    #Editor_0
    #Text_5
  EndEnumeration

;Enumeration in op1.pbi (INC_OptionWindow)
  Enumeration
    #Window_0
  EndEnumeration
  
  ;- Gadget Constants
  ;
  Enumeration
    #Text_0
    #Spin_0
    #Text_1
    #Text_2
    #Listview_0
    #Button_0
    #Button_1
  EndEnumeration

Re: Prozedur in DLL ausführen: Invalid memory access.

Verfasst: 06.12.2009 13:00
von Kiffi
Mok hat geschrieben:

Code: Alles auswählen

;Enumeration im Hauptprogramm
[...]
ja, genau das habe ich gemeint. Das musst Du korrigieren.

für die Fenster:

Code: Alles auswählen

Enumeration
  #MainWindow
  #Window_1
  #Window_0
EndEnumeration
für die Gadgets gilt ebenfalls: Alle Gadgets in eine Enumeration.

Grüße ... Kiffi

Re: Prozedur in DLL ausführen: Invalid memory access.

Verfasst: 06.12.2009 13:26
von Mok
OK. Ich habe jetzt alle Window-Konstanten und alle Gadget-Konstanten in eine Enum ins Hauptprogramm gepackt.
Soweit funzt alles super, bis auf das, dass Events in der Include "missverstanden" werden: Wenn ich im Optionen-Dialog auf "OK" klicke, werden zwar alle Daten im Hauptprogramm aktualisiert (also RefreshTime und Unit und UnitName), das Optionen-Fenster bleibt aber offen. Wenn ich jetzt im Optionenfenster auf das das CloseWindow-Gadget (also das "X") klicke, killt das mein ganzes Programm.

Hier nochmals ein Sourcepaket:
RAM.inf Sourcepaket v2