Seite 1 von 2

Prototype

Verfasst: 20.02.2013 21:16
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

Re: Prototype

Verfasst: 20.02.2013 21:27
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

Re: Prototype

Verfasst: 20.02.2013 21:52
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

Re: Prototype

Verfasst: 20.02.2013 22:09
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.

Re: Prototype

Verfasst: 20.02.2013 22:24
von HeX0R
Mach doch einfach mal den Debugger an, dann siehst du doch, wo es klemmt.

Re: Prototype

Verfasst: 20.02.2013 23:04
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

Re: Prototype

Verfasst: 20.02.2013 23:25
von Kiffi
also der Code, den Du da oben gepostet hast, funktioniert bei mir ohne Probleme.

Grüße ... Kiffi

Re: Prototype

Verfasst: 20.02.2013 23:40
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

Re: Prototype

Verfasst: 20.02.2013 23:46
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??

Re: Prototype

Verfasst: 20.02.2013 23:53
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