Java创建.dll文件

标签 java c++ dll java-native-interface

我想用 java jni 创建 .dll。我的 .cpp 文件引用了 .dll 的外部 .lib 。当我编译此文件(使用 cl 命令)时出现错误:

   LNK2019: unresolved external symbol "__declspec(dllimport) unsigned long __stdcall ConnectDevice(char const *, unsigned      long)" 
   (__imp_?ConnectDevice@@YGKPBDK@Z)... fatal error LNK1120: 1 unresolved externals

我可以从使用另一个 .lib 和 .dll 的 .cpp 创建 .dll 吗?

最佳答案

是的,你可以。您可以直接链接到它,方法是将其放入您的 .c/.cpp 文件之一:

#pragma comment(lib,"libname")

或在命令行(对于 MSVC 不常见)或在 IDE 选项中指定库。

更棘手的是确保找到您的 DLL。如果两个 DLL 都保存在同一个文件夹中,并且没有使用 SetDllDirectory()(不寻常),那么应该可以找到它。

Dependancy Walker (depends.exe) 等工具可以帮助解决此类问题。或者 Process Explorer (procexp) [please google] 可以显示每个进程加载了什么 DLL(ctrl+d 那里)。

关于Java创建.dll文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6260798/

相关文章:

c++ - boost::io_service post 方法是否会导致新的分配?

c# - 在加载应用程序目录之外的目录中加载依赖于其他程序集的程序集?

java - Flesch-Kincaid 测试 (java)

java - 安装了基于 APR 的 Apache Tomcat Native 库的不兼容版本 1.1.12,而 Tomcat 需要版本 1.1.17

java - 如何实现 LIMITLESS String 和 StringBuilder

c# - 当将一个类从 c# 编码到 native c++ 时,它会克隆吗?

java - 带有 Spring Cloud Netflix Eureka 的 Node.js 客户端应用程序

c++ - MSVC 内置宏 _M_AMD64 和 _M_X64 之间的区别

c++ - 如何在 CMake 项目中使用外部 DLL

c# - 如何在 C# 中像 Visual Basic 一样使用 Lib