Prototype und Dll

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Prototype und Dll

Beitrag 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
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Prototype und Dll

Beitrag 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) 
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Sirius-2337
Beiträge: 71
Registriert: 29.05.2010 20:55

Re: Prototype und Dll

Beitrag 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)
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Prototype und Dll

Beitrag 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
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Antworten