2016-08-17 7 views
0

Ich bin derzeit Codierung einer Java-Anwendung, die eine native Bibliothek in C codiert. Eine C-Funktion, die aus Java aufgerufen wird, ist ein Jchar übergeben. In dieser C-Funktion wird eine andere Bibliothek mit einer neuen Funktion geladen, die den jchar in einen char * -Zeiger konvertiert. Alles, was ich über diese neue Funktion weiß, ist, dass sie einen Zeiger auf einen char-Wert als Parameter (char * parity) nimmt.C Pointer - Ungültige Konvertierung von Char zu Char *

Das ist mein aktueller Code ist:

JNIEXPORT jint JNICALL Java_analyzer_DeclareNative_init (JNIEnv *env, jobject obj, ... , jchar parity, ...) { 

    typedef int (__stdcall *Init) (..., char* parity, ...); 
    HINSTANCE hinstLib = LoadLibrary("rs232"); 

    Init initcon = (Init) GetProcAdress(hinstLib, "functionname"); 

    char p = (char) parity; //(Typecasting jchar to char) 
    char *pchar = &p; //(Creating a pointer to p) 

    initcon(..., *pchar, ...); 
} 

Wenn ich versuche, diesen Code zu kompilieren, führt es folgende Fehlermeldung: „Ungültige Umwandlung von char zu char *“

+6

Warum übergeben Sie '* pchar' und nicht 'pchar'? – bmargulies

+0

Veröffentlichen Sie in sich abgeschlossenen Code und insbesondere Java-Deklaration der nativen Methode und ihre JNI-Implementierung. – Sergio

+0

Bytheway - Ich sehe keinen 'Jchar' im Code. Woher kommt es? – Sergio

Antwort

2

Als @ Bmargulies bereits darauf hingewiesen, das Problem hier ist, dass Sie nicht pchar übergeben (die von Typ (char *) ist, aber *pchar. * ist ein Dereferenzierungs-Operator und es bedeutet "geben Sie, was auch immer an der Adresse ist, auf die von pchar verwiesen. Mit anderen Worten - eine einzelne char.

0

Wenn Sie in Ihrer Funktion aussehen Parameter werden Sie sehen, dass parity in als char * kommt, noch weiter nach unten Sie haben die folgende Zeile:

char p = (char) parity; 

Sie Wirf einen Char-Zeiger auf ein Zeichen. Sie brauchen nicht diese auf der Grundlage zu tun, was Sie in der nächsten Zeile müssen erscheinen.

char *pchar = &p; 

Sie haben bereits Parität als char * als Folge des Parameters in geben wird

0

jchar ist ein einzelnes 16-Bit- UTF-16-Unicode-Zeichen. '&' davon ist nichtchar *, und wird nicht funktionieren, um eine char * übergeben. Sie müssen es in das ACP konvertieren und es null-terminieren. WideCharToMultiByte könnte sich als hilfreich erweisen.

Verwandte Themen