Prototype

Für allgemeine Fragen zur Programmierung mit PureBasic.
Georg
Beiträge: 29
Registriert: 17.06.2005 19:04

Prototype

Beitrag von Georg »

Hallo,

ich habe ein Problem mit Prototype.
Hier der Code:

Code: Alles auswählen

EnableExplicit
EnableExplicit

Global Result

Enumeration
  #WndMain
EndEnumeration  

Enumeration
  #gBtn_1
  #gBtn_2
  #gStr_1
EndEnumeration 

Enumeration 
  #DLL
EndEnumeration 
; 
Prototype.i ProtoFT_Open(iDevice , ftHandle)
Prototype.i ProtoFT_OpenEx (pvArg1$,dwFlags,ftHandle)
Prototype.i ProtoFT_GetDeviceInfo(ftHandle,pftDevice,pdeviceID,pSerialNumber$,pDescription$,dummy)
Prototype.i ProtoFT_Close(ftHandle)
Prototype.i ProtoFT_SetBaudRate(ftHandle, ftBautrate)
Prototype.i ProtoFT_SetDataCharacteristics(ftHandle, uWordLength,uStopBits,uParity)
Prototype.i ProtoFT_SetTimeouts(ftHandle,dwReadTimeout, dwWriteTimeout)
Prototype.i ProtoFT_Write(ftHandle, lpBufferW,Lenge ,Written)
Prototype.i ProtoFT_Read(ftHandle,  lpBufferR, Lenge ,Returned)
Prototype.i ProtoFT_SetEventNotification(ftHandle,EventMask,hEvent)
Prototype.i ProtoFT_FT_GetStatus(ftHandle, lpdwAmountInRxQueue,lpdwAmountInTxQueue, lpdwEventStatus)

Result = OpenLibrary(#DLL, "ftd2xx.dll")

If Result = 0
 MessageRequester("EA-EL 3160-60","ftd2xx.dll konnte nicht geladen werden" + Chr(10) + "Das Programm wird beendet",#PB_MessageRequester_Ok)
 End
EndIf

; 
Global FT_Open.ProtoFT_Open = GetFunction(#DLL,"FT_Open")
Global FT_Close.ProtoFT_Close = GetFunction(#DLL,"FT_Close")
Global FT_GetDeviceInfo.ProtoFT_GetDeviceInfo = GetFunction(#DLL,"FT_GetDeviceInfo")
; Global FT_SetBaudRate.ProtoFT_SetBaudRate = GetFunction(#DLL,"FT_SetBaudRate")
; Global FT_OpenEx.ProtoFT_OpenEx = GetFunction(#DLL,"FT_OpenEx") 
; Global FT_SetDataCharacteristics.ProtoFT_SetDataCharacteristics = GetFunction(#DLL,"FT_SetDataCharacteristics")
; Global FT_SetTimeouts.ProtoFT_SetTimeouts = GetFunction(#DLL,"FT_SetTimeouts")
; Global FT_Write.ProtoFT_Write = GetFunction(#DLL,"FT_Write")
; Global FT_Read.ProtoFT_Read = GetFunction(#DLL,"FT_Read")
; Global FT_SetEventNotification.ProtoFT_SetEventNotification = GetFunction(#DLL,"FT_SetEventNotification")
; Global FT_GetStatus.ProtoFT_FT_GetStatus = GetFunction(#DLL,"FT_GetStatus")


CloseLibrary(#DLL)
 


OpenWindow(#WndMain, 300, 200, 500, 500, "EA-EL 3160-60", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget);|#PB_Window_Invisible)

ButtonGadget(#gBtn_1, 10,10,72,24,"")
ButtonGadget(#gBtn_2,100,10,72,24,"")
StringGadget(#gStr_1,200,10,200,24,"")

;HideWindow(#WndMain, #False)


Repeat
  
  Select WaitWindowEvent() 
      
    Case #PB_Event_CloseWindow
      Select EventWindow() 
        Case #WndMain  
          End

      EndSelect  
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #gBtn_1
          
        Case #gBtn_2
          
      EndSelect
      
  EndSelect 
  
ForEver
End

Die DLL ist von FTDI.
http://www.ftdichip.com/Drivers/D2XX.htm

Wenn ich das Programm starte ,wird es ohne das Fenster anzeigen sofort beendet.
Wird aber der MessageRequester aus kommentiert, funktionert alles.
Mit PB 4.51 funktioniert es auch mit MessageRequester.
Was mache ich falsch?
Ich hoffe Ihr könnt mir helfen

Gruß
Georg

Windows XP Prof. SP3
PB 5.10
Zuletzt geändert von Georg am 20.02.2013 22:02, insgesamt 1-mal geändert.
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: Prototype

Beitrag von ts-soft »

Du verwendest eine Enumeration für 3 verschiedene Objekte, nämlich Fenster, Gadgets und Libraries.
Das ist nicht gerade Optimal :wink:
Die ID für die DLL ist #DLL und hat den Wert 4, Du verwendet aber bei GetFunction den Wert 0 statt der
Konstanten!

Mehr kann ich erstmal nicht sehen, die DLL werde ich mir nicht laden, ist ja sowas wie ein Treiber, kommt
mir nicht auf das System.

Gruß
Thomas
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.
Bild
Georg
Beiträge: 29
Registriert: 17.06.2005 19:04

Re: Prototype

Beitrag von Georg »

OK, habe das Programm geändert. Enumeration für das Fenster ,die Gadgets und die Library ID.
0 gegen #DLL getauscht. Leider ändert es nichts am Verhalten.
Wenn ich aber nur einen Pointer mit GetFunction zuweise, funktioniert es.
Ohne #PB_Window_Invisible und HideWindow kann ich 3 Pointer zuweisen.
Wo ist das Problem?

Gruß
Georg
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Prototype

Beitrag von edel »

CloseLibrary darfst du erst dann aufrufen, wenn du keine der Funktionen mehr benutzen moechtest.
Warum bei dir allerdings kein Fenster angezeigt wird, kann ich nicht nachvollziehen, bei mir funktioniert es normal.
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Prototype

Beitrag von HeX0R »

Mach doch einfach mal den Debugger an, dann siehst du doch, wo es klemmt.
Georg
Beiträge: 29
Registriert: 17.06.2005 19:04

Re: Prototype

Beitrag von Georg »

Erstmal Danke für Eure Antworten.

Edel
ohne CloseLibrary gleiches Problem.
Hast Du die Auskommentierungen entfernt?

HeXOR

Mit Beiden Debugger getestet. Kann mit Debugger Compilation0 nicht ausführen.

Wenn ich aber nach OpenLibrary ein Delay(1) einfüge, dann funktioniert es.
Das würde ja bedeuten, das OpenLibrary nicht wartet bis die ganze DLL eingelesen ist.
Oder sehe ich das falsch.

Gruß
Georg
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Prototype

Beitrag von Kiffi »

also der Code, den Du da oben gepostet hast, funktioniert bei mir ohne Probleme.

Grüße ... Kiffi
a²+b²=mc²
Georg
Beiträge: 29
Registriert: 17.06.2005 19:04

Re: Prototype

Beitrag von Georg »

Auch ohne die Auskommentierungen und mit #PB_Window_Invisible und HideWindow?
Wenn das so ist, werde ich wohl ein Windows Problem haben.
Aber mit PB4.30 funktioniert es. Merkwürdig.

Gruß
Georg
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Prototype

Beitrag von HeX0R »

Georg hat geschrieben:Mit Beiden Debugger getestet. Kann mit Debugger Compilation0 nicht ausführen.
Wie muss ich das denn verstehen?

Du kopierst den Code da oben in deine IDE, aktivierst den Käfer, drückst F5 und dann kommt die o.g. Meldung raus??
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Prototype

Beitrag von Kiffi »

Georg hat geschrieben:Auch ohne die Auskommentierungen und mit #PB_Window_Invisible und HideWindow?
ja, keine Probleme.
Georg hat geschrieben:Mit Beiden Debugger getestet. Kann mit Debugger Compilation0 nicht ausführen.
Hier scheint jemand aktuell das gleiche Problem zu haben: http://www.purebasic.fr/english/viewtop ... =4&t=53591

(ich tippe ebenfalls auf nen Virenscanner)

Grüße ... Kiffi
a²+b²=mc²
Antworten