Это моя первая попытка JNI. Моя конечная цель - получить все задачи, выполняемые в настоящее время на машине, но для этого нужно просто выполнить простой пример. Я продолжаю получать эту ошибку, когда пытаюсь выполнить свою основную программу. Я предоставил мою простую основную программу Java, сгенерированный файл заголовка и ошибку.
Я не знаю, от чего зависит эта DLL. Первоначально он ссылался на DLL I, отслеженный и помещенный в system32 (msvcr90.dll).
Вот команда, которую я использовал для компиляции C-кода, который создал файлы DLL, OBJ, LIB, EXP и манифеста.
cl -I "C:\Program Files\Java\jdk1.6.0\include" -I "C:\Program Files\Java\jdk1.6.0\include\win32" -MD -LD HelloWorld.c -FeHelloWorld. DLL
class HelloWorld {
private native void print();
public static void main(String[] args) {
new HelloWorld().print();
}
static {
System.load("C:\\temp\\HelloWorld.dll");
}
}
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
java.lang.UnsatisfiedLinkError: C:\temp\HelloWorld.dll: A dynamic link library (DLL) initialization routine failed
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at HelloWorld.<clinit>(HelloWorld.java:7)
Exception in thread "main"