私は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 *) '
エラーから正確な出力を提供してください。 Eclipseで "Console"ビューを試してください。 (たとえば、エラーの行番号は関連付けられていません) –
元の投稿で行われました – Calimero79
2つの疑問符は、 'jsize'引数のために起こります。他の場所で 'jsize'の再定義があるとしたら?新しいコンパイラは、One Definition Ruleの違反に対してより脆弱になる可能性があります。 – MSalters