Seite 1 von 1

Prototype und Dll

Verfasst: 07.04.2018 18:10
von Olafmagne
Moin moin

Ich habe eine Frage im bezug auf Prototype
In der Referez ist ein Beispiel zu Prototype in der Form:

Code: Alles auswählen

Prototype fr(x.a)
OpenLibrary(0, "D:\PureBasic\OlafNet\fr.dll")
dllFunction.fr = GetFunction(0, "test")
dllFunction(2)
CloseLibrary(0)
Nach einigen 'Experimenten'( mein erstes Prototype) klappt das auch ganz gut.
Da die Function mit <dllFunction()> aufgerufen wird,dachte ich dass das eine gute Möglichkeit wäre,
die Function wie eine normale Anweisung zu nutzen:

Code: Alles auswählen

Prototype de()
OpenLibrary(0, "D:\PureBasic\OlafNet\dtschlib.dll")
Deut.de = GetFunction(0, "Deutsch")
Prototype en()
OpenLibrary(1, "D:\PureBasic\OlafNet\englishlib.dll")
Engl.en = GetFunction(1, "English")
Prototype fr()
OpenLibrary(2, "D:\PureBasic\OlafNet\frenchlib.dll")
Fran.fr = GetFunction(2, "France")
Procedure prozde()
  Deut()
  Debug "de"
EndProcedure
Procedure prozen()
  Engl()
  Debug "en"
EndProcedure
Procedure prozfr()
  Fran()
  Debug"fr"
  EndProcedure
OpenWindow(0,0,0,400,400,"dilltest",#PB_Window_SystemMenu)
ButtonGadget(1, 5, 5, 50,22, "Deutsch")
ButtonGadget(2, 60,5,50,22,"Englisch" ) 
ButtonGadget(3,115,5,50,22,"Franz.") 
BindGadgetEvent(1, @prozde())
BindGadgetEvent(2, @prozen())
BindGadgetEvent(3, @prozfr())
Repeat
  Event=WaitWindowEvent()
 
  Until Event=#PB_Event_CloseWindow
CloseLibrary(0)
CloseLibrary(1)
CloseLibrary(2)
Die drei benötigten Dll's sind natürlich auch vorhanden.
Wenn ich nun den Code ausführen möchte,habe ic sofort die Fehlermeldung:
Zeile 12 : Deut() ist keine Function,Array,Makro oder LinkedList.

Da das Ganze aber mit dem ersten Code oben läuft,stehe ich etwas dumm da.
Kann mir Jemand sagen,wo der Fehler ist?

Danke im vorraus

Re: Prototype und Dll

Verfasst: 07.04.2018 19:33
von Bisonte
So wie du Dir das vorstellst funktioniert das nur mit Strukturen.

Also machst du sowas wie :

Code: Alles auswählen

Prototype proto_DLLAufruf()

Structure struct_sprache
  DE.proto_DLLAufruf
  EN.proto_DLLAufruf
  FR.proto_DLLAufruf
EndStructure

Global Sprache.struct_sprache

OpenLibrary(0, "D:\PureBasic\OlafNet\dtschlib.dll")
Sprache\DE = GetFunction(0, "Deutsch")
Prototype en()
OpenLibrary(1, "D:\PureBasic\OlafNet\englishlib.dll")
Sprache\EN = GetFunction(1, "English")
Prototype fr()
OpenLibrary(2, "D:\PureBasic\OlafNet\frenchlib.dll")
Sprache\FR = GetFunction(2, "France")
Procedure prozde()
  Sprache\DE()
  Debug "de"
EndProcedure
Procedure prozen()
  Sprache\EN()
  Debug "en"
EndProcedure
Procedure prozfr()
  Sprache\FR()
  Debug"fr"
EndProcedure
OpenWindow(0,0,0,400,400,"dilltest",#PB_Window_SystemMenu)
ButtonGadget(1, 5, 5, 50,22, "Deutsch")
ButtonGadget(2, 60,5,50,22,"Englisch" )
ButtonGadget(3,115,5,50,22,"Franz.")
BindGadgetEvent(1, @prozde())
BindGadgetEvent(2, @prozen())
BindGadgetEvent(3, @prozfr())
Repeat
  Event=WaitWindowEvent()
  
Until Event=#PB_Event_CloseWindow
CloseLibrary(0)
CloseLibrary(1)
CloseLibrary(2) 

Re: Prototype und Dll

Verfasst: 07.04.2018 19:47
von Sirius-2337
Bisonte hat geschrieben:So wie du Dir das vorstellst funktioniert das nur mit Strukturen.
Geht auch ohne Struktur. Einfach mit 'Global' oder 'Shared'.

Code: Alles auswählen

Prototype de()
OpenLibrary(0, "D:\PureBasic\OlafNet\dtschlib.dll")
Global Deut.de = GetFunction(0, "Deutsch")
Prototype en()
OpenLibrary(1, "D:\PureBasic\OlafNet\englishlib.dll")
Engl.en = GetFunction(1, "English")
Prototype fr()
OpenLibrary(2, "D:\PureBasic\OlafNet\frenchlib.dll")
Global Fran.fr = GetFunction(2, "France")
Procedure prozde()
  Deut()
  Debug "de"
EndProcedure
Procedure prozen()
  Shared Engl.de
  Engl()
  Debug "en"
EndProcedure
Procedure prozfr()
  Fran()
  Debug"fr"
  EndProcedure
OpenWindow(0,0,0,400,400,"dilltest",#PB_Window_SystemMenu)
ButtonGadget(1, 5, 5, 50,22, "Deutsch")
ButtonGadget(2, 60,5,50,22,"Englisch" )
ButtonGadget(3,115,5,50,22,"Franz.")
BindGadgetEvent(1, @prozde())
BindGadgetEvent(2, @prozen())
BindGadgetEvent(3, @prozfr())
Repeat
  Event=WaitWindowEvent()
 
  Until Event=#PB_Event_CloseWindow
CloseLibrary(0)
CloseLibrary(1)
CloseLibrary(2)

Re: Prototype und Dll

Verfasst: 07.04.2018 20:02
von Olafmagne
Hallo

Das isset!!!!
Ich hatte allerdings versucht,denPrototype Global zu deklaerieren,
also:

Code: Alles auswählen

Global Prototype de()
OpenLibrary(0, "D:\PureBasic\OlafNet\dtschlib.dll")
Deut.de = GetFunction(0, "Deutsch")
Das wollte aber nicht so richtig

Danke,thanks und merci

Olaf