Articles of DLL

如何从共享库调用函数?

从共享库/ DLL调用函数最简单和最安全的方法是什么? 我最感兴趣的是在linux上这样做,但如果有一个平台无关的方式会更好。 有人可以提供示例代码来展示如何进行以下工作,用户将自己的foo版本编译到共享库中? // function prototype, implementation loaded at runtime: std::string foo(const std::string); int main(int argc, char** argv) { LoadLibrary(argv[1]); // loads library implementing foo std::cout << "Result: " << foo("test"); return 0; } 顺便说一句,我知道如何编译共享库( foo.so ),我只需要知道一个简单的方法来加载它在运行时。

无法为Java进程设置LD_LIBRARY_PATH

我想从shell脚本中调用我的linux可执行文件。 在调用这个可执行文件之前,我想用特定的值来设置LD_LIBRARY_PATH。 我的shell脚本如下: Parent.sh(包含2行) – source set_env.sh – executable.so Set_env.sh – setenv LD_LIBRARY_PATH /proj/something 在从Linux控制台手动执行Parent.sh scipt时,将正确调用LD_LIBRARY_PATH来调用executable.so。 但是将它与java代码整合为: String[] commandArray ={"Parent.sh"}; Runtime runtime = Runtime.getRuntime(); Process javap = runtime.exec(commandArray); javap.waitFor(); LD_LIBRARY_PATH未设置为可执行文件 我希望说明是明确的:) 请让代码中知道最新错误。

从Linux使用Windows DLL

我们需要接口到第三方应用程序,但公司背后的应用程序不公开消息协议,并只提供Windows DLL的接口。 我们的应用程序是基于Linux的,所以我不能直接与DLL沟通。 我找不到任何现有的解决scheme,所以我正在考虑在Linux和Windows之间编写基于套接字的桥接,但是我确定这不是一个独特的问题,有人应该这样做。 您知道任何允许从Linux上的C应用程序调用Windows DDL函数的解决scheme吗? 它可以使用葡萄酒或单独的Windows PC – 无所谓。 提前谢谢了。

如何截取dll方法调用?

如何截取dll方法调用? 有什么可用的技术? 它只能在C / C ++中完成吗? 如何拦截从所有正在运行的进程到给定的DLL的方法调用? 如何拦截从给定的进程到给定的DLL的方法调用?

有没有更好的方式来加载在C + +的DLL?

现在我做这样的事情,如果我有很多我想在我的DLL中引用的函数,它似乎很混乱。 有没有一种更好,更干净的方式来访问函数,而不必为每个函数定义创build一个typedef,以便它将编译和正确加载函数。 我的意思是函数定义已经在.h文件中,我不应该重新声明他们后我加载函数(或我?)有没有比使用LoadLibary更好的解决scheme? 如果在Visual Studio 2005项目设置中可以做同样的事情,我不一定需要这个function。 BHannan_Test_Class.h #include "stdafx.h" #include <windows.h> #ifndef BHANNAN_TEST_CLASS_H_ #define BHANNAN_TEST_CLASS_H_ extern "C" { // Returns n! (the factorial of n). For negative n, n! is defined to be 1. int __declspec (dllexport) Factorial(int n); // Returns true iff n is a prime number. bool __declspec (dllexport) IsPrime(int n); } #endif […]

如何获取mscorlib.ni.lib(.Net Framework 3.5)的PDB文件

做了很多search之后,我仍然无法得到问题的解决scheme。 我有一个mdmp文件。 调用堆栈显示它正在使用mscorlib.ni.dll。 所以要获取函数信息,我需要得到它的pdb文件。 mscorlib.ni.dll的版本是2.0.50727.3655。 我相信它来自.Net Framework 3.5。 由于mscorlib.ni.dll是由ngen.exe生成的本机优化的dll,所以我需要使用ngen.exe createpdb生成此dll的pdf。 ngen.exe createpdb "C:\Windows\assembly\…\mscorlib.ni.dll" "C:\SymbolCache" 结果如下: 在“C:\ Windows \ Microsoft.NET \ Framework64 \ v3.5”文件夹中找不到ngen.exe 我可以在文件夹“C:\ Windows \ Microsoft.NET \ Framework64 \ v2”中findngen.exe,但没有createpdb选项。 我可以在文件夹“C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319”中findngen.exe,它确实支持createpdb选项,但报告错误。 Microsoft(R)CLR本机映像生成器 – 版本4.0.30319.18408版权所有(c)Microsoft Corporation。 版权所有。 在本机映像“C:\ Windows \ assembly \ NativeImages_v2.0.507 7_64 \ mscorlib \ 5cd1c2848ff40eb0a8c149706ee394fa […]

在程序启动时从另一个目录加载一个DLL

我的基本问题是:我的程序(MyProgram.exe)有一个来自另一个程序(OtherProgram)的DLL的依赖,我试图避免每次更新OtherProgram时重新打包一个新的DLL。 我想在启动时在OtherProgram的DLL中有MyProgram.exe链接,但是我不完全确定Windows允许这样做。 所以如果有某种解决方法也是可以接受的。 而在一些背景下,平台是Windows 7 x64,MyProgram.exe运行良好,当我在MyProgram.exe项目目录中创build一个符号链接到OtherProgram的安装目录中的DLL。 当我尝试运行它没有符号链接,我得到“程序无法启动,因为OtherProgramDLL.dll从您的计算机丢失”错误。 任何意见或相关信息的链接非常感谢! 编辑:澄清:DLL在编译时不链接,此问题在运行时出现

只为进程初始化关键部分一次

在一个multithreading的应用程序,有没有一种方法来确保只有一个关键部分初始化,除了把代码放在DLL main()?

DLL:在Linux for Linux上用MinGW编译C时无法识别文件格式

我在Linux上使用MinGW(特别是Ubuntu)来编译Windows的C程序。 我正在使用名为SFML的库,它是名为CSFML的绑定。 我使用-L和-l来定位库,但是当我编译时,我得到这个错误: win32/dll/csfml-audio-2.dll: file not recognized: File format not recognised 我不知道为什么。 这是我用来编译的命令: sudo i686-w64-mingw32-gcc -o wandering src/main.c src/constants.c src/Display/display.c **…some more c files in here…** src/Generation/perlinnoise.c $(pkg-config –libs –cflags glib-2.0) $(pkg-config –libs –cflags gee-1.0) -Iwin32/CSFML-2.1/include -Lwin32/dll -lcsfml-audio- 有谁知道为什么会发生? 我可以在没有SFML的情况下编译C程序,但用MinGW就可以了。

我应该与我的应用程序重新分配msvcrt.dll?

我应该重新分配msvcrt.dll与我的应用程序,并使用私人DLL如果一些应用程序的库dynamic依赖msvcrt.dll? 即与系统的msvcrt.dll(DLL地狱)可能的任何不兼容问题? 应用程序是针对Windows Server系统的。