Tag: dll

如何在Visual C ++中构build导入库(.lib)和DLL?

我想有一个单一的Visual Studio项目,build立一个DLL文件和一个导入库(.lib)文件。 (导入库是一个静态链接的库,负责在使用它的其他项目中加载该DLL文件)。 所以我去了Visual Studio C ++ 2008速成版,创build了一个types为Class Library的New Project,并将“Configuration Type”设置为“Dyanamic Library(.dll)”。 但是当我构build解决scheme时,我看到的唯一相关的输出文件是一个DLL文件; 我没有看到任何LIB文件生成。 我查看了项目目录和所有子目录(Release和Debug)。 我相信可以同时构build一个LIB和一个DLL文件,因为在MSDN上它说“链接器在build立DLL时创build导入库”。 此外, 本网站的另一个用户正在使用Visual C ++同时创buildLIB和DLL文件 。 那我该怎么做呢?

我如何找出哪个DLL可执行文件将加载?

如果我有一个Windows可执行文件,我怎样才能找出哪个DLL将加载? 我只是在谈论哪些将被静态加载,而不是可能会加载dynamicLoadLibrary的东西。

__declspec(dllimport)真的意味着什么?

我看到了这样的Qt源代码: class Q_CORE_EXPORT QBasicAtomicInt { public: … }; 哪个Q_CORE_EXPORTmacros定义如下: define Q_DECL_IMPORT __declspec(dllimport) 那么__declspec(dllimport)是什么意思?

.dll,.lib,.h文件有什么区别?

为什么在一个项目中应该包含一些* .lib,.h或其他文件? 这些东西用于什么?

我如何使我的托pipeNuGet包支持C ++ / CLI项目?

当我从C#项目中使用它的时候,我做了一个NuGet包。 它包含lib/net40目录中的一个DLL,并将该DLL作为参考添加。 既然NuGet支持C ++,那么我怎样才能真正修改我的包,以便可以在C ++ / CLI项目中将该DLL添加为托pipe引用? 我找不到解释这个的任何教程。 如果我尝试只是添加包,我得到以下错误: 您正在尝试将此软件包安装到以“Native,Version = v0.0”为目标的项目中,但该软件包不包含任何与该框架兼容的程序集引用或内容文件。 有人会认为解决scheme是把文件放在lib / native下,但根据http://docs.nuget.org/docs/reference/support-for-native-projects ,这是不支持的。 另外,简单地将DLL直接放在lib下,似乎没有任何作用。 显然,我应该用build / native下的.props或.targets文件来做到这一点,但是我需要将这些文件放到这些文件中才能使其工作?

在Windows上__cdecl或__stdcall?

我目前正在开发Windows的C ++库,将作为DLL分发。 我的目标是最大化二进制互操作性; 更确切地说,我的DLL中的函数必须可以从多个版本的MSVC ++和MinGW编译的代码中使用,而无需重新编译DLL。 但是,我很困惑哪个调用约定是最好的, cdecl或stdcall 。 有时我会听到像“C调用约定是唯一一个保证与编译器相同的调用约定”这样的语句,这与“ 对cdecl的解释有一些变化,特别是在如何返回值 ”等语句形成对比。 这似乎并不阻止某些库开发人员(如libsndfile )在分发的DLL中使用C调用约定,而没有任何可见的问题。 另一方面, stdcall调用约定似乎是明确的。 据我所知,所有的Windows编译器基本上都需要遵循它,因为它是用于Win32和COM的惯例。 这是基于这样一个假设:没有Win32 / COM支持的Windows编译器不会非常有用。 在论坛上张贴了很多代码片段声明函数为stdcall但我似乎无法find明确解释为什么一个单一的职位。 这里有太多相互矛盾的信息,每次search都会给我不同的答案,这并不能帮助我在两者之间做出决定。 我正在寻找一个清晰的,详细的,辩论的解释,为什么我应该select一个在另一个(或为什么两个是相等的)。 请注意,这个问题不仅适用于“经典”function,而且适用于虚拟成员函数调用,因为大多数客户端代码将通过“接口”,纯虚拟类(以下描述的模式在这里和那里 )与我的DLL接口。

有没有任何本地DLL导出function查看器?

是否有任何免费的本机Windows DLL导出function查看器,其中显示函数名称,以及它们的参数列表?

如何查看DLL函数?

我有一个我想查看的DLL文件。 我想查看在该DLL中使用的function,任何人都可以帮助我?

什么是在DLL中,它是如何工作的?

我总是在我的C#代码中引用DLL,但是我仍然想澄清一些问题。 这是关于DLL的问题的一个大脑转储。 我知道一个DLL是一个dynamic链接库,这意味着另一个程序可以在运行时访问这个库来获得“function”。 但是,考虑以下与Web.dll和Business.dll ASP.NET项目( Web.dll是前端function,它引用Business.dll的types和方法)。 Web.dll在什么时候dynamic链接到Business.dll ? 在使用Word(等等)的时候,你会注意到很多Windows硬盘抖动看起来很小的任务,而且我认为Word会closures,并且dynamic链接到其他DLL的function。 1A。 另外,什么加载和链接的DLL – 操作系统或一些运行时框架,如.NET框架? 1B。 什么是“连接”的过程? 是否进行兼容性检查? 加载到相同的内存? 链接究竟意味着什么? 什么实际上执行DLL中的代码? 它是由处理器执行还是在处理器理解DLL中的代码之前还有另外的翻译或编译阶段? 2A。 在使用C#.NET构buildDLL的情况下,直接运行.NET框架还是操作系统? Linux上的DLL是否可以在Windows系统上运行(如果存在这样的情况),还是他们在操作系统? DLL是特定于特定框架的吗? 使用C#.NET构build的DLL可以由使用Borland C ++构build的DLL使用吗? 4A。 如果4的答案是“否”,那么DLL的重点是什么? 为什么不是各种框架使用自己的格式链接文件? 例如:.NET中内置的.exe文件知道.abc文件types可以链接到代码中。 回到Web.dll / Business.dll例子 – 要获得一个类的客户,我需要从Web.dll引用Business.dll 。 这意味着Business.dll包含某种types的规范,即客户类实际上是什么。 如果我已经在Delphi中编译了我的Business.dll文件,那么C#会理解它,并且能够创build一个客户类,或者是否有某种标题信息或者某种表示“嗨,对不起,你只能使用我delphiDLL“? 5A。 同样适用于方法; 我可以在DLL中编写一个CreateInvoice()方法,用C ++编译它,然后从C#中访问并运行它? 什么停止或允许我这样做? 关于DLL劫持的问题,当然,replace(坏)DLL必须包含正在被劫持的方法签名和types。 我想这不会很难做,如果你能找出原始DLL中有什么方法可用。 6A。 什么在我的C#程序是决定我是否可以访问另一个DLL? 如果我的劫持DLL包含完全相同的方法和types的原始,但它是用另一种语言编译的,它会工作吗? 什么是DLL导入和DLL注册?

如何为现有的.exe,.dll设置版本信息?

作为我们构build过程的一部分,我需要为所有编译的二进制文件设置版本信息。 一些二进制文件已经有版本信息(在编译时添加),有些则没有。 我希望能够应用以下信息: 公司名 版权声明 产品名称 产品描述 文件版本 产品版本 所有这些属性都由构build脚本指定,并且必须在编译之后应用。 这些是用C ++ Builder 2007编译的标准二进制文件(不是程序集)。 我怎样才能做到这一点?