Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Visual Studio 2019 C+中创建dll时出现问题+;_Java_C++_Visual Studio_Dll_Java Native Interface - Fatal编程技术网

Java 在Visual Studio 2019 C+中创建dll时出现问题+;

Java 在Visual Studio 2019 C+中创建dll时出现问题+;,java,c++,visual-studio,dll,java-native-interface,Java,C++,Visual Studio,Dll,Java Native Interface,我知道Java,但我对C++和Visual Studio完全陌生。我试图从两个源文件(cpp和h)构建一个dll文件。为了在Java应用程序(JNI/JNA)中使用本机函数,我需要它。我希望这是一种可以重新映射键盘按钮的全局键挂钩 但当我粘贴源代码时,有些地方会以红色突出显示,并显示: CPP文件 “无法打开源代码文件w32api.h”。我正在使用俄语VS,所以我翻译了它 “错误类型”JNIEXPORT此声明不包含存储类或类型说明符 H文件 “错误类型”JNIEXPORT此声明不包含存储类或

我知道Java,但我对C++和Visual Studio完全陌生。我试图从两个源文件(cpp和h)构建一个dll文件。为了在Java应用程序(JNI/JNA)中使用本机函数,我需要它。我希望这是一种可以重新映射键盘按钮的全局键挂钩

但当我粘贴源代码时,有些地方会以红色突出显示,并显示:

CPP文件

“无法打开源代码文件w32api.h”。我正在使用俄语VS,所以我翻译了它

“错误类型”JNIEXPORT此声明不包含存储类或类型说明符

H文件

“错误类型”JNIEXPORT此声明不包含存储类或类型说明符

下面是源代码:

RemapKeys.h

/*不要编辑此文件-它是机器生成的*/
#包括
/*com_CoolTrickHome_RemapKeys类的标题*/
#如果没有,包括com、cooltrickshome和RemapKeys
#定义(包含)(com)(cooltrickshome)(主页)(RemapKeys)
#ifdef_uucplusplus
外部“C”{
#恩迪夫
/*
*类别:com_cooltrickshome_RemapKeys
*方法:重新组装
*签字:(二)五
*/
JNIEXPORT void JNICALL Java_com_CoolTrickHome_RemapKeys_remapPassedKeys
(JNIEnv*,jobject,jint,jint);
#ifdef_uucplusplus
}
#恩迪夫
#恩迪夫
RemapKeys.cpp

#包括
#包括
#包括
#包括“RemapKeys.h”
静态HHOOK handleKeyboardHook=NULL;
HINSTANCE hInst=NULL;
DWORD oldKey=NULL;
DWORD newKey=NULL;
静态LRESULT回调LowLevelKeyboardProc(int-nCode、WPARAM-WPARAM、LPARAM-LPARAM){
如果(nCode==HC\U动作)
{
KBDLLHOOKSTRUCT*p=(KBDLLHOOKSTRUCT*)lParam;
如果(p->vkCode==oldKey)
{
交换机(wParam){
案例WM_键控:{
keybd_事件(newKey,0x1D,KEYEVENTF_EXTENDEDKEY | 0,0);
打破
}
案例WM_KEYUP:{
keybd_事件(newKey,0x1D,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,0);
打破
}
违约:
wParam=WM_SYSKEYDOWN;
打破
}
返回1;
}
}
返回CallNextHookEx(handleKeyboardHook、nCode、wParam、lParam);
}
JNIEXPORT void JNICALL Java_com_CoolTrickHome_RemapKeys_remapPassedKeys
(JNINEV*,jobject,jint oldValue,jint newValue){
/*printf(“您的邮件在此\n”);
fflush(stdout)*/
oldKey=oldValue;
newKey=newValue;
hInst=GetModuleHandle(NULL);
handleKeyboardHook=SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,hInst,0);
味精;
while(GetMessage(&msg,NULL,0,0))
{
翻译信息(&msg);
发送消息(&msg);
}
}

我做错了什么?有人能帮我吗?提前谢谢。

这些头文件不在默认的包含路径中,因此您也需要包含它们(如果您没有,请下载它们)请看以下内容:@magmine好的,谢谢不在任何特定位置,因为您只需要路径,我共享的链接可能会有所帮助you@magmine我也改了,包括“pch.h”。所以它建造成功了。我希望它能起作用:)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_cooltrickshome_RemapKeys */

#ifndef _Included_com_cooltrickshome_RemapKeys
#define _Included_com_cooltrickshome_RemapKeys
#ifdef __cplusplus
extern "C" {
#endif
    /*
     * Class:     com_cooltrickshome_RemapKeys
     * Method:    remapPassedKeys
     * Signature: (II)V
     */
    JNIEXPORT void JNICALL Java_com_cooltrickshome_RemapKeys_remapPassedKeys
    (JNIEnv*, jobject, jint, jint);

#ifdef __cplusplus
}
#endif
#endif
#include <stdio.h>
#include <windows.h>
#include <w32api.h>
#include "RemapKeys.h"

static HHOOK handleKeyboardHook = NULL;
HINSTANCE hInst = NULL;
DWORD oldKey = NULL;
DWORD newKey = NULL;

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

    if (nCode == HC_ACTION)
    {
        KBDLLHOOKSTRUCT* p = (KBDLLHOOKSTRUCT*)lParam;
        if (p->vkCode == oldKey)
        {
            switch (wParam) {

            case WM_KEYDOWN: {
                keybd_event(newKey, 0x1D, KEYEVENTF_EXTENDEDKEY | 0, 0);
                break;
            }

            case WM_KEYUP: {
                keybd_event(newKey, 0x1D, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
                break;
            }

            default:
                wParam = WM_SYSKEYDOWN;
                break;
            }
            return 1;
        }
    }
    return CallNextHookEx(handleKeyboardHook, nCode, wParam, lParam);
}

JNIEXPORT void JNICALL Java_com_cooltrickshome_RemapKeys_remapPassedKeys
(JNIEnv*, jobject, jint oldValue, jint newValue) {

    /* printf("Your message here\n");
       fflush(stdout);*/

    oldKey = oldValue;
    newKey = newValue;

    hInst = GetModuleHandle(NULL);
    handleKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInst, 0);

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}