Char Pointer in Funktionen von Fremd-DLL
Char Pointer in Funktionen von Fremd-DLL
Hi,
ich habe ein kleines Problem beim Zugriff auf Fremdbibliotheken: ich habe von einem Dritthersteller eine DLL, eine C-Header-Datei und eine Lib-Datei. Enthalten sind Funktionen wie z.B.:
int TMCOALA_EXP CoalaMakeTransportKey(
char ** rCertificate,
char ** rPrivateKey,
char * message,
int * messageLen,
const char * name,
const char * email,
const char * producerId,
const char * producerVersion,
const char * locality,
const char * country,
const char * jrePath,
const char * jarPath );
Ich brauche das, was von dieser Funktion in rCertificat und rPrivateKey geschrieben wird für andere Funktionen in dieser DLL.
Ich habe u.a. versucht, die Variablen mit
zertifikat.s = Space(2048)
pKey = Space(2048)
rcKey.l = 0
zu erstellen und so an die Funktion zu übergeben:
If OpenLibrary(0, "tmCOALA.dll")
...
rcKey = CallFunction(0, "CoalaMakeTransportKey", @zertifikat, @pKey, ...)
Die DLL konnte zwar geöffnet werden, aber beim Zugriff auf die Funktion stürzt mein Programm ab. Ich glaube, ich mache das mit den Char Pointern nicht richtig.
Kann mit da jemand einen Tipp geben?
Danke
ich habe ein kleines Problem beim Zugriff auf Fremdbibliotheken: ich habe von einem Dritthersteller eine DLL, eine C-Header-Datei und eine Lib-Datei. Enthalten sind Funktionen wie z.B.:
int TMCOALA_EXP CoalaMakeTransportKey(
char ** rCertificate,
char ** rPrivateKey,
char * message,
int * messageLen,
const char * name,
const char * email,
const char * producerId,
const char * producerVersion,
const char * locality,
const char * country,
const char * jrePath,
const char * jarPath );
Ich brauche das, was von dieser Funktion in rCertificat und rPrivateKey geschrieben wird für andere Funktionen in dieser DLL.
Ich habe u.a. versucht, die Variablen mit
zertifikat.s = Space(2048)
pKey = Space(2048)
rcKey.l = 0
zu erstellen und so an die Funktion zu übergeben:
If OpenLibrary(0, "tmCOALA.dll")
...
rcKey = CallFunction(0, "CoalaMakeTransportKey", @zertifikat, @pKey, ...)
Die DLL konnte zwar geöffnet werden, aber beim Zugriff auf die Funktion stürzt mein Programm ab. Ich glaube, ich mache das mit den Char Pointern nicht richtig.
Kann mit da jemand einen Tipp geben?
Danke
Re: Char Pointer in Funktionen von Fremd-DLL
> rcKey = CallFunction(0, "CoalaMakeTransportKey", @zertifikat, @pKey, ...)
Gibt denn IsFunction(0, "CoalaMakeTransportKey") einen Wert ungleich 0 zurück?
Grüße ... Kiffi
Gibt denn IsFunction(0, "CoalaMakeTransportKey") einen Wert ungleich 0 zurück?
Grüße ... Kiffi
Hygge
Das dürfte nichts ändern, da bei Strings nur der Pointer übergeben werden kann, egal ob @, * oder nichts.Laurin hat geschrieben:Probiere mal statt @ ein * oder gar nichts vor die Variablen zu setzen. Vielleicht haut es ja dann hin.
Greetz Laurin
Ich würds aber mal mit CallCFunction(0, "CoalaMakeTransportKey", @zertifikat, @pKey, ...) versuchen
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Re: Char Pointer in Funktionen von Fremd-DLL
Das sind Pointer zu Pointer of Char, der Rest sind einfachemannybass hat geschrieben:Code: Alles auswählen
char ** rCertificate, char ** rPrivateKey,
Pointer.
Du brauchst also die 2 Strings und dann 2 Pointer darauf,
von denen Du den Pointer übergibst.
Ungefähr so:
Code: Alles auswählen
zertifikat.s = Space(2048)
pKey.s = Space(2048)
rCertificate.l = @zertifikat ; String-Pointer in Variable
rPrivateKey.l = @pKey
; Aufruf:
rcKey = CallCFunction(0, "CoalaMakeTransportKey", @rCertificate, @rPrivateKey, message$, @messageLen, name$, email$, ...)
; (oder CallFunction)
und '@rCertificate' somit der Pointer zu Pointer auf String.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Oder wenn man es etwas kürzer haben will:
Code: Alles auswählen
PokeL(@*zertifikat.STRING,Space(2048))
PokeL(@*pKey.STRING,Space(2048))
; Aufruf:
rcKey = CallCFunction(0, "CoalaMakeTransportKey", @*zertifikat, @*pKey, message$, @messageLen, name$, email$, ...)
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]