Seite 1 von 2

C struct zu Pb

Verfasst: 24.06.2010 16:15
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.

Re: C struct zu Pb

Verfasst: 24.06.2010 17:06
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

Re: C struct zu Pb

Verfasst: 24.06.2010 17:16
von edel
Das sind in PB Prototypen.

Code: Alles auswählen

prototype getClientLibVersion(*result)

structure TS3Functions 
  getClientLibVersion.getClientLibVersion
[...]
endstructure 


Re: C struct zu Pb

Verfasst: 24.06.2010 17:45
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.

Re: C struct zu Pb

Verfasst: 24.06.2010 20:06
von Blackskyliner
Wenn du das fertig hast, dann währe ich an dieser Wrapper-Library auf jeden Fall interessiert. <)

Re: C struct zu Pb

Verfasst: 24.06.2010 20:36
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

Re: C struct zu Pb

Verfasst: 24.06.2010 20:41
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 :)

Re: C struct zu Pb

Verfasst: 24.06.2010 20:53
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)

Re: C struct zu Pb

Verfasst: 24.06.2010 21:12
von Josh
Bild
die spinnen, die c'ler

Re: C struct zu Pb

Verfasst: 24.06.2010 21:18
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.