关于java:C指针-从Char到Char *的无效转换

C Pointers - Invalid Conversion from Char to Char*

我目前正在编码Java应用程序,该应用程序加载用C编码的本机库。
从Java调用的C函数传递给jchar。
在该C函数中,另一个库加载了一个新函数,该函数需要将jchar转换为char *指针。
我对该新功能的全部了解是,它将一个指向char值的指针作为参数(char *奇偶校验)。

这是我当前的代码:

1
2
3
4
5
6
7
8
9
10
11
12
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, ...);
}

当我尝试编译此代码时,它引发以下错误:
"从char到char *的转换无效"


正如@bmargulies已经指出的那样,这里的问题是您没有传递pchar(类型为(char *),但是是*pchar*是解引用运算符,它的意思是"给我什么, pchar指向的地址,即单个char


jchar是单个16位UTF-16 Unicode字符。 它的'&'不是char *,并且不能传递给char *。 您需要将其转换为ACP并将其终止。 WideCharToMultiByte可能会有所帮助。


如果查看函数参数,您会看到parity作为char *进入,但更进一步,您会看到以下一行:

1
char p = (char) parity;

您正在将char指针转换为char。 您无需根据下一行显示的内容执行此操作:

1
char *pchar = &p;

由于传入了参数,您已经具有作为char *的奇偶校验。