草庐IT

dll丢失

全部标签

c++ - 清理DLL : _endthreadex() vs TerminateThread()中的线程

由于restrictionsonDllMain(我知道这对DLL中的全局和静态对象构造函数和析构函数同样适用),像带异步文件写入/刷新线程的单例记录器这样的简单事情变得太棘手了。单例记录器位于DLL中,并且对可执行文件的加载和卸载时的影响有限。我可以强制该可执行文件在使用前调用它的DLL初始化函数,因此在初始化函数中,我可以使用关键部分来保护一个变量,该变量告诉DLL是否已经初始化或这次是否需要初始化。通过这种方式避免了DllMain的初始化,这将导致死锁,因为我需要从初始化启动线程,并且线程使用DllMain的原因调用DLL_THREAD_ATTACH,并且获得与我们在DllMain

c++ - 在不丢失信息的情况下将 double 转换为 int64_t 并返回

这个问题可能有人问过,但我搜索过,找不到答案。我正在实现一个玩具虚拟机,其中OpCodes采用以下形式:std::tuple//instructionop1,op2我正在尝试将一个double值打包到其中一个操作数中,并在处理它时再次读回它。这不能可靠地工作。doubled=...autoa=static_cast(d);autob=static_cast(a)//sometimes,b!=d有没有办法将double的位表示打包成int64_t,然后读回该位模式以获得与以前完全相同的double? 最佳答案 static_cast执

c++ - cmake 引用了以下导入的目标,但丢失了

我有一个包含两个库(liba和libb)的存储库,而liba取决于libb。它们是单个存储库的一部分,并且是使用单个cmake“上下文”构建的。文件结构如下所示:├──CMakeLists.txt├──liba│├──CMakeLists.txt│├──internal││└──private.hh│├──module.cc│├──module.hh└──libb├──CMakeLists.txt├──other.cc└──other.hh一切都编译和安装没有任何问题。虽然,如果我尝试创建一个依赖于liba的新项目。像这样:cmake_minimum_required(VERSION3

c++ - 无法在 kernel32.dll 中找到过程入口点 InitializeConditionVariable

我正在运行生产者消费者问题(使用windows线程)。它编译成功但在运行时显示以下错误无法在动态库Kernel32.dll中找到过程入口点InitializeConditionVariable。你能说出是什么原因吗 最佳答案 这是一个仅在Vista及更高版本中可用的API函数。我猜你是在XP上运行这段代码。为避免意外使用仅在更高版本的Windows中可用的API函数,您需要定义_WIN32_WINNT宏:#define_WIN32_WINNT0x502//DesignedtorunonWindowsXPSP2andup#includ

c++ - DLL 存在时出现 System.DLLNotFoundException

当我们在程序中加载DLL时出现以下错误并抛出以下错误:UnabletoloadDLL'xxx.dll':Thespecifiedprocedurecouldnotbefound.(ExceptionfromHRESULT:0x8007007F)这对我来说没有意义,因为DLL存在并且在我们每次更改代码时都内置在我们的安装程序中。这个DLL已经几个月没有改变了,大约一周前我们新安装的拷贝才开始发生这种情况。有任何想法吗?有问题的项目是从.NET3.5应用程序调用的非托管C++项目。 最佳答案 可能是xxx.dll的依赖项之一未找到。您可

c++ - 构建不带/clr 选项的 dll

在visualstudio2005中如何在没有/clr选项的情况下进行编译?visualstudioprojectproperties->Configurationproperties->C/C++->CommandLine->Alloptions:此处/clr开关默认启用许多其他选项,但我无法编辑它。 最佳答案 在“常规”选项卡上的“项目属性”,您应该会看到“项目默认值”部分。将公共(public)语言运行时支持更改为不支持公共(public)语言运行时 关于c++-构建不带/clr选

c++ - 有什么方法可以将 3rd 方 DLL 中的静态变量重置为其原始值吗?

我们必须在开发过程中使用第3方DLL,遗憾的是我们无法修改它或指定库必须如何工作。原始库开发人员通过静态变量在他们的方法中引入了状态机制。例如:voidfoo(){staticinta=1;if(a==1){/*someinitlogic*/a=2;}}有时我们需要将库恢复到原始状态。有没有什么方法可以将静态变量重置为其原始值而无需任何系统“黑客攻击”?我们目前的解决方案是FreeLibrary/LoadLibrary,但我们想避免它。 最佳答案 您当前的解决方案是最干净的解决方案。唯一的选择是找出变量在DLL中的存储位置并直接修改

c++ - 为什么即使我只使用 os api 也会自动链接 msvcrt.dll?

我正在使用vs2010,每当我构建任何Windows应用程序(不使用mfc或标准库-仅原始api)时,msvcrt.dll都会链接到它。有很多应用程序是在vs上编译的,但没有这种依赖性。如何从我的应用程序中删除msvcrt.dll依赖项。 最佳答案 那是C运行时库,没有运行时就无法构建C++程序。对于VisualStudio2010,您实际上会链接msvcr100.dll,因为这是该版本编译器的MSVC运行时。普通的旧msvcrt.dll是MSVC6运行时,现在作为Windows系统组件提供。如果您的可执行文件链接到msvcrt.d

c# - 如何更改我的 C++ 代码以用作 C# 中的 DLL?

我正在学习如何从C#调用C++中的方法。我做了一些研究,Pinvoke似乎是一种不错的方式。如何将这个简单的C++代码转换成它应该如何在C#中调用的方式,以及如何编写要在C#中调用的方法?我有一个头文件:数学函数库.hnamespaceMathFuncs{classMyMathFuncs{public:doubleAdd(doublea,doubleb);MyMathFuncsgetClass();};}数学函数库.cpp#include"MathFuncsLib.h"namespaceMathFuncs{MyMathFuncsMyMathFuncs::getClass(){retur

c++ - 在 Windows DLL 中通过它的签名查找函数

已在DLL中找到一个函数地址。没有这个DLL的源代码,不是我的。这个DLL还真的不是经常改的,但是一改了,我反汇编找就成问题了。在网上看到一些关于给它签名的笔记,然后通过这个保存的签名找到它。能否就如何实现这一点提供一些想法或工作示例? 最佳答案 你可以通过代码签名扫描来实现,这是我过去做过的事情。该概念主要基于这样一个事实,即函数在更新之间通常不会发生太大变化,而只是简单地重新定位,因为它们被扩展或收缩的其他函数向前或向后推。我们以MessageBoxA为例,他的反汇编对我来说是这样的:765DEA11>8BFFMOVEDI,ED