我想不出更好的标题,所以它就在这里。我正在试图找出从C的stdlib访问方法的最好的方法(在效率和干净的代码方面)。背景是,我试图在Java程序中获得mbstowcs的功能。现在,在我的C代码中,我得到了以下代码:
const char* source = "D:\\test3\\source\\test.txt";
SName tmp1;
mbstowcs((wchar_t*)tmp1, source, 32 - 1);
其中SName
是typedef unsigned short SName[32]
。在后面的代码中,tmp1
被用作输入参数:
status = copyFilePath(tmp1, tmp2, info, &context);
我实际上想要做的是从Java端使用JNA调用这个copyFilePath
。诀窍是我需要在Java程序中获得类似于C的mbstowcs的转换,这样以后我就可以直接调用这个函数,而不需要任何额外的处理。现在,在我看来,在使用JNI时,我需要额外的C代码,这样我才能从stdlib获得mbstowcs的包装器。
另一个问题是,Java有没有类似的方法将多字节字符串转换为宽字符字符串,就像在C/C++中一样?
发布于 2018-09-10 23:44:54
没有回答问题,而是试图帮助解决问题。JNA有com.sun.jna.WString
。如果调用带有WString参数的函数,它将在本机代码中显示为宽字符串。你只需要确保你得到了正确的编码。
只需使用function.invoke(new WString(myString));
,而不是在本机端提供多字节字符串的function.invoke(myString);
https://stackoverflow.com/questions/52260592
复制相似问题