Java Windows中的JNI未注册函数

Java Windows中的JNI未注册函数,java,c++,dll,java-native-interface,64-bit,Java,C++,Dll,Java Native Interface,64 Bit,我试图运行JNI来调用W7 X64机器上VS 2010 Express中内置的DLL,但总是出现上述错误。(注意:DLLTestProject.java/.class在DLLTestProject包下 源代码: Exception in thread "main" java.lang.UnsatisfiedLinkError: dlltestproject.DLLTestProject.inDll()V at dlltestproject.DLLTestProject.inDll

我试图运行JNI来调用W7 X64机器上VS 2010 Express中内置的DLL,但总是出现上述错误。(注意:DLLTestProject.java/.class在DLLTestProject包下

源代码:

Exception in thread "main" java.lang.UnsatisfiedLinkError:     dlltestproject.DLLTestProject.inDll()V
    at dlltestproject.DLLTestProject.inDll(Native Method)
    at dlltestproject.DLLTestProject.main(DLLTestProject.java:22)
Java Result: 1
DLL头:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dlltestproject;

/**
 *
 * @author Arhowk
 */
public class DLLTestProject {

    /**
     * @param args the command line arguments
     */
    static{
        System.loadLibrary("NewDLLTest");
    }
    public static void main(String[] args) {
       System.out.println(System.getProperty("java.home"));
       DLLTestProject t = new DLLTestProject();
       t.inDll();
    }
    public native void inDll();
}
/*不要编辑此文件-它是机器生成的*/
#包括
/*dlltestproject\u dlltestproject类标题*/
#如果不确定因素包括项目
#定义包含的项目
#ifdef_uucplusplus
外部“C”{
#恩迪夫
/*
*类别:dlltestproject\U dlltestproject
*方法:inDll
*签字:()五
*/
JNIEXPORT void JNICALL Java\u dlltestproject\u dlltestproject\u inDll
(JNIEnv*,jobject);
#ifdef_uucplusplus
}
#恩迪夫
#恩迪夫
DLL源:

    /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class dlltestproject_DLLTestProject */

#ifndef _Included_dlltestproject_DLLTestProject
#define _Included_dlltestproject_DLLTestProject
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     dlltestproject_DLLTestProject
 * Method:    inDll
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_dlltestproject_DLLTestProject_inDll
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
//NewDLLTest.cpp:定义DLL应用程序的导出函数。
//
#包括“stdafx.h”
#包括“NewDLLTest.h”
#包括
#包括
#包括
JNIEXPORT void JNICALL Java\u dlltestproject\u dlltestproject\u inDll(JNIEnv*env,jobject obj)
{
int msgboxID=MessageBox(
无效的
(LPCWSTR)L“资源不可用\n是否重试?”,
(LPCWSTR)L“账户详细信息”,
MB|i警告| MB|u取消继续| MB|u取消按钮2
);
};
明白了


对于任何想知道的人来说,问题在于将javah编译的头文件移动到项目中。我必须手动进入VS2010 studio项目并放入头文件(而不是在编辑器中复制粘贴)然后将其包含在主.cpp文件中

非常感谢!1+up vote为什么有两个头?第二个头中的声明应该在
外部“C”{
块。你不需要两次包含
jni.h
。我不久前意识到了这一点,但用合并的标题重新编译它没有帮助。更新的OP headers我一直在浏览谷歌的每一个条目,但我找不到任何有效的解决方案。我发现有几个人说不使用VS2010,而是使用Windows编译器,但我找不到任何有关Windows编译器的文档。
// NewDLLTest.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"
#include "NewDLLTest.h"
#include <jni.h>
#include <Windows.h>
#include <Winuser.h>
JNIEXPORT void JNICALL Java_dlltestproject_DLLTestProject_inDll(JNIEnv *env, jobject obj)
{
    int msgboxID = MessageBox(
        NULL,
        (LPCWSTR)L"Resource not available\nDo you want to try again?",
        (LPCWSTR)L"Account Details",
        MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2
    );
};