无效的参数C ++ cygwin

时间:2017-07-26 12:13:01

标签: c++ eclipse eclipse-cdt

我有工作要修改2005年用c ++编写的旧dll。 我已经安装了Eclipse Oxygen,cygwin和gcc,gdb和make。

我在很多地方搜索过,在我的项目属性上做了很多更改,但我的问题仍然在这里:我有5个错误"无效的参数"。

我的代码:

#include <jni.h>
#include "core_dll_ModDriver.h"
#include <stdio.h>
#include <iostream>

JNIEXPORT jobjectArray JNICALL Java_core_dll_ModDriver_EtatSupport(JNIEnv * env, jobject o)
{
    const int nbFen = 4;
    const char FAR* name = "EtatSupport";
    char* fen1 = NULL;
    char* fen2 = NULL;
    char* fen3 = NULL;
    char* fen4 = NULL;
    loadDll();
    if ( isDllLoaded() )
    {
        typedef unsigned char ( __stdcall * Function)( char*, char*, char*, char* );
        Function function = (Function)getDllFunction( name );
        if ( function != NULL )
        {
            char error = function ( fen1, fen2, fen3, fen4 );
        }
        else
            std::cout << "echec" << name;
        closeDll();
    }
    jobjectArray result = env->NewObjectArray( nbFen, env->FindClass("java/lang/String"), NULL );
    jstring jfen1 = env->NewStringUTF( fen1 );
    jstring jfen2 = env->NewStringUTF( fen2 );
    jstring jfen3 = env->NewStringUTF( fen3 );
    jstring jfen4 = env->NewStringUTF( fen4 );

    env->SetObjectArrayElement( result, 0, jfen1 );
    env->SetObjectArrayElement( result, 1, jfen2 );
    env->SetObjectArrayElement( result, 2, jfen3 );
    env->SetObjectArrayElement( result, 3, jfen4 );
    return result;
}

我有&#34;无效的参数&#34;使用NewObjectArray和所有SetObjectArray。

第27行无效的参数&#39; 候选人是:_jobjectArray * NewObjectArray(?,_ jclass *,_ jobject *)&#39; 第33,34,35,36行无效争论&#39; 候选人是:void SetObjectArrayElement(_jobjectArray *,?,_ jobject *)&#39;

1 个答案:

答案 0 :(得分:1)

首先要意识到的是,您获得的“无效参数”错误来自Eclipse自己的代码分析,而不是来自编译器。它实际上不应该阻止你构建或运行你的代码,这只是一个烦恼。

确定之后,这个错误的原因通常是项目配置的问题,并且可能特定于平台,Java版本等。(例如,我不会在Linux上的此代码上出现此类错误,使用GCC 6和Java 8)。

正如@Msalters在评论中已经指出的那样,错误似乎是由Eclipse无法解析类型jsize引起的。要对此进行调查,我会打开标题jni.h(您可以通过#include上的“公开声明”执行此操作),找到jsize的定义,并查看是否有任何可能的内容说明为什么它没有解决。要解决此问题,您可能需要调整项目配置,例如指定其他包含路径或定义其他宏。