~~~~~~~~高分。JAVA调用VC++写的DLL。如何使VC++的函数使用JAVA的String类型的字符串!

wendi 2007-06-19 03:18:29
JAVA调用VC++的DLL。这是JAVA代码
public class JavaCall {
static {
System.loadLibrary("changebk");
}

public native static void changeecl(String s);

public static void main(String[] args) {
JavaCall jc = new JavaCall();
String strDesktop="E:\\coco.gif";
jc.changeecl(strDesktop);
System.out.println("调用结束");
}
}

这是VC++代码。他的作用是设置桌面背景为e:\\ibmee.gif
NIEXPORT void JNICALL Java_JavaCall_changeecl (JNIEnv *env, jclass cls,jstring str)
{
IActiveDesktop *pAD;
COMPONENT comp;
CoInitialize(NULL);
CoCreateInstance( CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
IID_IActiveDesktop, (void**)&pAD );
pAD->SetWallpaper(L"e:\\ibmee.gif",0);
pAD->ApplyChanges(AD_APPLY_ALL);
pAD->Release();
CoUninitialize();


}
现在我想根据JAVA传过来的String 类型的参数strDesktop来灵活设置桌面,而不是在VC++中象 pAD->SetWallpaper(L"e:\\ibmee.gif",0); 这样写死。应该怎么修改???
...全文
261 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fkyq01 2007-06-20
自己看看吧,会有点帮助的
http://www.blogjava.net/sunking/archive/2006/04/03/38981.aspx
回复
CrazyGou 2007-06-19
pAD->SetWallpaper((unsigned short *)env->GetStringUTFChars(str, false), 0);
回复
wendi 2007-06-19
楼上的VC编译时报
--------------------Configuration: changebk - Win32 Debug--------------------
Compiling...
changebk.cpp
C:\Program Files\Microsoft Visual Studio\MyProjects\changebk\changebk.cpp(23) : error C2664: 'SetWallpaper' : cannot convert parameter 1 from 'const char *' to 'const unsigned short *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.
回复
CrazyGou 2007-06-19
pAD->SetWallpaper(env->GetStringUTFChars(str, false), 0);
回复
fool_leave 2007-06-19
没有做过

不过用String得到char数组或者byte数组,由vc来使用应该可以吧
回复
发帖
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2007-06-19 03:18
社区公告
暂无公告