如何解决使用嵌入式应用程序清单调用 DLL 函数通过 JNI
我正在尝试通过 C++ 调用 DLL 函数:
hinstDLL = LoadLibrary("MyDLL.dll");
if (hinstDLL != NULL)
{
HelloWorld = (FunctionFunc)GetProcAddress(hinstDLL,"HelloWorld");
if (HelloWorld != NULL)
HelloWorld();
FreeLibrary(hinstDLL);
}
这很好用,但问题是 MyDLL.dll 需要一个清单才能在某些硬件上正常工作,例如:
<?xml version="1.0" encoding="utf-8" ?>
<assembly
xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<description>Your app description here</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Dependency1" version="x.x.x.x" processorArchitecture="AMD64" />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Dependency2" version="x.x.x.x" processorArchitecture="AMD64" />
</dependentAssembly>
</dependency>
</assembly>
我读到 LoadLibrary 只适用于嵌入式清单,所以我尝试了没有成功。当我嵌入此清单并将 MyDLL 代码构建为 EXE 时,它可以正常工作。但是,当我尝试使用此嵌入式清单构建 DLL 并调用该函数时,它似乎忽略了清单。
我注意到的一些其他事情:
- 将清单添加到调用 MyDLL 函数的 C++ 程序时,它可以正常工作。不幸的是,这并没有为我解决它,因为我想最终通过 JNI 使用 DLL 函数,但我不知道如何将 JNI 与应用程序清单一起使用。
- 构建 EXE 时,清单位于 #1 上,构建 DLL 时,它位于嵌入的 #2 上(我使用的是 Visual Studio 2015,它会自动执行此操作),但我认为这是正确的行为。
- 清单实际上嵌入在 DLL 中,我能够通过 mt.exe 提取它,并且依赖的 DLL 位于 MyDLL 文件夹以及 C++ 程序的执行文件夹中。
不幸的是,我也没有收到有意义的错误消息(这与我在构建 EXE 时不使用清单时相同)...
有人知道我做错了什么吗? DLL 中不可能有应用程序清单吗?
是否有针对此 JNI 用例的解决方法?有什么方法可以获取有关问题的更多信息吗?
提前致谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。