草庐IT

c# - 将 C++ .lib 和 .h 文件导入 C# 项目?

我刚刚开始了一个C#项目,并且想要导入一个C++.lib及其对应的头(.h)文件。我读过各种帖子都提到.dll而不是.lib,这让我很困惑。下图显示了我所指的.lib和.h文件,我所做的只是将它们拖到项目中。谁能给我一个更清晰的解释来说明如何去做?我相信它不会像看起来那么难。 最佳答案 不幸的是,这是一个不平凡的问题。原因主要是因为C++是一种非托管语言。C#是一种托管语言。托管和非托管是指一种语言如何管理内存。C++你必须自己做内存管理(分配和释放),C#.NETFramework使用garbagecollector进行内存管理.

c++ - fatal error LNK1104 : cannot open file 'gdi32.lib'

每次我尝试运行我的代码时都会收到此错误。我已经尝试了一切,安装了SDK,但我仍然遇到同样的错误。1>------Buildstarted:Project:ConsoleApplication6,Configuration:DebugWin32------1>LINK:fatalerrorLNK1104:cannotopenfile'gdi32.lib'==========Build:0succeeded,1failed,0up-to-date,0skipped==========我使用的是Windows7和VisualStudio2012。 最佳答案

c++ - .h、.lib 和 .dll 如何协同工作

要使用FreeGlut库功能,我必须执行以下操作,将freeglut.h添加为头文件将freeGlut.lib添加为资源文件将freeGlut.dll复制到我的windows/SysWOW64文件夹中但是,整个系统(.h、.lib和.dll)是如何相互关联的呢?我知道,最基本的是添加一个带有类声明的头文件并将正文写入其各自的源文件。最后将头文件包含到您的主应用程序中。 最佳答案 您必须包含头文件,以便编译器理解库公开/使用的各种类型和函数的声明。库文件(lib或dll)包含使用库的代码链接到的目标代码。对于lib,链接是静态的,并且

c++ - memory_order_seq_cst 和 memory_order_acq_rel 有何不同?

存储是释放操作,加载是两者的获取操作。我知道memory_order_seq_cst是为了对所有操作施加额外的总排序,但我没有建立一个例子,如果所有memory_order_seq_cst替换为memory_order_acq_rel。我是否遗漏了什么,或者差异只是文档效果,即如果一个人不打算使用更宽松的模型并使用memory_order_acq_rel,则应该使用memory_order_seq_cst何时约束松弛模型? 最佳答案 http://en.cppreference.com/w/cpp/atomic/memory_ord

c++ - .LIB 和 .OBJ 文件有什么区别? (Visual Studio C++)

我知道.OBJ是编译一个编译单元的结果,.LIB是一个静态库,可以从几个.OBJ创建,但这种区别似乎只在编译单元的数量上。还有其他区别吗?是相同还是不同的文件格式?当我想知道在两个(或更多).LIB中定义的相同静态变量是否在链接到最终可执行文件期间被合并时,我遇到了这个问题。对于.OBJ,变量被合并。但在.LIB中是否也一样? 最佳答案 .LIB文件是与索引连接在一起的.OBJ文件的集合。链接器的处理方式也应该没有区别。 关于c++-.LIB和.OBJ文件有什么区别?(VisualStu

C++:#pragma comment(lib, "XXX") 实际上对 "XXX"做了什么?

我的背景是C#,但我必须维护一些遗留(MS)C++。在那个代码库中我偶然发现:#pragmacomment(lib,"OtherLib700.lib")其中700是一些版本控制。另外lib是一个同名的DLL。我最初认为该程序将依赖于DLL,但在将其从系统中删除后,该程序仍然可以工作。不过,还有一个更新版本的DLL,名为OtherLib900...似乎程序“包含”了lib的代码,因此它不再依赖于外部DLL。(或者程序“自动”使用较新的DLL...)哪一个是正确的?有没有办法进一步证实“假设”? 最佳答案 那个pragma用于链接到指定

c++ - 尽管在 zlib.lib 中链接,但 Unresolved external 问题

我一直在尝试编译一个在VC++2010中使用zlib压缩的应用程序。我得到错误:errorLNK2019:unresolvedexternalsymbolinflateInit2referencedinfunction...如果我不链接库,这不会是不寻常的。我链接了静态发布的zlib库。我已经设法让这个完全相同的库和头文件配置在不同的解决方案中完美运行,因此这种行为非常出乎意料。任何想法都会受到赞赏。链接器命令行:/OUT:"C:\DocumentsandSettings\Suthke\MyDocuments\VisualStudio2010\Projects\SBRapGen2\De

c++ - 错误 LNK2005 : new and delete already defined in LIBCMTD. lib(new.obj)

我有一个包含两个项目的VisualStudio2005解决方案。一个是静态库,另一个是用于测试静态库中功能的可执行文件。静态库使用MFC。构建解决方案时出现以下错误。uafxcwd.lib(afxmem.obj):errorLNK2005:"void*__cdecloperatornew(unsignedint)"(??2@YAPAXI@Z)alreadydefinedinLIBCMTD.lib(new.obj)uafxcwd.lib(afxmem.obj):errorLNK2005:"void__cdecloperatordelete(void*)"(??3@YAXPAX@Z)alr

c++ - std::rel_ops 的惯用用法

使用std::rel_ops的首选方法是什么?要将完整的关系运算符集添加到类中?This文档建议usingnamespacestd::rel_ops,但这似乎有很大的缺陷,因为这意味着包含以这种方式实现的类的header也会将完整的关系运算符添加到所有其他具有定义operator的类中。和operator==,即使这是不希望的。这有可能以惊人的方式改变代码的含义。附带说明-我一直在使用Boost.Operators这样做,但我仍然对标准库感到好奇。 最佳答案 用户定义类的运算符重载的工作方式是通过参数相关查找。ADL允许程序和库避免

c++ - 知道 .lib 是静态的还是导入的

我有从C代码编译的.lib文件。我怎么知道在运行时是否需要这个独立的静态库或只需要一个导入库和DLL?我缺少一些dumpbin选项吗? 最佳答案 使用lib命令。如果它是静态的,lib会在里面显示一堆.obj文件。如果它是隐含的,则不是这样。lib/listfoo.lib会做的。另见:https://learn.microsoft.com/en-us/cpp/build/reference/managing-a-library 关于c++-知道.lib是静态的还是导入的,我们在Stack