2017-07-26 115 views
1

我有工作,修改用C写于2005年的旧的DLL ++。 我已经安装了Eclipse Oxygen,cygwin,gcc,gdb和make。无效参数C++ cygwin的

我已经搜索在很多地方

,在我的项目属性做了很多的变化,但我的问题是在这里反正:我有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; 
} 

而且我有 “无效参数” 与NewObjectArray,和所有SetObjectArray。

第27行参数无效 考生:_jobjectArray * NewObjectArray(,_ JCLASS * _ * jobject?)” 线33,34,35,36无效arguements' 考生:无效SetObjectArrayElement(_jobjectArray *, _jobject *)”

+0

请提供错误的确切输出。在Eclipse中尝试“控制台”视图。 (例如,你有错误没有关联的行号等) –

+0

在原岗位 – Calimero79

+0

两个问号恰巧是'jsize'参数来完成。你有可能在其他地方重新定义'jsize'吗?新的编译器可能更容易违反一个定义规则。 – MSalters

回答

1

要认识到的第一件事是,你得到的‘无效参数’错误是从Eclipse的自己的代码来分析,而不是从编译器。它实际上不应该阻止你构建或运行你的代码,这只是一个烦恼。

已经确定,这个错误的原因通常是项目配置的问题,可能是平台,Java版本等特定的。(例如,我不会在这段代码上得到这样的错误Linux,GCC 6和Java 8)。

正如@Msalters已经在评论中指出,错误似乎是由Eclipse中不能够解决型jsize引起的。为了研究这个,我就开了头jni.h(您可以通过在#包括为它“开放宣言”做的),找到jsize的定义,并看看是否有任何有可能表明它为什么不能解决。要纠正这个问题,您可能需要对项目配置进行调整,例如指定其他包含路径或定义其他宏。

+1

问题已解决。我的jni.h在我的项目不知道的另一个目录中调用jni_md.h。我已经修改了这个diretory的路径,并且已经解决了。感谢您的帮助 – Calimero79