Notation dll Deklaration

Anfängerfragen zum Programmieren mit PureBasic.
six1
Beiträge: 31
Registriert: 10.11.2009 14:51
Kontaktdaten:

Re: Notation dll Deklaration

Beitrag von six1 »

@H.Brill,
nein, es läuft rudimentär, die Hardware ist als "Protokoll converter" im Gerätemanager unter USB-Controller eingetragen.
Je nachdem, welchem Atmel Chip man einsetzt, hat man bis zu drei parallele Ports und einen seriellen Port zur Verfügung.
Um zu prüfen, ob die Hardware noch connected ist, polle ich im 200ms Takt und frage einen Portzustand ab.

Ich kämpfe aber gerade mit dem visual Designer.... :freak:
Ich hatte mir ein eigenes Projektfile angelegt, um nur die Form (Window) zu entwickeln und habe dann immer die Änderungen in mein eigentliches Projekt hinein kopiert.
Nachdem ich so einen "Container" eingesetzt hatte und das nicht funktionierte Komponenten (Gadgets) darauf zu platzieren, habe ich das händisch im Code vollzogen. Jetzt mag er mit Fehlerabbruch dieses Projekt nicht mehr öffnen...

stay tuned :mrgreen:
Gruß, Michael

There are 10 types of people, those that understand binary and those that don't!
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Notation dll Deklaration

Beitrag von H.Brill »

Mit den Projekten kann ich mich auch nicht so anfreunden.
Mache das gerne noch immer von Hand zu Fuß wie früher.
Ich hab immer ne einfache Musterdatei, in der ich dann die
Gadgets entweder rauswerfe und /oder neue dazu mache.
Danach direkt die Event-Behandlung und zumind. Kommentar
dazu ; Button x gedrückt oder sowas.
halt sowas :

Code: Alles auswählen

Global Quit.l 
If OpenWindow(0, 10, 10, 400, 250, "Muster", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
       ButtonGadget(1,5, 10,100, 20, "Ende")
       ButtonGadget(2,120, 10, 100, 20, "Info")
       ListViewGadget(3, 10, 60, 350, 120, #PB_ListView_ClickSelect)
       For a = 1 To 12
           AddGadgetItem (3, -1, "Item " + Str(a) + " of the Listview")   ; definieren des Listview-Inhalts
       Next
       SetGadgetState(3, 9)    ; wir setzen (beginnend bei 0) den zehnten Eintrag als aktiven
   Quit = 0
   Repeat
   ; Hier kommt die Event - Schleife
    EventID.l = WaitWindowEvent()
    ; Event abwarten und auswerten
    Select EventID
       Case #PB_Event_CloseWindow
          ; X im rechts oben für Schließen gedrückt.
          Quit = 1
       Case #PB_Event_Gadget ; Event für Gadgets
         Select EventGadget()    
            Case 1
               ; Ende - Button gedrückt
               Quit = 1
            Case 2
             ; Info - Button gedrückt
             MessageRequester("Info", "Hallo !", #PB_MessageRequester_Ok)   
       EndSelect
    EndSelect
   Until Quit = 1 Or EventID = #PB_Event_CloseWindow
EndIf   
End
öffne doch deine Quellcodedatei mit nem Editor,
markieren u. kopieren, Datei->Neu im PB-Editor
und reinkopieren.
PB 6.10
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: Notation dll Deklaration

Beitrag von PureLust »

Hallo six1, ...

auch von mir erst mal ein "willkommen im Forum" und bei PB. ;)
six1 hat geschrieben:Ich kämpfe aber gerade mit dem Visual Designer.... :freak:
Jupp, das kenn' ich. :mrgreen:

Was den Visual Designer angeht, so kannst Du Dir (meiner Meinung nach) jegliche Mühe sparen Dich darin ein zu arbeiten.
Der Visual Designer (VD) ist nun mal leider nicht wirklich als Bestandteil von PureBasic anzusehen, sondern eher als eine "kostenlose, aber nicht gepflegte Beigabe".
Er ist (meines Wissens nach) vor langer Zeit einmal von einem, bzw. drei PB-Usern (Beriko, AlphaSND und Fr34k) entwickelt worden.
Die letzte Version ist jedoch bereits von 2006, wird schon seit langer Zeit nicht mehr gepflegt und ist leider extrem instabil.
Wie Du bereits beschrieben hast, ist der VD z.B. vollkommen unbrauchbar, sobald es in den Bereich Container oder Ähnliches geht und zerschießt einem das komplette VD-Projekt. :(

Solltest Du jedoch an die Benutzung von visuellen Form-Designern gewöhnt sein (ich nehme mal an, dass die IDE von Delphi so etwas ebenfalls beinhaltet) so gibt es für PB allerdings ebenfalls einen hervorragenden, stabilen und vor allem sehr gut supporteten GUI-Designer als Anternative zum mitgelieferten VD:

PureFORM von Gnozal !!!

Auf der Homepage von Gnozal sind noch weitere - bei der Entwicklung mit Purebasic - sehr hilfreiche Projekte zu finden, wie z.B. diverse Tools, Plugins, UserLibraries und der jaPBe - eine wirklich gute Alternative zur PB-IDE.
(An dieser Stelle mal ein RIESEN Dankeschön von mir an Philippe (Gnozal), für seine ganzen tollen Beiträge und sein unglaubliches Engagement für PB und die Community !!!)

Die IDE-Alternative jaPBe wird von vielen sogar als die bessere PB-IDE angesehen da sie einige tolle Funktionen hat die die originale IDE leider bislang vermissen lies. In der kommenden 4.40er IDE von PureBasic hat sich allerdings wirklich einiges getan und so hat sie sich in vielen Punkten schon dem Funktionsumfang des jaPBe angenähert.
Die perfekte Zusammenarbeit zwischen jaPBe (der IDE) und PureFORM (dem GUI-Designer) ist meiner Meinung nach unbezahlbar und macht diese Kombination wirklich zu einem idealen Team.
So kannst Du z.B. direkt im GUI-Designer den auszuführenden Code für ein bestimmtes Ereignis editieren (z.B. für einen Mausklick auf einen Button), oder auch Änderungen an der GUI (hinzufügen, verschieben oder auch löschen von Gadgets) werden auf Knopfdruck sofort in Deinen Sourcecode übertragen.

Solltest Du also viel Wert auf eine komfortable und zuverlässige GUI-Entwicklung legen, so solltest Du mal einen Blick auf die Tools von Gnozal werfen und evtl. mal über eine Kombi von PureFORM und jaPBe nachdenken - die Einarbeitung lohnt sich wirklich !!!

In diesem Sinne .... viel Spaß und Erfolg mit PureBasic, ... ;)
Grüße, PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
six1
Beiträge: 31
Registriert: 10.11.2009 14:51
Kontaktdaten:

Re: Notation dll Deklaration

Beitrag von six1 »

SUPER TIPP!!!
Ich bin zumindest mal darüber froh, dass die Comunity hier aktiv ist :mrgreen:
Was nützt der beste Compiler, wenn keiner mit arbeitet!

Werde das nachher ausprobieren und das Gesamtprojekt dann vorstellen...

Danke nochmal!


Michael
Gruß, Michael

There are 10 types of people, those that understand binary and those that don't!
six1
Beiträge: 31
Registriert: 10.11.2009 14:51
Kontaktdaten:

Re: Notation dll Deklaration

Beitrag von six1 »

:? "Es"mag nicht...

Code: Alles auswählen

...
  Global RS232BufferLength.l
  Dim InputRS232Data.b(100) ;Buffer Empfang Serielle  array
...
;max zur Verfügung stehenden Buffer ermitteln
RS232BufferLength= ArraySize(InputRS232Data())
; <--- bis hierher alles ok
--> Crash -->  If (DoGetRS232Buffer(@InputRS232Data(), @RS232BufferLength) = NO_ERROR) 
...
da hängt er sich mit "[ERROR] Invalid memory access. [read error at address 132)"

Ich denke es hängt an der Übergabe der Array Struktur.

nur mal zum Vergleich, wie es in Delphi aussieht und so funktioniert:

Code: Alles auswählen

//...Global...
  InputRS232Data:array[0..10000]of byte;
...
Procedure...
var
  DataLength:integer;
begin
  DataLength:=SizeOf(InputRS232Data);
  if (DoGetRS232Buffer(InputRS232Data,DataLength)<>NO_ERROR) then
...
hmmm...
Gruß, Michael

There are 10 types of people, those that understand binary and those that don't!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Notation dll Deklaration

Beitrag von Kaeru Gaman »

die Bufferlänge musst du als Wert übergeben, nicht seinen pointer...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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: Notation dll Deklaration

Beitrag von ts-soft »

ArraySize enthält nicht den nullten :mrgreen: , muß also evtl. um 1 erhöht werden.
RS232BufferLength wird bestimmt ByValue übergeben, also ohne @.
NO_ERROR ist eine Konstante und sieht in PB so aus: #NO_ERROR

Gruß
Thomas

PS: Gewöhn Dir am besten gleich an, als erste Zeile EnableExplicit anzugeben, dann hätteste gleich
bemerkt, das der Compiler NO_ERROR nicht kennt. Als Delphi Programmierer sollteste das deklarieren
von Variablen ja gewohnt sein :mrgreen: (Pascal ist da sehr genau und sehr Pingelig was die Typen
angeht).
Zuletzt geändert von ts-soft am 11.11.2009 22:33, insgesamt 1-mal geändert.
six1
Beiträge: 31
Registriert: 10.11.2009 14:51
Kontaktdaten:

Re: Notation dll Deklaration

Beitrag von six1 »

hmmm,

RS232BufferLength erhält aber die Anzahl gelesener Zeichen zurück! Demnach müsste es wieder ein Pointer darauf sein.

mit ArraySize +1 geht's sicherlich auch nicht, da ich die Size derzeit nicht ausnutze :mrgreen: aber danke für den Tipp.

nach Umsetzung der Tipps bleibt der gleiche Fehler...
Gruß, Michael

There are 10 types of people, those that understand binary and those that don't!
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: Notation dll Deklaration

Beitrag von ts-soft »

six1 hat geschrieben:RS232BufferLength erhält aber die Anzahl gelesener Zeichen zurück! Demnach müsste es wieder ein Pointer darauf sein.
In Deinem Delphi Code übergibste aber auch den Wert und nicht den Pointer!
six1
Beiträge: 31
Registriert: 10.11.2009 14:51
Kontaktdaten:

Re: Notation dll Deklaration

Beitrag von six1 »

:mrgreen: aber in meinem Delphi Programm muss ich auch keine Pointer übergeben, wenn ich die Ports abfrage... in PB schon :lol: und jetzt? :shock:
Gruß, Michael

There are 10 types of people, those that understand binary and those that don't!
Antworten