Articles of DLL

如何将第三方Windows DLL组织到我的应用程序文件夹中的子文件夹中?

我们有一个应用程序依赖于许多第三方DLL组。 不幸的是,这些第三方DLL的编写者没有一个非常一致地命名它们,所以很难看出哪个DLL是什么组的一部分。 为了尝试和pipe理这个,我们希望将第三方DLL组放在应用程序文件夹的一个文件夹中,而不是像这样在应用程序旁边。 –> Application Folder –> Application.exe –> MyDLL1.dll –> MyDLL2.dll –> Third Party 1 DLL folder –> Third Party 1 DLL 1.dll –> Third Party 1 DLL 2.dll –> Third Party 1 DLL 3.dll –> Third Party 2 DLL folder –> Third Party 2 DLL 1.dll –> Third Party 2 DLL 2.dll –> […]

在Windows下dynamic加载的库的地址范围

我有一个工作程序,加载LoadLibrary插件。 新的要求:在代码的某一点,我给了一个指针,我需要testing这个指针是指向代码还是插件的静态数据。 bool is_pointer_into_plugin(void *p, HMODULE h); 等价地,我需要检索指针指向的插件(如果有的话)。 我还需要知道指针是指向主程序的代码还是静态数据(最好是区分只读区域和读写区域)。 HMODULE plugin_containing_pointer(void *p); 等同地,我需要能够检索插件映射的范围(地址和大小)。 我也需要这个主要程序的信息。 我如何实现is_pointer_into_plugin ,或者plugin_containing_pointer ,或者其他什么东西? 如有必要,我可以更改对LoadLibrary的调用。 查找应该尽可能快,加载时间代码不需要很快。 在单独的进程中运行插件并通过共享内存进行通信不是一种select。 该程序必须运行在Windows XP和以上(和Linux,但这是另一个问题 )。 我需要的信息或多或less是Sysinternals公用事业listdlls报告的,所以我试图找出它是如何实现的。 我看到了使用NtQueryInformationProcess来检索链接到LDR_DATA_TABLE_ENTRY的PEB结构的LDR_DATA_TABLE_ENTRY 。 看起来很有希望,但是: 我可以看到一个DllBase ,看起来它可能是每个DLL的起始地址(是吗?),但没有大小。 NtQueryInformationProcess的文档将NtQueryInformationProcess标记为不可移植的,但是并不表示我正在尝试做什么。 在我的系统中, PEB中唯一的字段是BeingDebugged和SessionId ,加上一些Reserved N字节数组 – 不是一个好兆头。 我如何枚举插件的地址范围,或testing一个指针是否在一个插件,或确定一个指针指向哪个插件?

问题使用pantheios文件股票后端

我想使用pantheios文件股票后端从我的dlllogin在c + +。 文件被创build,但没有被写入文件。 这是我的代码片段 if (pantheios::pantheios_init() < 0) { MessageBox(NULL, "Init Failed", "fvm", MB_OK); }else { MessageBox(NULL, "Init Passed", "fvm", MB_OK); pantheios::log_INFORMATIONAL("Logger enabled!"); } DWORD pid = GetCurrentProcessId(); sprintf_s(moduleName, sizeof(moduleName), "C:\\%d.log", pid); pantheios_be_file_setFilePath(moduleName, PANTHEIOS_BE_FILE_F_TRUNCATE,PANTHEIOS_BE_FILE_F_TRUNCATE, PANTHEIOS_BEID_LOCAL); pantheios::log(pantheios::debug, "Entering main"); 我得到Init Passed消息框,但没有日志语句被转储到文件中。

在DLL中声明的全局variables会发生什么?

比方说,我用C ++编写了一个DLL,并用一个不重要的析构函数声明了一个类的全局对象。 当DLL被卸载时会调用析构函数吗?

我如何从Ruby调用Windows DLL函数?

我想使用Ruby访问DLL中的函数。 我想使用C的低级访问,同时仍然保持编写Ruby代码的简单性。 我如何做到这一点?

用Go 1.7构build一个dll

有没有办法在Windows下build立一个DLL的Go v1.7? 我尝试了一个经典 go build -buildmode=shared main.go 但是得到 -buildmode = shared在windows / amd64上不受支持 更新好的,我有我的答案。 对于那些有兴趣的人: https : //groups.google.com/forum/#!topic/golang-dev/ckFZAZbnjzU

在命令行上创build并链接到Win32 DLL的确切步骤是什么?

这是我的库Lib.c文件: #include <stdio.h> int helloworld(){ printf("Hello World DLL"); } 这是我的exe Main.c文件: int helloworld(); int main(int argc, char** argv){ helloworld(); } 我想创buildLib.dll和Main.exe ,其中Lib.dll来自Lib.c和Main.exe链接。 具体步骤是什么?

如何正确创build一个nim / nimrod的Windows DLL

我想从nim代码创build一个dll。 但是我没有注册一些其他出口比“NimMainInner”。 即使我尝试这个简单的例子,它不工作: proc Hellow(): cint {.exportc.} = echo("hello") return 1 我用nim c –app:lib libh4x.nim编译它nim c –app:lib libh4x.nim和nim c -d:release –app:lib –no_main libh4x.nim 我使用Nim Compiler Version 0.11.2 (2015-05-04) [Windows: i386] 检查我使用dllexp.exe的DLL。 我也试图用python ctypes加载dll,但是我的导出都没有显示或可调用。 不过,我可以用hexeditor在生成的dll中看到proc的名字。 我在这里错过了什么?

如何将parameter passing给DLL初始化(例如,当通过LoadLibrary加载)?

如何将parameter passing给通过LoadLibrary加载的DLL的初始化函数? 有没有可能? 没有诉诸某种导出的function或共享内存,即是。

如何获得一个DLL加载过程句柄

我试图得到从DLL加载DLL的过程的句柄。 我的方法是:在DLL_PROCESS_ATTACH我调用EnumWindows(EnumWindowsProc,NULL); 我的EnumWindowsProc实现如下: BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam) { if(GetCurrentProcessId() == GetWindowThreadProcessId(hWnd,NULL)){ MessageBox(hWnd,L"I loaded your dll!",L"it's me",MB_OK); return TRUE; } return FALSE; } 问题是,GetCurrentProcessId()== GetWindowThreadProcessId(hWnd,NULL)从来没有真正的(如果我放置在if块的一切工作,但它被调用每个列出的窗口之外的messagebox调用)。 有没有其他方法可以说明问题? 这种做法是完全错误的还是我错过了一些东西? 提前感谢