Seite 1 von 1
Externe Calls - Umwandlung von C nach Purebasic
Verfasst: 15.01.2005 20:26
von TheMaster
Hallo Zusammen,
als Newbie habe ich eine Frage: Könnte mir jemand erklären, wie ich externe Calls zu einer DLL (Code liegt in C++ vor (siehe unten)) in PB deklariere? Vielen Dank!!!
Code:
----------------
extern winampGeneralPurposePlugin *gen_plugins[256];
typedef winampGeneralPurposePlugin * (*winampGeneralPurposePluginGetter)();
----------------
Verfasst: 15.01.2005 20:34
von Andre
Wenn Du DLLs in PureBasic verwenden willst, solltest Du auf jeden Fall die Befehle der 'Library' -Lib im Referenz-Handbuch ansehen.
Verfasst: 16.01.2005 01:57
von TheMaster
Andre hat geschrieben:Wenn Du DLLs in PureBasic verwenden willst, solltest Du auf jeden Fall die Befehle der 'Library' -Lib im Referenz-Handbuch ansehen.
Hallo Andre,
danke für den Tipp! Die Funktionen via Call aufzurufen oder die eigenen Prozeduren zuschreiben ist nicht das besonders große Problem, aber da ich leider kein C++ kann, habe ich halt noch ein wenig Probleme Teile davon in PB umzusetzen. Nachfolgend einmal das, was ich bisher umsetzen konnte, wobei die beiden markierten Teile eben fehlen.
Vielleicht bin ich ja auch einfach nur zu blöd
Original: in C++
Code: Alles auswählen
typedef struct {
int version;
char *description;
int (*init)();
void (*config)();
void (*quit)();
HWND hwndParent;
HINSTANCE hDllInstance;
} winampGeneralPurposePlugin;
#define GPPHDR_VER 0x10
extern winampGeneralPurposePlugin *gen_plugins[256];
typedef winampGeneralPurposePlugin * (*winampGeneralPurposePluginGetter)();
In PB:
Code: Alles auswählen
Structure winampGeneralPurposePlugin
version.w
description.s
Init.l ;##
Config.l ;## These pointers to standart routines.
Quit.l ;##
hwndParent.l ;## Filled by Winamp .
hDllInstance.l
EndStructure
#GPPHDR_VER 0x10
;
extern winampGeneralPurposePlugin *gen_plugins[256];
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
; Hier mit weiß ich leider noch gar nichts anzufangen1
;
typedef winampGeneralPurposePlugin * (*winampGeneralPurposePluginGetter)();
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
; Hier mit weiß ich leider noch gar nichts anzufangen1
Procedure Init(*winampGeneralPurposePlugin)
MessageBox_(*hwndParent,"Init !","Init by Pure Basic",#MB_OK)
EndProcedure
Procedure Config(*winampGeneralPurposePlugin)
MessageBox_(*hwndParent,"Config !","Config",#MB_OK)
EndProcedure
Procedure Quit(*winampGeneralPurposePlugin)
MessageBox_(*hwndParent,"Bye, Bye!","Quit",#MB_OK)
EndProcedure
Verfasst: 16.01.2005 03:43
von MARTIN
Um extern must du dich nicht weiter kümmern man braucht es in C/C++ wenn man mit mehreren Dateien arbeitet, also:
Code: Alles auswählen
C/C++ extern winampGeneralPurposePlugin *gen_plugins[256];
PB Dim gen_plugins.winampGeneralPurposePlugin(256)
Wenn es typedef in PB gibt das habe ich es voll übersehen.
Das Schlösselwort typedef lässt einfach ein Dateintyp mit einem neuen aussagekräftigen Namen versehen. Mehr tut es nicht.
Code: Alles auswählen
C/C++ typedef winampGeneralPurposePlugin (*winampGeneralPurposePluginGetter)();
PB ???
Verfasst: 16.01.2005 11:38
von TheMaster
MARTIN hat geschrieben:Um extern must du dich nicht weiter kümmern man braucht es in C/C++ wenn man mit mehreren Dateien arbeitet, also:
Code: Alles auswählen
C/C++ extern winampGeneralPurposePlugin *gen_plugins[256];
PB Dim gen_plugins.winampGeneralPurposePlugin(256)
Wenn es typedef in PB gibt das habe ich es voll übersehen.
Das Schlösselwort typedef lässt einfach ein Dateintyp mit einem neuen aussagekräftigen Namen versehen. Mehr tut es nicht.
Code: Alles auswählen
C/C++ typedef winampGeneralPurposePlugin (*winampGeneralPurposePluginGetter)();
PB ???
Hallo Martin,
tausend Dank, hast mir sehr geholfen

Verfasst: 16.01.2005 17:08
von Kaeru Gaman
MARTIN hat geschrieben:Wenn es typedef in PB gibt das habe ich es voll übersehen.
meinst du dieses?
Syntax
Deftype.<Typ> [<Variable>, <Variable>,...]
Beschreibung
Wenn keine <Variablen> angegeben werden, wird DefType benutzt, um den Standardtyp ("Default type") für zukünftige typenlose Variablen festzulegen. Der anfängliche Standardtyp ist Long (.l).
Verfasst: 16.01.2005 18:00
von MARTIN
Nein.
Mit Deftyp kannst einem Datentyp keinen neuen Namen geben, kannst nur Variablen eines Datentyps definieren.
Also das geht nicht:
Verfasst: 16.01.2005 18:43
von Kaeru Gaman
verstehe...
da gäbe es dann nen umweg über Structure,
aber dann muss beim Variablen-Aufruf später immer ein .irgentwas folgen
