将第三方 dll 链接到我的 dll

Posted

技术标签:

【中文标题】将第三方 dll 链接到我的 dll【英文标题】:Link third party dll to MY dll 【发布时间】:2013-07-02 16:23:46 【问题描述】:

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

我的 c++ 代码与第三方 dll 链接良好,但 我的问题是我如何让我的 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;

【问题讨论】:

将其转成DLL并使用JNI。 这是***.com/questions/17349037/… 和***.com/questions/17353245/… 的延续。 【参考方案1】:

尝试遵循这样的 JNI 教程:

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

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

【讨论】:

以上是关于将第三方 dll 链接到我的 dll的主要内容,如果未能解决你的问题,请参考以下文章

将一个 dll 作为嵌入式资源嵌入到另一个 dll 中,然后从我的代码中调用它

如何让我的应用程序使用 Visual Studio 找到第三方 DLL?

错误:程序无法启动,因为您的计算机中缺少 ImgProc.dll(第三方库)

如何将此 WPF 控件添加到我的 WinForm 中?

在 Visual C++ 中链接到旧的第三方 DLL

即使库链接,DLL 也会被忽略