草庐IT

DLL_EXPORTS

全部标签

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的深处遇到访问冲突。第一次使用此代码时不会发生违规,通常需要五六次尝试。此外,如果在弹出打开的文件窗口后一两秒内选择一个文件,则不会发生违规。另外,我调试时显示的调用堆栈不包含我的任何代码。就好像某个独立的线程正在醒来做某事。非常感谢任何关于我如何调

.net - 两个 .NET 进程何时可以共享 DLL 内存?

我有两个引用同一个类库的ASP.NET网站。目前我们发布的网站有两个类库副本。这会浪费内存吗?操作系统是否知道文件的两个副本相同,因此可以共享DLL代码段的内存?如果我将它复制到GAC或另一个共享位置,使其只有一个物理文件,它会映射更少的总内存吗? 最佳答案 这个问题的前提是错误的,ASP.NETDLL不包含任何代码。只有数据、IL和程序集list。抖动从IL生成机器代码,该代码进入AppDomain的加载程序堆。进程的私有(private)字节,不共享。获取从IL生成的机器代码的一份副本是可能的,您必须运行Ngen.exe。它预编

C++:带有内存映射文件的 DLL

我有一个DLL可能会被多个应用程序同时调用。这个DLL内存映射一个文件。我有两个问题:1)每个应用程序都会创建自己的DLL实例,对吗?因此,该文件将被内存映射多次2)如果这是真的,我不明白这里发生了什么:a)应用程序A调用DLL。b)应用程序B调用DLL。c)我退出应用程序A,DLL将取消映射该文件。d)应用程序B调用DLL,内存映射文件不可用,调用失败。我不明白这个。有人做吗?谢谢。 最佳答案 发生这种情况是因为1)中的假设是错误的。根据定义,dll是共享的;两个应用程序都使用相同的dll实例,因此当您在一个应用程序中释放该文件时

windows - 如何在没有 regsvr32 的情况下注册 glut32.dll?

请告诉我如何在没有regsvr32的情况下注册glut32.dll,因为我已经尝试了所有方法来注册.DLL但它不起作用。这是否表明我使用的是Windows864位? 最佳答案 您不需要注册glut32.dll。只需将它放在您的exe文件附近即可。 关于windows-如何在没有regsvr32的情况下注册glut32.dll?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/192

c++ - 在 MessageBox husing 句柄中显示 dll 的路径

我用这个命令加载了一个dllHINSTANCEDllEconovent=LoadLibrary(_T("Econovent.dll"));我想获取从磁盘加载dll的路径...在这个假的情况下C:\TFS_FWG\Acon\Oem\bin\Econovent.20140130_3200\Econovent64\Econovent.dll只用消息框显示MessageBox(_T("NovalidProcAddress"),_T("Error"),MB_ICONINFORMATION);这是如何以最佳方式完成的? 最佳答案 看看GetMo

c++ - 如何确定哪个 Windows DLL 正在用于函数调用?

我一直在研究_vsnprintf并了解到它在ntdll.dll和msvcrt.dll中可用。我可以使用GetModuleHandle和GetProcAddress来访问_vsnprintf,例如:staticint(__cdecl*p__vsnprintf)(char*str,size_tcount,constchar*format,va_listvalist);staticvoidinit(constchar*dll){HMODULEhmod=GetModuleHandleA(dll);if(hmod){printf("***Testing%s***\n",dll);p__vsnpr

windows - mylibrary.dll_unloaded 出现 BEX64 错误

我有一个使用LoadLibrary动态打开DLL(mylibrary.dll)的可执行文件。当应用程序完成时,它崩溃了。浏览错误报告,结果发现它给出了一个事件类型BEX64。其中一个参数是mylibrary.dll_unloaded。剩下的就是一堆地址。有谁知道这意味着什么以及问题的可能来源是什么?我可以访问所有相关代码的源代码。 最佳答案 我前段时间遇到了同样的问题。当我在退出时调用FreeLibrary()时,程序崩溃了。原因是一个正在运行的线程,它是由我的图书馆启动的。在调用FreeLibrary()之前检查库中是否有任何正在