首页 > 解决方案 > 不是结构或联合

问题描述

每当我尝试构建此代码时

#include "jni.h"
#include "NetworkGUI.h"
#include "String.h"
#include "stdlib.h"

JNIEXPORT jobjectArray JNICALL Java_NetworkGUI_getNetworkNames(JNIEnv 
*env, jobject obj)
{
    char *networkNames[3];
    networkNames = {"TWC", "Comcast", "Spectrum"};
    jobjectArray names;

    names = (jobjectArray)env->NewObjectArray(3, env->FindClass("Java/lang/String"), env -> NewStringUTF(""));

    int i;
    for( i = 0; i < 3; i++) 
    {
        env -> SetObjectArrayElement(names, i, 
        NewStringUTF(networkNames[i]));
    }
    return (names);
}

我明白了

在非结构或联合的情况下请求成员“*******”

for NewObjectArray, NewStringUTF, FindClass, 和 'SetObjectArrayElement' 在调用它们的行中。这是我的头文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class NetworkGUI */

#ifndef _Included_NetworkGUI
#define _Included_NetworkGUI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     NetworkGUI
 * Method:    hostRun
 * Signature: (I)I
 */

JNIEXPORT jobjectArray JNICALL Java_NetworkGUI_getNetworkNames
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

究竟是什么原因造成的?

标签: javacjava-native-interface

解决方案


您没有给我们一个可以尝试的最小示例,也没有给我们提供错误发生的行,但我的猜测是

(jobjectArray)env->NewObjectArray(...)

做一些与你想象的不同的事情。在 C 中,诸如->and之类的后缀运算符(...)具有比强制转换更高的词法优先级。您可能需要添加一些括号以明确您的意思。


推荐阅读