2017-07-26 9 views
1

Ich habe für die Arbeit eine alte DLL in 2005 geschrieben in C++ zu ändern. Ich habe Eclipse Oxygen, Cygwin mit gcc, gdb und make installiert.Ungültige Argumente C++ Cygwin

Ich habe an vielen Stellen gesucht, viele Änderungen in meinen Projekteigenschaften vorgenommen, aber mein Problem ist hier trotzdem: Ich habe 5 Fehler "Ungültige Argumente".

mein Code:

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

Und ich habe "Ungültige Argumente" mit NewObjectArray und alle SetObjectArray.

Zeile 27 Ungültige Argumente Kandidaten sind: _jobjectArray * NewObjectArray (, _ JClass * _ jobject *?)‘ Linie 33,34,35,36 Ungültige arguements' Kandidaten sind: Leere SetObjectArrayElement (_jobjectArray *, _jobject *) '

+0

Bitte geben Sie die genaue Ausgabe des Fehlers an. Versuchen Sie die Ansicht "Konsole" in Eclipse. (Sie haben z. B. keine verknüpfte Zeilennummer der Fehler usw.) –

+0

im ursprünglichen Beitrag – Calimero79

+0

Die zwei Fragezeichen geschehen für 'jsize' Argumente. Gibt es eine Chance, dass du 'jsize' anderswo neu definierst? Neue Compiler sind möglicherweise anfälliger für Verstöße gegen die Eine-Definition-Regel. – MSalters

Antwort

1

Das erste, was zu realisieren ist, dass der Fehler "Ungültige Argumente", den Sie bekommen, von der Eclipse-eigenen Code-Analyse kommt, nicht vom Compiler. Es sollte Sie nicht daran hindern, Ihren Code zu erstellen oder auszuführen, es ist nur ein Ärgernis.

Nachdem festgestellt, dass die Ursache für diesen Fehler in der Regel ein Problem mit der Projektkonfiguration ist, und möglicherweise spezifisch für die Plattform, Java-Version usw. (Ich z. B. solche Fehler auf diesen Code nicht erhalten Linux, mit GCC 6 und Java 8).

Wie @Msalters bereits in einem Kommentar darauf hingewiesen hat, scheinen die Fehler darauf zurückzuführen zu sein, dass Eclipse den Typ jsize nicht auflösen konnte. Um dies zu untersuchen, öffne ich die Kopfzeile jni.h (Sie können über "Open Declaration" auf der #Include dafür), finden Sie die Definition von jsize, und sehen, ob es da etwas gibt, das möglicherweise angibt, warum es nicht auflöst. Um das Problem zu beheben, müssen Sie möglicherweise Änderungen an Ihrer Projektkonfiguration vornehmen, z. B. zusätzliche Include-Pfade angeben oder zusätzliche Makros definieren.

+1

Problem gelöst. mein jni.h rufe ein jni_md.h in einem anderen Verzeichnis auf, das mein Projekt nicht kannte. Ich habe den Pfad zu diesem Verzeichnis geändert und es ist gelöst. Danke für die Hilfe – Calimero79

Verwandte Themen