Java Windows Mobile本机代码-jstring到LPCTSTR
我有一个Java应用程序,需要在Windows Mobile设备上与摄像头交互。我已经编写了Java代码和本机代码,一切都很好。我现在遇到的问题是,我想开始将变量从Java传递到本机代码,例如,用于照片的目录和文件名 本机代码使用Java Windows Mobile本机代码-jstring到LPCTSTR,java,c++,string,windows-mobile,java-native-interface,Java,C++,String,Windows Mobile,Java Native Interface,我有一个Java应用程序,需要在Windows Mobile设备上与摄像头交互。我已经编写了Java代码和本机代码,一切都很好。我现在遇到的问题是,我想开始将变量从Java传递到本机代码,例如,用于照片的目录和文件名 本机代码使用SHCAMERACAPTURE对象与相机进行交互,它希望使用LPCTSTRs指定目录和文件名。传入的字符串是一个jstring,我可以通过调用: const char *strDir=(jEnv)->GetStringUTFChars(dirName, 0);
SHCAMERACAPTURE
对象与相机进行交互,它希望使用LPCTSTR
s指定目录和文件名。传入的字符串是一个jstring,我可以通过调用:
const char *strDir=(jEnv)->GetStringUTFChars(dirName, 0);
但我不确定如何将其传递给SHCAMERACAPTURE
对象,因为它无法将const char*
转换为LPCTSTR
。我尝试了一个cast(LPCTSTR)strDir
,并对其进行了编译,但在运行时出现了一个错误(它无法创建文件)
我是一个java开发者,C++的新手,所以我真的不太确定我需要做什么来把我的字符串放到本地调用中。有什么想法吗?我想你应该试试GetStringChars()而不是GetStringUTFChars() 根据,它返回Unicode字符串 WindowsCE和Windows mobile专门使用UNICODE,因此LPCTSTR 实际上是LPCWSTR(指向常量WideChar字符串的长指针)
我假设您希望提供路径和文件名。这是改编自
GetStringChars()
返回一个常量jchar*
,所以我仍然不知道如何将它传递给我的本机对象?什么是shcam.szFile
?并且GetStringChars()
不接受0个参数?你能解释一下那行代码的作用吗?谢谢。请参阅更新的答案。我记不清了。离WM已经有几年了。我在Mac电脑上,无法访问VS2008,因此需要一段时间才能找到东西。
SHCAMERACAPTURE shcc;
ZeroMemory(&shcc, sizeof(shcc));
shcc.cbSize = sizeof(shcc);
shcc.pszInitialDir = (TCHAR*)(jEnv)->GetStringChars(dirName, 0 );
shcc.pszDefaultFileName = (TCHAR*)(jEnv)->GetStringChars(defFileName, 0 );