Externe Calls - Umwandlung von C nach Purebasic
Externe Calls - Umwandlung von C nach Purebasic
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)();
----------------
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)();
----------------
Hallo Andre,Andre hat geschrieben:Wenn Du DLLs in PureBasic verwenden willst, solltest Du auf jeden Fall die Befehle der 'Library' -Lib im Referenz-Handbuch ansehen.
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
Um extern must du dich nicht weiter kümmern man braucht es in C/C++ wenn man mit mehreren Dateien arbeitet, also:
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++ extern winampGeneralPurposePlugin *gen_plugins[256];
PB Dim gen_plugins.winampGeneralPurposePlugin(256)
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 ???
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
Hallo Martin,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:Wenn es typedef in PB gibt das habe ich es voll übersehen.Code: Alles auswählen
C/C++ extern winampGeneralPurposePlugin *gen_plugins[256]; PB Dim gen_plugins.winampGeneralPurposePlugin(256)
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 ???
tausend Dank, hast mir sehr geholfen

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
meinst du dieses?MARTIN hat geschrieben:Wenn es typedef in PB gibt das habe ich es voll übersehen.
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).
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Nein.
Mit Deftyp kannst einem Datentyp keinen neuen Namen geben, kannst nur Variablen eines Datentyps definieren.
Also das geht nicht:
Mit Deftyp kannst einem Datentyp keinen neuen Namen geben, kannst nur Variablen eines Datentyps definieren.
Also das geht nicht:
Code: Alles auswählen
Deftype.l vierbytevariable
variable1.vierbytevariable
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22