无效参数 C++ cygwin

Posted

技术标签:

【中文标题】无效参数 C++ cygwin【英文标题】:Invalid Arguments C++ cygwin 【发布时间】: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++ 的命令行选项)将在“控制台”视图中。 【参考方案1】:

首先要意识到,您得到的“无效参数”错误来自 Eclipse 自己的代码分析,而不是编译器。它实际上不应该阻止你构建或运行你的代码,它只是一个烦恼。

已经确定,这个错误的原因通常是项目配置的问题,并且可能是特定于平台、Java 版本等的。(例如,我在 Linux 上的这段代码上没有出现这样的错误, 使用 GCC 6 和 Java 8)。

正如@Msalters 已经在评论中指出的那样,错误似乎是由 Eclipse 无法解析类型 jsize 引起的。为了调查这个问题,我会打开标题jni.h(你可以通过#include 上的“Open Declaration”来完成),找到jsize 的定义,看看那里是否有任何可能表明它为什么没有的东西不解决。要解决此问题,您可能需要对项目配置进行调整,例如指定额外的包含路径或定义额外的宏。

【讨论】:

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

以上是关于无效参数 C++ cygwin的主要内容,如果未能解决你的问题,请参考以下文章

c++向量模板参数1无效

C++ std::stoi 异常:无效参数

未处理的异常:将无效参数传递给认为无效参数致命的函数。在插入排序中[重复]

eth_sendTransaction 的方法参数无效

没有参数列表的模板名称“ ”的使用无效

Windows 10-OpenGL的故障排除代码(带有GLFW):无效的参数