Articles of DLL

如何正确包含windows.h并将最低版本设置为XP

我目前正在构build一个C ++ DLL,并且在主DLL的.cpp文件的顶部有这个。 这当前正在导致警告"Warning C4005: '_WIN32_WINNT' : macro redefinition" 。 我做错了什么? 我需要包括windows.h , SDKDDKVer.h并将最低的Windows版本设置为XP。 我如何纠正我的代码? // System Includes #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <d3d9.h> // Windows Version #define _WIN32_WINNT _WIN32_WINNT_WINXP #include <SDKDDKVer.h>

微软ICertAdmin2接口从Python ctypes

我试图从ctypes使用Python的Microsofts ICertAdmin2接口。 http://msdn.microsoft.com/en-us/library/windows/desktop/aa383234(v=vs.85).aspx 到目前为止,我可以加载Certadm.dll。 例如 import ctypes # Load DLL into memory. dll = ctypes.WinDLL ("c:\\windows\\system32\\Certadm.dll") 但是,我不知道我现在需要做什么来访问ICertAdmin2内的方法,例如ICertAdmin2 :: ImportKey。 任何指导将非常感激。 UPDATE 现在使用Python的“comtypes”库。 这就是我想要的。 >>import comtypes >>certadmin = CreateObject("CertificateAuthority.Admin") >>certadmin._ICertAdmin__com_DenyRequest('WIN-3CF41NBPT85\cjndem-CA', 42) Traceback (most recent call last): File "<input>", line 1, in <module> COMError: (-2147024809, 'The parameter is incorrect.', (u'CCertAdmin::DenyRequest: The parameter is incorrect. 0x80070057 (WIN32: 87)', […]

C ++ / CLI:公共ref结构生成C2011:'class'types的重定义

我有一个托pipeDLL项目中的头文件,如下所示: Enums.h: #pragma once … public ref struct ManagedStruct { Bitmap^ image; } … 这个头文件是从DLL中的另一个类和一个单独的可执行文件中引用的。 单独的托pipe结构正在生成: 错误C2011:'ManagedStruct':'类'types重新定义。 如果我将结构移动到DLL中的主头文件中,它可以正常工作,并且可以公开访问,所以这就是我正在做的事情,但是我非常想知道为什么当我将它移动到另一个文件时。 我已经检查了所有必要的包含和命名空间,并尝试了明显的头卫兵,无济于事; 我仍然得到错误。 非常感谢任何见解!

在同一进程中加载​​多个dll副本

我有一个由第三方生产的DLL,它具有某种内部数据结构,将其大小限制为X个元素。 所以基本上,它有一个以X为限的队列。 现在从我所知道的DLL是每个进程,但是有可能不止一次加载一个DLL? 也许每个线程? 在C#中? 或者在C ++ / CLI中? 我试图加载一个本地的C ++ DLL。

依赖于其他DLL的插件DLL

我正在编写一个DLL来插入另一个(第三方)应用程序。 该DLL将需要依赖另一组DLL(由于许可证原因,我不能静态链接)。 我想我的DLL是“xcopy-deployable”到任何目录。 我也不想要求将这个目录添加到path中。 如果我用通常的方法构buildDLL,Windows将拒绝加载DLL,因为它无法在当前进程旁边findDLL。 有没有什么好的select来帮助WindowsfindDLL? 回答一些问题: 该DLL是用C ++编写的。 额外的DLL是QT-dll。 我想将额外的DLL放在与我的插件DLL相同的文件夹中。 我可以从GetModuleFileName获取该文件夹的名称。 该应用程序是Firefox,该DLL是一个PKCS#11安全模块。 应用程序使用DL​​L的完整path加载DLL(用户在安装插件时提供它)。 要求将DLL放在System32中或应用程序旁边就可以工作,但这有点麻烦,可能会导致卸载程序出现问题。 LoadLibrary和GetProcAddress当然会起作用,但在我的情况下并不可行。 我在其他DLL中使用了数百个(如果不是数千个)方法。 我真的需要使用导入库。 我曾想过在DllMain中使用延迟加载的dll和SetDllDirectory 。 有没有人尝试过这样的事情?

std :: unique_lock <std :: mutex>禁止卸载

卸载dll时出现问题。 就像这个一样,退出不同。 我正在使用LoadLibraryA加载一个dll,然后调用一个函数,并closures与FreeLibrary的DLL。 但是,DLL不卸载,但FreeLibrary返回成功。 简化代码: void foo() { std::unique_lock<std::mutex> lock(mtx_); } 在debugging代码并查看Process Explorer时, unique_lock创build第二个线程, 但为什么 ? 此线程只要应用程序运行就运行。 没有什么别的; 没有其他句柄的DLL,没有其他function。 此外,该DLL仍然在程序中加载。 如果我删除上面的行,一切都很好。 DLL是卸载好,没有额外的线程。 所以我的问题是, 如何避免这种行为,为什么是unique_lock创build一个线程? 互斥体是用于multithreading,但在testing时,只有一个线程,加载DLL调用foo,并卸载DLL。 编辑: 我不知道这是否是在互斥体/ unique_lock的视觉工作室实施中的错误,但我通过使用boost的互斥体/ unique_lock解决了这个问题。

DLL封装和DLL的区别

我不知道什么是DLL包装。 有人能解释我吗? 1)什么是DLL包装? 2)它与DLL有什么不同? 3)如何使用它? 感谢致敬,

如何build立JNI .dll?

我在Eclipse中有一个包含一些JNI代码的Java项目。 JNI代码是跨平台的 – 适用于Windows和Linux。 我怎样才能build立一个DLL? 谢谢。

C#:无法从程序集加载types

在将Lucene.net和Lucene.net Contrib添加到C#MVC3之后,在第一次成功运行后,我得到了下面的消息。 收到此错误后,我需要完全清除C:\ Users \ Me \ AppData \ Local \ Temp \ Temporary ASP.NET Files,然后才能再次运行该项目。 我尝试手动删除Lucene文件(包括我的项目中的引用),并重新安装它们 – 无论是与NuGet和手动 – 但它总是相同的情况; 项目运行一次后,我开始得到以下错误: 注意:Contrib.Regex是Lucene.net Contrib的一部分。 Server Error in '/' Application. Could not load types from assembly Contrib.Regex, Version=2.9.4.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, errors: Exception: System.IO.FileLoadException: Could not load file or assembly 'Lucene.Net, Version=2.9.4.1, Culture=neutral, PublicKeyToken=85089178b9ac3181' or one of […]

sox FAIL util:无法加载MAD解码库(libmad)函数“mad_stream_buffer”

我为sox编译了libmad。 当我尝试读取一个MP3时,我得到这个消息: sox FAIL util:无法加载MAD解码库(libmad)函数“mad_stream_buffer”。 我错误地编译了项目吗?