2017-07-26 17 views
1

私は2005年に書かれた古いdllをC++で修正する作業をしています。 Eclipse Oxygen、cygwinとgcc、gdb、makeをインストールしました。無効な引数C++ cygwin

私は多くの場所を検索してプロジェクトプロパティに多くの変更を加えましたが、私の問題はとにかくここにあります。私は5つのエラー "Invalid Arguments"があります。

私のコード:

#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 *、_ jオブジェクト*「) ライン33,34,35,36無効arguements' 候補者は次のとおりです:無効SetObjectArrayElement(_jobjectArray *、? _jobject *) '

+0

エラーから正確な出力を提供してください。 Eclipseで "Console"ビューを試してください。 (たとえば、エラーの行番号は関連付けられていません) –

+0

元の投稿で行われました – Calimero79

+0

2つの疑問符は、 'jsize'引数のために起こります。他の場所で 'jsize'の再定義があるとしたら?新しいコンパイラは、One Definition Ruleの違反に対してより脆弱になる可能性があります。 – MSalters

答えて

1

まず、「無効な引数」エラーは、コンパイラからではなく、Eclipse独自のコード解析から来ていることです。実際にコードをビルドしたり実行したりすることを妨げてはいけません。ちょっと迷惑です。

このエラーの原因は、通常、プロジェクトの設定に問題があり、プラットフォーム、Javaのバージョンなどに固有のことがあります(たとえば、このコードではこのようなエラーは発生しませんLinux、GCC 6、Java 8)をサポートしています。

コメントで@Msaltersが既に指摘されているように、エラーはEclipseがタイプjsizeを解決できないことが原因であるようです。これを調べるために、ヘッダjni.h(#includeの "Open Declaration"を介して行うことができます)を開き、jsizeの定義を見つけて、それが解決しない理由を示す可能性のあるものがあるかどうかを確認します。問題を解決するには、追加のインクルードパスの指定や追加のマクロの定義など、プロジェクトの構成を調整する必要があります。

+1

問題が解決しました。私のjni.hは私のプロジェクトが知らなかった別のディレクトリのjni_md.hを呼び出します。私はそのディレクトリへのパスを修正して解決しました。ありがとう – Calimero79