java - 将第三方 dll 链接到我的 dll

标签 java c++ c dll jna

我正在尝试编写一些java代码来访问第三方dll中的方法。我已经使用 JNA 尝试直接映射到它(我可以调用没有结构作为参数的函数),但是在函数调用后尝试访问结构的字段时遇到了麻烦(它们没有更新)。 所以,我勇敢的新方法是尝试制作自己的 dll,它从我的 java 代码中获取原始变量类型,然后将它们放入适当的结构中以传递给第三方 dll。

我有与第三方 dll 链接良好的 C++ 代码,但我的问题是我如何让我的 Java 代码与此 C++ 代码一起使用?将 C++ 代码制作成 dll 是最简单的吗?如果是,我该怎么做? (因此将此代码本身转换为 dll。我使用 Visual Studio 2012 和 Eclipse Juno 作为我的 IDE)

此处为 C++ 代码 (.cpp)

#include <stdio.h>
#include <Windows.h>
#include "Header.h"



FINDNEODEVICES icsneoFindNeoDevices;
GETDLLVERSION icsneoGetDLLVersion;

//extern int __declspec(dllimport) add(int a, int b);
bool LoadLibDLL(HINSTANCE &hAPIDLL){
    hAPIDLL = LoadLibrary(L"icsneo40.dll");
    icsneoGetDLLVersion = (GETDLLVERSION) GetProcAddress(hAPIDLL,                   "icsneoGetDLLVersion");
    icsneoFindNeoDevices =    (FINDNEODEVICES) GetProcAddress(hAPIDLL,              "icsneoFindNeoDevices");
    return true;
}

int main() {

    HINSTANCE icsneo40;
    bool success = LoadLibDLL(icsneo40);
    printf("Version #: %d\n", icsneoGetDLLVersion());
    int aray [5] = {600, 600, 600, 100, 600};
    int *p = aray;
    int num = 10;
    int lResult = icsneoFindNeoDevices(65545,p,&num);
    printf("Serial NUmber: %d\n", aray[3]);
    getchar();
    return 0;

 }

标题(.h)

typedef int  (__stdcall *FINDNEODEVICES)(unsigned long DeviceTypes, int* myint, int *pNumDevices);
typedef int (__stdcall *GETDLLVERSION)(void);
extern FINDNEODEVICES icsneoFindNeoDevices;
extern GETDLLVERSION icsneoGetDLLVersion;

最佳答案

尝试遵循这样的 JNI 教程:

http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html

首先,按照教程获取可以调用 C++ 方法的 Java 方法。 然后,将 C++ 方法修改为与上面的代码类似,调用第三方 DLL。

关于java - 将第三方 dll 链接到我的 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17430776/

相关文章:

c++ - 结构运算符函数重载中的偶发段错误

c++ - 扫描用户输入以查找数组中声明的字符串

c - 多文件编译出错时停止 GCC

c++ - 处理安装依赖项的最佳方法?

c++ - 在 Windows 和 C 上恢复文件

c - 字符串表如何工作?

java - 在 Java 面板中将图像添加到 JLabels

java - 在 Bukkit 中将 args 组合成一个句子?

java - ActiveJDBC:save() 只为自动生成的主键生成插入?

java - 是否可以在没有 java 中的 main 和 static block 的情况下在控制台上打印消息?