java调用dll 动态链接库(dll)初始化例程失败._线程“main”中的异常java.lang.UnsatisfiedLinkError:动态链接库(DLL)初始化例程失败…

java调用dll 动态链接库(dll)初始化例程失败._线程“main”中的异常java.lang.UnsatisfiedLinkError:动态链接库(DLL)初始化例程失败…这是一个非常有趣的问题 在本机代码打印它的一些语句后 我得到了提到的异常 抛出的异常是 hookThreadHa main java lang UnsatisfiedL W elita jnitesters workspace c MyHook bi

这是一个非常有趣的问题。在本机代码打印它的一些语句后,我得到了提到的异常。抛出的异常是:

hookThreadHandle is not NULL

hookThreadHandle is not NULL

Exception in thread “main” java.lang.UnsatisfiedLinkError: W:\elita\jnitesters\

workspace\c\MyHook\bin\Debug\MyHook.dll: A dynamic link library (DLL) initialization r

outine 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.loadLibrary0(Unknown Source)

at java.lang.System.loadLibrary(Unknown Source)

at keylogger.TestKeys.main(TestKeys.java:12)前两条语句hookThreadHandle is not NULL是dll的初始化失败的语句!为什么在找到dll并打印语句后抛出异常。 ?

什么是A dynamic link library (DLL) initialization routine failed异常?它意味着什么?

Java代码:

package keylogger;

public class TestKeys {

private static int i = 0;

private native void setWinHook();

private native void unregisterWinHook();

public static void main(String args[]) {

//TestKeys o = new TestKeys();

System.loadLibrary(“MyHook”); // load the library that registers the hook

Runnable r = new Runnable() {

@Override

public void run() {

try {

System.out.println(“Sleeping for 10 seconds..”);

Thread.sleep(10000);

}catch(Exception exc) {

exc.printStackTrace();

}

}

};

new Thread(r,”new thread”).start();

}

}C代码:

#include

#include

#include

#include “keylogger_TestKeys.h”

static HHOOK handleKeyboardHook = NULL;

HINSTANCE hInst = NULL;

static DWORD hookThreadId = 0;

static HANDLE hookThreadHandle = NULL;

BOOL WINAPI installHook(HINSTANCE hinstDLL, DWORD fwdReason, LPVOID lpvReserved);

static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {

printf(“You pressed the key !\n”);

return CallNextHookEx(handleKeyboardHook, nCode, wParam, lParam);

}

BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fwdReason, LPVOID lpvReserved) {

LPTHREAD_START_ROUTINE lpStartAddress = &installHook;

hookThreadHandle = CreateThread(NULL, 0, lpStartAddress, NULL, 0, &hookThreadId);

if(hookThreadHandle == NULL) {

printf(“\nhookThreadHandle is NULL\n”);

} else {

printf(“\nhookThreadHandle is not NULL\n”);

}

}

JNIEXPORT void JNICALL Java_keylogger_TestKeys_unregisterWinHook

(JNIEnv *env, jobject obj) {

if(handleKeyboardHook != NULL) {

UnhookWindowsHookEx(handleKeyboardHook);

printf(“Keyboard hook successfully unregistered !”);

} else {

printf(“Coudn’t Unhook the keyboard hook !”);

}

}

BOOL WINAPI installHook(HINSTANCE hinstDLL, DWORD fwdReason, LPVOID lpvReserved) {

handleKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hinstDLL, 0);

MSG msg;

while(GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;}

可能是什么原因 ? Output on the CMD

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176264.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午10:21
下一篇 2026年3月26日 下午10:21


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号