C struct zu Pb

Fragen zu allen anderen Programmiersprachen.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

C struct zu Pb

Beitrag von Andreas21 »

Hi,

Ich bin am versuche eine Sruc von C zu PB zu übertragen.

Code: Alles auswählen

/* Functions exported to plugin from main binary */
struct TS3Functions {
	unsigned int (*getClientLibVersion)(char** result);
	unsigned int (*spawnNewServerConnectionHandler)(int port, uint64* result);
	unsigned int (*destroyServerConnectionHandler)(uint64 serverConnectionHandlerID);

	/* Error handling */
	unsigned int (*getErrorMessage)(unsigned int errorCode, char** error);

	/* Memory management */
	unsigned int (*freeMemory)(void* pointer);

	/* Logging */
	unsigned int (*logMessage)(const char* logMessage, enum LogLevel severity, const char* channel, uint64 logID);

	/* Sound */
	unsigned int (*getPlaybackDeviceList)(int modeID, char**** result);
	unsigned int (*getPlaybackModeList)(char**** result);
	unsigned int (*getCaptureDeviceList)(int modeID, char**** result);
	unsigned int (*getCaptureModeList)(char**** result);
	unsigned int (*getDefaultPlaybackDevice)(int modeID, char*** result);
	unsigned int (*getDefaultPlayBackMode)(int* result);
	unsigned int (*getDefaultCaptureDevice)(int modeID, char*** result);
.........
Nun weis ich nicht wie ich das deuten soll:

Code: Alles auswählen

unsigned int (*getClientLibVersion)(char** result);
Und es dann auch aufruffen kann.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: C struct zu Pb

Beitrag von ts-soft »

Bist Du sicher, das es sich um C-Source handelt? Oder ist es nicht eher C++ Source?
Link zu der Header-Datei wäre auch hilfreich.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: C struct zu Pb

Beitrag von edel »

Das sind in PB Prototypen.

Code: Alles auswählen

prototype getClientLibVersion(*result)

structure TS3Functions 
  getClientLibVersion.getClientLibVersion
[...]
endstructure 

Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: C struct zu Pb

Beitrag von Andreas21 »

Danke das werd ich gleich mal testen.
So ähnlich dachte ich es mir schon.

Das ist aus der ts3_functions.h Datei die im ts3client_pluginsdk-3.0.0-beta22 bei ist.
http://www.teamspeak.com/?page=downloads&newlang=de
zu finden im Ordner "ts3client_pluginsdk-3.0.0-beta22\ts3client_pluginsdk\include\"
Und sie soll in C# sein. Von c++ steht da nichts.
char* s;
char msg[1024];
anyID myID;
uint64* ids;
size_t i;
unsigned int error;

/* Print clientlib version */
if(ts3Functions.getClientLibVersion(&s) == ERROR_ok) {
printf("PLUGIN: Client lib version: %s\n", s);
ts3Functions.freeMemory(s); /* Release string */
} else {
ts3Functions.logMessage("Error querying client lib version", LogLevel_ERROR, "Plugin", serverConnectionHandlerID);
return;
}
Es wird bei getClientLibVersion doch die Adresse übergeben in der die antwort geschrieben werden soll oder wie ruffe ich sie auf. Wert daraus nicht schlau.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Re: C struct zu Pb

Beitrag von Blackskyliner »

Wenn du das fertig hast, dann währe ich an dieser Wrapper-Library auf jeden Fall interessiert. <)
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Re: C struct zu Pb

Beitrag von freak »

Code: Alles auswählen

unsigned int (*getPlaybackDeviceList)(int modeID, char**** result)
Na, da hatte aber jemand Spaß an Pointern :lol:
Andreas21 hat geschrieben:Es wird bei getClientLibVersion doch die Adresse übergeben in der die antwort geschrieben werden soll oder wie ruffe ich sie auf. Wert daraus nicht schlau.
Es wird die Adresse übergeben in die die Adresse des Strings geschrieben werden soll. In etwa so:

Code: Alles auswählen

If ts3Functions\getClientLibVersion(@*version) = #ERROR_ok
  Debug PeekS(*version) 
  ts3Functions\freeMemory(*version)
EndIf
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Re: C struct zu Pb

Beitrag von Blackskyliner »

Ist doch nur ein Pointer auf ein Array, welches wiederum Pointer auf ein Char-Array, also Strings hält... Wenn ich das jetzt richtig aufgelöst habe... :) Von daher sieht es nur nach Spaß aus, kann aber Zeitweilen durchaus einen nutzen haben, sofern man keine listen verwenden möchte die an dieser Stelle angebrachter gewesen währen, sofern ich das char**** richtig übersetzt habe :)
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Re: C struct zu Pb

Beitrag von freak »

Blackskyliner hat geschrieben:Ist doch nur ein Pointer auf ein Array, welches wiederum Pointer auf ein Char-Array, also Strings hält... Wenn ich das jetzt richtig aufgelöst habe... :) Von daher sieht es nur nach Spaß aus, kann aber Zeitweilen durchaus einen nutzen haben, sofern man keine listen verwenden möchte die an dieser Stelle angebrachter gewesen währen, sofern ich das char**** richtig übersetzt habe :)
Das wäre "char **". "char*" ist ein String, "char **" ist ein Array von Strings. "char***" wäre dann ein Array von Arrays von Strings, und weil ja in die Funktion ein Pointer für den Rückgabewert übergeben wird ist es "char ****", ein Pointer auf ein Array von Arrays von Strings. Das nenne ich dann schon ein klein wenig verrückt. (aber auch nur ein klein wenig)
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: C struct zu Pb

Beitrag von Josh »

Bild
die spinnen, die c'ler
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: C struct zu Pb

Beitrag von Andreas21 »

Egal wie ich es anstellen will bekomme ich nur fehlermeldungen -.-

*ts3\getClientLibVersion() bei der Function belibt er stecken.

wenn ich @string übergebe oder @*version hengt sich ts3 auf.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Antworten