【发布时间】:2017-07-26 12:13:00
【问题描述】:
我有工作要修改 2005 年用 c++ 编写的旧 dll。 我已经用 gcc、gdb 和 make 安装了 Eclipse Oxygen、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 行无效的论点' 候选人是:void SetObjectArrayElement(_jobjectArray *,?,_jobject *)'
【问题讨论】:
-
请提供错误的准确输出。试试 Eclipse 中的“控制台”视图。 (例如,您没有关联的错误行号等)
-
在原帖中完成
-
这两个问号恰好是
jsize参数。你有没有机会在其他地方重新定义jsize?新编译器可能更容易违反单一定义规则。 -
另外,请引用真正的错误。我很确定它们不会包含“争论”。
-
添加的错误看起来像问题视图中的错误,这只是一个总结/简化。其他详细信息(包括编译器的输出和用于 g++ 的命令行选项)将在“控制台”视图中。
标签: c++ eclipse eclipse-cdt