草庐IT

c++ - 无法在动态链接库 sfml-graphics-2.dll 中找到过程入口点 _ZSt24__throw_out_of_range_fmtPKcz

今天我决定下载、安装并尝试使用SFML2.2。我还使用MinGW编译器下载了Code::Blocks。我设置了所有内容并正确安装了所有内容(或者我认为如此)并尝试运行示例代码以查看它是否有效:#includeintmain(){sf::RenderWindowwindow(sf::VideoMode(200,200),"SFMLworks!");sf::CircleShapeshape(100.f);shape.setFillColor(sf::Color::Green);while(window.isOpen()){sf::Eventevent;while(window.pollEv

c++ - 具有不同 C/C++ 运行时库的 exe 和 dll 之间的接口(interface)

给定:可执行文件使用dll。他们有不同的c/c++运行时。它们之间的接口(interface)存在哪些限制?此外,它们使用相同的编译器、相同的Boost版本(但预编译的boost库不同)。我知道不同的运行时可以有不同的堆。因此,delete必须对应同一个堆中的new。最重要的是我们不能通过接口(interface)传递STL对象,因为当我们构建exe时,STL对象与一个运行时链接并且在构建dll时,相同的对象(如果我们通过引用传递它或通过接口(interface)复制)将与另一个运行时链接。另一个运行时可以具有该对象的不同实现。让我们考虑案例:我认为以下是安全的。具有参数的Dll导出函

c# - 通过 COM 从 C++ 解决方案调试 C# dll

我有一个C++解决方案。启动项目是一个exe。在该解决方案中,有许多为COM互操作注册的C#dll(针对.NETFramework2.0)。当我在C#代码中放置一个断点时,我得到空心的红色断点"Nonativesymbolsinsymbolfile"我尝试在调用COM方法的启动项目上将ProjectPropertyPages->Debugging->DebuggerType设置为Mixed。我检查了Debug->Windows->Modules。它已加载我的dll,符号状态为"Nonativesymbolsinsymbolfile"。这不是世界末日,因为如果我执行Debug->Star

c# - P/Invoke 是否执行 DLL 然后将其关闭?

如果我使用C#来P/Invoke某个DLL,实际的C++DLL是否会在调用期间运行然后关闭,从而破坏所有使用的内存?还是.NET会在非托管“堆”中负责C++DLL使用的内存,并在我每次调用静态函数时将指向这些对象的指针指向C++DLL?当我需要某个C++项目使其内存持久化时,我是否应该创建一个ActiveX/COM服务器以使其内存持久化,并且能够从C#中调用它? 最佳答案 IfIuseC#toP/InvokeacertainDLL,willtheactualC++DLLberunforthedurationofthecallandt

c# - 如何在 Unity3D 中使用 C++ dll?

我知道thissimilarquestion,但它没有回应我的问题。我使用VisualStudio2010编写了两个.dll。一个是用C++编写的,并与用C++编写的SDK通信。另一个是该C++库的C#包装器,因此它可以在C#上下文中使用。我的计划是这样我就可以在Unity3D中使用我的代码,但显然事实并非如此。似乎Unity3D不允许我将.dll导入为Assets,如果它们不是.NET程序集。所以我可以添加我的C#包装器,但不能添加C++dll。每当我尝试访问C++库时,这都会导致DllNotFoundException。我试过简单地将C++库复制到Assets/Plugins文件夹

c++ - 如何跨 DLL 边界使用 Boost.Log?

我正在尝试整合Boost.Log在一个相当大的应用程序中,该应用程序由一个从DLL动态加载插件的主应用程序组成。最初的想法是传递一个loggingsource到插件,以便他们可以添加日志消息。但是,一旦来自DLL的代码尝试将消息记录到提供的源,应用程序就会因访问冲突而崩溃。方法一下面这个最小的例子说明了这个问题:intmain(intargc,char*argv[]){boost::log::sources::severity_logger_mtlogger;//ThisisokayBOOST_LOG_SEV(logger,boost::log::trivial::info)其中log

c++ - VS 2005 C++ 项目中的 msvcr90.dll 依赖项

我在VS2005中为nativeWin32/非托管C++创建了一个DLL项目,将其命名为myProj.dll。它依赖于第3方商业DLL,后者又依赖于msvcr90.dll(我假设它是从VS2008项目构建的)。我将其命名为thirdParty.dll。我的DLL项目在VS2005中构建得很好。我构建了一个链接到myProj.lib的测试应用程序(同样是VS2005Win32C++)。(顺便说一句,根据.lib的小尺寸以及在运行时应用程序必须找到myProj.dll的事实来判断,我猜测.lib只是调用的包装器加载实际DLL的loadLibrary();是否接近?)我的问题是,在运行时,测

c++ - 程序无法启动,因为缺少opencv_core2410d.dll

我安装了visualstudio2012。我有windows8.1。然后我在c分区中提取opencv2.4.10。创建可视化C++项目->win32控制台应用程序。因为我有x64机器buildmenu->Configurationmanager->platform->x64然后我在我的vs项目中设置以下配置。project->properties->configuration->allconfigurationVC++Directories->LibraryDirectories->C:\opencv\build\x64\vc11\bin,C:\opencv\build\x64\vc1

c++ - 无法引用库项目 (DLL),因为缺少 .lib 文件

我正在尝试启动一个C++游戏引擎项目。我对dll和lib的了解不多,但我认为引擎本身就是一个dll,我会有单独的dll项目,如引擎使用的渲染器、输入等,引擎dll将是游戏使用。我似乎在demo.exe项目中很好地引用了引擎项目(通过添加引用并添加到其他包含目录的路径)但是当我尝试在引擎dll项目中添加对渲染器dll项目的引用时,我'得到:errorLNK1104:cannotopenfile'MyPath\Renderer.lib'MyPath\LINKEngine为什么提到库? 最佳答案 许多DLL都带有相应的LIB库,仅在链接阶

c++ - 如何检测给定的 PE 文件(exe 或 dll)是 64 位还是 32 位

我需要检测给定的.dll或.exe文件是32位还是64位目前我只有一个解决方案:从指定文件中读取PEheader并从那里获取“机器”字段。(规范:MicrosoftPortableExecutableandCommonObjectFileFormatSpecification(.docx文件)在“3.3.COFF文件头(对象和图像)”部分)此字段最多可包含大约20个值。其中三个是:IMAGE_FILE_MACHINE_I386(==32bit)IMAGE_FILE_MACHINE_IA64(==64bit)IMAGE_FILE_MACHINE_AMD64(==64bit)我的问题:1)