草庐IT

c - 在没有宿主程序帮助的情况下,如何在同一个进程中协调不同的 DLL?

我正在寻找一种方法来协调同一进程中的DLL,以便在它们之间提供数据共享机制。目标是为所有DLL提供相同的共享代码,并让它们以这样一种方式进行协调,即由主程序加载的第一个将充当共享项的管理器,而其他人将使用此管理器。我无法修改主应用程序,因此不可能设置管理器并与其他DLL共享其内存地址。使用此机制的DLL集可能会有所不同,因此我不能明确假设其中一个将被加载。我考虑的一种解决方案是将内存地址添加到进程的环境变量中。第一个DLL会看到环境变量尚未设置,创建管理器对象并将变量设置为其地址。其他DLL会看到该变量并从中创建一个指向管理器对象的指针。这接近我想要的,但它似乎有点粗糙,因为不能保证环

c++ - 使用 dll 中的类时内存无效

这是我第一次尝试从dll导出类。我所做的是:-创建一个接口(interface)(只有纯虚方法)-使用不会导出的类在dll中实现此接口(interface)-该类有一个在其this指针上调用delete的释放方法-创建了一个带有静态方法的工厂类,该方法返回指向具体类的指针但作为接口(interface)。这个类是导出的。-返回对象的删除是通过调用其释放方法完成的。我从本教程中收集了所有这些aboutclassesindlls.问题是,当我在另一个项目中使用此dll时,一切正常,直到我对该对象调用释放函数。然后它会显示一个断言失败窗口,其中包含消息“_ASSERTE(_BLOCK_TYP

windows - 我如何知道我的 DLL 是如何加载的?

我的DLL如何检测它是隐式加载还是显式加载?示例MyTestDll.dlllibraryMyTestDll;usesSimpleShareMem,Windows,Dialogs;procedureDetectMethodDllLoad:bool;begin//?????//needtodetectloadingmethod-implicitorexplicitend;procedureMyTest;stdcall;beginifDetectMethodDllLoadthenShowMessage('WorkingProgram1(implicitdllload)')elseShowMe

windows - 无法让 xperfview 加载 DLL 的符号

我一直在用xperf竭尽全力为我正在分析的工具获取符号。我在该工具中运行的代码分为.exe和.dll——要分析的重要内容位于.dll中。我运行了xperf:xperf-onPROC_THREAD+LOADER+INTERRUPT+DPC+PROFILE-stackwalkprofile然后我运行了一下我的工具,然后xperf-dprofile.etl然后我尝试了xperfview。我加载了配置文件,打开“加载符号”,然后打开了汇总表。根本没有符号——从字面上看,模块在功能列中出现了“未知”。我已经在这方面搜索了其他线程,这是我尝试过的:我设置了我的环境变量,_NT_SYMBOL_PAT

c++ - 调用dll函数时参数对象的成员变量的内存地址发生变化

类SomeClass{//一些成员MemberClassone_of_the_mem_;我在dll中有一个函数foo(SomeClass*object),它是从exe调用的。问题one_of_the_mem_的地址在调度dll调用期间发生变化。详细信息:在调用之前(从exe):'&(this).one_of_the_mem_'-`0x00e913d0`之后-在dll本身中:'&(this).one_of_the_mem_'-`0x00e913dc`对象的地址保持不变。只有地址每次移动c的成员。我需要一些关于如何解决这个问题的建议。代码:Exe代码stat=module->init(th

windows - Windows 资源管理器使用哪些 DLL 文件?

我需要知道Windows资源管理器为项目使用了哪些库(WindowsShell)。是的,它显然使用了shell32.dll但还有其他什么? 最佳答案 您可以使用DependencyWalker查看Explorer引用的内容。 关于windows-Windows资源管理器使用哪些DLL文件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/10974866/

c++ - LoadLibrary貌似加载错误的DLL

我在使用Windows上的LoadLibrary时遇到了一个奇怪的问题。首先是一些背景。这个应用程序依赖于Qt,而Qt被拆分成几个库。我正在尝试升级Qt的版本,但不会破坏任何人。较新的Qt库向后兼容旧的。这意味着如果加载新版本,则使用旧版本构建的应用程序可以运行。反之则不然——如果加载旧版本,使用新版本构建的应用程序将缺少符号。QtDLL位于特定于版本的目录中(比如c:\qt\qt-4.5.2\lib和c:\qt\qt-4.8.1\lib作为示例)。大多数开发人员在他们的PATH中还有一个公共(public)目录,其中包含我们使用的所有第三方库的“当前”版本(称为c:\common\l

.net - 在哪里可以找到并下载不同版本的 mscorwks.dll 和 mscordacwks.dll?

我正在尝试习惯使用WinDbg来解决崩溃转储问题,但每次我这样做时,它似乎都在要求我提供不同版本的mscorwks.dll和mscordacwks.dll,而且我并不总是能够访问转储来自的机器。除了告诉最终用户他们必须在他们的Windows目录中四处挖掘这些文件并向我发送一个大得离谱的“迷你”-dump之外,是否有什么地方可以让我获得这些文件的不同版本的副本?WinDbg似乎无法通过Microsoft的符号服务器找到它们。 最佳答案 您应该从捕获此转储的机器上获取mscordacwks.dll,然后将其重命名为WinDbg期望的名称

c# - 批处理文件 - 注册所有 Dll

我想在我的文件夹及其子文件夹下注册所有dll,所以我使用以下内容:FOR/R"C:\test"%%Gin(.)DO(Pushd%%Gfor%%Gin(%%G\*.dll)doregsvr32/s%%GEchonowin%%GPopd)Echo"BackToOriginalDirectory"现在这段代码的问题是它还尝试注册扩展名为.dlla的文件,所以此时我的批处理文件产生了问题。如何只允许注册dll文件?感谢您的帮助。 最佳答案 我建议FOR/R"C:\test"%%Gin(.)DO(Pushd%%Gfor%%Gin(%%G\*.

windows - shell32.dll : access violation during GetOpenFileName new thread

GetOpenFileName因访问冲突而失败。文件必须在桌面上并且名称很长。只有在第一次成功打开文件后才会出现问题。当鼠标光标悬停在文件上时出现问题,因为工具提示即将显示。请参阅下面的答案。我将在下面留下原始问题描述。迈克·D。=======================我正在使用GetOpenFileName。我有时会在shell32的深处遇到访问冲突。第一次使用此代码时不会发生违规,通常需要五六次尝试。此外,如果在弹出打开的文件窗口后一两秒内选择一个文件,则不会发生违规。另外,我调试时显示的调用堆栈不包含我的任何代码。就好像某个独立的线程正在醒来做某事。非常感谢任何关于我如何调