Prozedur in DLL ausführen: Invalid memory access.

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

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

Beitrag 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
a²+b²=mc²
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

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

Beitrag 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.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
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

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

Beitrag 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:
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

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

Beitrag von Mok »

Ich weiß ja nicht was ich falsch mache, aber irgendwie redet jeder an jedem anderen total vorei
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

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

Beitrag 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
a²+b²=mc²
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

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

Beitrag 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 :(
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

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

Beitrag 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
a²+b²=mc²
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

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

Beitrag 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
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

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

Beitrag 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
a²+b²=mc²
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

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

Beitrag 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
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Antworten