Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Windows Mobile本机代码-jstring到LPCTSTR_Java_C++_String_Windows Mobile_Java Native Interface - Fatal编程技术网

Java Windows Mobile本机代码-jstring到LPCTSTR

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);

我有一个Java应用程序,需要在Windows Mobile设备上与摄像头交互。我已经编写了Java代码和本机代码,一切都很好。我现在遇到的问题是,我想开始将变量从Java传递到本机代码,例如,用于照片的目录和文件名

本机代码使用
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 );