LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1140|回复: 4

结构体指针在gcc下正常,但在g++下出现问题

[复制链接]
发表于 2006-9-14 16:42:02 | 显示全部楼层 |阅读模式
JNIEXPORT void JNICALL Java_Cdemo_showMsgBox(JNIEnv * env, jobject obj, jstring str)
{
        const char *msg =(*env)->GetStringUTFChars(env,str,0);
        printf("\tFrom DLL/SO!\t%s\n",msg);
        (*env)->ReleaseStringUTFChars(env,str,msg);
}
如上代码,使用gcc编译通过,使用g++编译时出现如下错误:
dlltest.cpp:7: 错误:‘->’ 的基操作数具有非指针类型 ‘JNIEnv_’

该怎么样才能使用g++编译这个程序???
发表于 2006-9-14 19:57:07 | 显示全部楼层
(*env)->,你对一个指针进行引用之后,再使用->操作,莫非它是指针的指针?如果JNIEnv不是指针类型,而是一个结构体的话,你应该使用env->
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-15 09:08:40 | 显示全部楼层
头文件中有:
typedef const struct JNINativeInterface_ *JNIEnv;
这里定义:
>>> JNIEnv *env;
而 (*env)->ReleaseStringUTFChars(env,str,msg);  这行代码在GCC下编译通过,却不能通过g++编译,错误信息就是:‘->’ 的基操作数具有非指针类型 ‘JNIEnv_’。。但是这行代码在GCC下是毫无问题的。
因为现在需要把原来做动态连接库的C代码改为用G++编译,于是就出现了上面的问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-15 10:53:32 | 显示全部楼层
惭愧,,惭愧~~~

小弟粗心~~

头文件中对于在C++下的结构体都作了更改,和C下的不同

#ifdef __cplusplus
....
了~~~
回复 支持 反对

使用道具 举报

发表于 2006-9-15 11:00:09 | 显示全部楼层
name mangling ,呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表