QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1795|回复: 1

C代码用G++编译结构体指针的指针出现的问题

[复制链接]
发表于 2006-9-15 10:23:15 | 显示全部楼层 |阅读模式
小弟使用JAVA的JNI写动态连接库。恩~先上代码:

头文件 Cdemo.h
[code:1]
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Cdemo */

#ifndef _Included_Cdemo
#define _Included_Cdemo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     Cdemo
* Method:    showMsgBox
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_Cdemo_showMsgBox
  (JNIEnv *, jobject, jstring);

/*
* Class:     Cdemo
* Method:    nativeMethod
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_Cdemo_nativeMethod
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
[/code:1]

C文件:
[code:1]
#include "Cdemo.h"
#include <stdio.h>

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


JNIEXPORT void JNICALL Java_Cdemo_nativeMethod(JNIEnv * env, jobject obj)
{
  jclass cls = (*env)->GetObjectClass(env, obj);
  jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "()V");
  if (mid == 0)
    return;
  printf("In C,about to enter Java\n");
  (*env)->CallVoidMethod(env, obj, mid);
}
[/code:1]

Makefile
[code:1]
libdlltest.so:dlltest.o
        gcc -Wall -rdynamic -shared -o libdlltest.so dlltest.o
dlltest.o:dlltest.c
        gcc -Wall -c dlltest.c -I./ -I/usr/jdk1.5/include -I/usr/jdk1.5/include/linux
cl:
        rm -rf *.o *.so
[/code:1]

问题是,这个程序使用GCC编译毫无问题,但是要使用g++编译,就会出现如下错误:

[code:1]
dlltest.c:11: 错误:‘->’ 的基操作数具有非指针类型 ‘JNIEnv_’
dlltest.c:15: 错误:‘->’ 的基操作数具有非指针类型 ‘JNIEnv_’
dlltest.c: In function ‘void Java_Cdemo_nativeMethod(JNIEnv*, _jobject*)’:
dlltest.c:21: 错误:‘->’ 的基操作数具有非指针类型 ‘JNIEnv_’
dlltest.c:22: 错误:‘->’ 的基操作数具有非指针类型 ‘JNIEnv_’
dlltest.c:26: 错误:‘->’ 的基操作数具有非指针类型 ‘JNIEnv_’
[/code:1]

但用GCC是没有问题的
 楼主| 发表于 2006-9-15 10:55:44 | 显示全部楼层
惭愧,,惭愧~~~

小弟粗心~~

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

#ifdef __cplusplus   
....
了~~~
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-2 08:35 , Processed in 0.049104 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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