标签: dll

客户生气,对抗未知的DLL依赖

我是一个为客户开发C++ Windows应用程序的人.在过去的几个月里,我们遇到了同样的问题,即客户机器上缺少DLL依赖项.尽管我付出了最大的努力,但仍然会出现问题,我们会发回电子邮件.我的老板和老板的老板对我很生气,顾客也不高兴.

我希望你们可以提供帮助,就如何按顺序获得可交付成果提出建议/想法.在一些明显的事情之前:

  1. 我没有试机.也就是说,我不能复制客户环境,也不能尝试在"干净"的系统上安装应用程序,以便在发货前抓住陷阱.
  2. 我已经尝试使用depends.exe来跟踪我的项目所依赖的DLL的版本.我用我可以找到的redistributables运送我们的代码.之后,这是一个愤怒的客户电子邮件等待游戏.
  3. 我可以访问64位计算机和32位计算机来安装新版本.它总是在那里工作.
  4. 我需要使用一个无法注册的第三方DLL(它有点像地狱一样.)
  5. 我不应该使用Install Shield,任何其他自动安装程序,或编写安装脚本.
  6. 我提供了有关如何安装应用程序的书面说明(解压缩,双击exe文件.)

我厌倦了为这些东西加热.我错过了什么,我可以做什么?在雇主的支持方面我应该问什么?我应该如何以他们提供的方式要求提供支持?

更新:

鱼雷鱼雷.他们不希望我花费我所有的时间来设置和拆除客户配置.相反,我现在正在与客户合作以获得基本配置,以便我知道我应该针对的确切机器设置.如果不符合该规范,我不再需要关心.至少有些事情发生了......虽然我还是喜欢试机.

c++ windows dll

29
推荐指数
7
解决办法
2248
查看次数

什么工具可以将DLL反编译成C++源代码?

我有一个旧的DLL停止工作(log2vis.dll),我想查看它内部,看看它使用了什么对象.
DLL是用C++(而不是.NET)编写的.有没有一个工具可以反编译/反汇编C++文件?

c++ dll decompiling

28
推荐指数
4
解决办法
21万
查看次数

C#将所需的DLL放在输出根之外的某处

我正在使用EmguCV进行项目,当我们的程序运行时,它需要一些像"cxcore.dll"等dll(或者它会抛出运行时异常).目前,我将文件放在输出文件夹的根目录中(在Visual Studio的文件属性中选择"始终复制").

然而它看起来有点凌乱,只有10个不同的dll.有没有我可以将它移动到输出文件夹中的子文件夹,它仍然会找到它.

c# dll dependencies visual-studio

28
推荐指数
3
解决办法
5万
查看次数

sox FAIL util:无法加载MAD解码器库(libmad)函数"mad_stream_buffer"

我为sox编译了libmad.当我尝试读取mp3时,我收到此消息:

sox FAIL util:无法加载MAD解码器库(libmad)函数"mad_stream_buffer".

我是否错误地编译了项目?

windows dll mp3 sox visual-c++

28
推荐指数
4
解决办法
2万
查看次数

跨DLL边界抛出C++异常

我已经阅读了有关如何不在一个DLL中分配堆内存并从该DLL外部解除分配的各种事项.但是抛出一个只是临时的异常对象(如大多数异常对象)呢?例如:

throw my_exception( args ); // temporary: no heap allocation
Run Code Online (Sandbox Code Playgroud)

当异常对象被捕获到DLL外部时,最终将执行该对象的析构函数,并将回收该对象的非堆内存.这样可以,因为它不是堆内存吗?

c++ dll exception-handling

28
推荐指数
2
解决办法
2万
查看次数

如何通过ntsd -d在windbg中显示源代码?

当我ntsd -d通过管道传输时,我无法在windbg中显示源代码windbg -k,但是当我在本地调试时它可以工作.

我想调试Winlogon.exe和LSASS.exe的第一个代码执行.但为了便于重现问题,我编写了这个设置:

  • 我使用CrashMe示例应用程序,预先构建了源代码和符号,并在目标和主机上复制到C:\ CrashMe
  • 我到处都使用适用于Windows的Windows调试工具(DTW)版本6.12.0002.633.
  • 目标是运行Windows XP SP3,主机Windows 7终极版.
  • 两台机器上的每个路径和设置都是相同的:DTW路径和crashme路径.
  • 我总是使用完全限定的路径(如c:\ dtw \ntsd.exe).
  • 我在VM中运行XP,启动时使用 /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200

我可以使用此命令在本地进行调试,从C:\ CrashMe启动:

windbg -g -G -srcpath C:\CrashMe -y C:\CrashMe debug\CrashMe.exe
Run Code Online (Sandbox Code Playgroud)

我可以启动Windows XP虚拟机并使用以下命令连接到它:

windbg -n -k com:pipe,port=\\.\pipe\com_1,reconnect -srcpath SRV*;C:\CrashMe -y   
c:\windows\system32;c:\windows\symbols;C:\CrashMe\debug  
Run Code Online (Sandbox Code Playgroud)

但我需要调试远程机器.在目标上,我有这些选择:

  1. 通过-server和调试-remote
  2. 打破正在运行的过程
  3. 使用图像文件执行选项(IFEO).

在每个选项中,我都可以看到符号(x crashme!*作品).

我不能使用#1(-server)或#2(breakin.exe <pid>),因为我想调试身份验证提供程序的启动代码,所以我需要LSASS.exe从下开始ntsd -d.我不能让它运行并在以后附加.

我的理解是我需要使用IFEO.使用gflags.exe而不是手动修改注册表,我将可执行选项设置为

c:\dtw\ntsd -d -G -lines -x -y c:\symcache;c:\windows\system32 -n -srcpath C:\CrashMe\ …
Run Code Online (Sandbox Code Playgroud)

dll windbg remote-debugging

28
推荐指数
1
解决办法
3850
查看次数

64位系统上的Java Native Interface 32位dll

E:\Code\Java\JNITest>java test
Exception in thread "main" java.lang.UnsatisfiedLinkError: E:\Code\Java\JNITest\test.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at test.main(test.java:16)`
Run Code Online (Sandbox Code Playgroud)

在使用Java Native Interface时,我遇到了一个产生此错误的问题.我相信这是因为我使用MinGW编译了.dll,它编译成32位.dll而我的系统是64位,因此我的Java运行在64位.反正有没有迫使我的Java以32位运行?

java dll java-native-interface mingw

28
推荐指数
2
解决办法
5万
查看次数

AllocConsole()不显示cout

我有一个DLL,我使用AllocConsole()和cout来显示数据以进行调试.
它曾经工作正常但是因为我将我的编译器(Visual Studio 2012)更新到最新的dll只显示控制台而不是print/couts.
我不明白为什么会发生这种情况.
有任何想法吗?

我的部分代码

__declspec(dllexport) INT APIENTRY DllMain(HMODULE hDLL, DWORD Reason, LPVOID Reserved)
{
    switch(Reason)
    {
    case DLL_PROCESS_ATTACH:    
        AllocConsole();

        DisableThreadLibraryCalls(hDLL);

        //
        DetourTransactionBegin();
        DetourUpdateThread(GetCurrentThread());
        DetourAttach(&(PVOID&)pSend, MySend);
        if(DetourTransactionCommit() == NO_ERROR)
             cout << "[" << MySend << "] successfully detoured." << endl;
Run Code Online (Sandbox Code Playgroud)

但是什么都没有显示

c++ dll

28
推荐指数
3
解决办法
4万
查看次数

应用程序无法启动,因为它无法找到或加载QT平台插件"windows"

我查看了所有与堆栈溢出相关的问题,但没有一个解决方案对我有帮助.

我正在使用此设置构建Qt应用程序:

  • Windows 7专业版x64
  • Visual Studio 2012
  • Qt 5.2.0内置 configure -developer-build -debug-and-release -opensource -nomake examples -nomake tests -platform win32-msvc2012 -no-opengl
  • 项目使用QtSingleApplication(qt-solutions)
  • 应用程序是一个32位应用程序
  • qmake使用以下命令运行:-makefile -spec win32-msvc2012
  • .pri使用 QMAKE_CXX += /D_USING_V110_SDK71_

我可以在我的开发机器上构建和运行我的程序(如上所述); 我也可以在dev机器上的Program Files目录下安装和运行包.

当我在Windows Vista计算机上安装并运行时(多台计算机)

  • 安装VC++ redist 2012 11.0.61030.0
  • 安装VC++ redist 2010 10.0.40219
  • 加上2005年,2008版的redist

(在Windows 7的全新安装上也失败了)

我明白了:

Application failed to start because it could not find or load the QT platform plugin "windows"

所以我按照说明添加了.platforms /目录,并添加了qwindows.dll(还添加了qminimal.dll和qoffscreen.dll); 我还添加了libEGL.dll,libGLESv2.dll(即使我不应该需要它们,我不认为)

一旦我添加了qoffscreen.dll,我现在得到了额外的消息: Available platform plugins are: offscreen

如果我通过Dependency Walker运行,我会列出以下错误:

GetProcAddress(0x76CA0000 [KERNEL32.DLL], "GetCurrentPackageId") called from "MSVCR110.DLL" at …
Run Code Online (Sandbox Code Playgroud)

c++ dll qt platform

27
推荐指数
5
解决办法
6万
查看次数

RegSvr32退出代码文档?

我玩了RegSvr32.exe注册COM服务器并获得下一个退出代码:

0 - 正确注册正常的DLL Com Server时

3 - 尝试注册假DLL Com Server时(简单文本文件重命名为.DLL

4 - 尝试注册简单的DLL时,而不是Com Server

问题:我可以在哪里找到所有可能的退出代码及其含义的官方(或非官方但好的)描述?

在互联网上搜索没有给我结果,所以我发现这个主题在哪里写的退出代码与Windows系统错误代码相同,但我不明白为什么然后当尝试注册坏文件我得到代码= 3= ERROR_PATH_NOT_FOUND,并在注册非COM DLL时 - 4= ERROR_TOO_MANY_OPEN_FILES?对我来说,这听起来并不合乎逻辑.

windows com dll winapi regsvr32

27
推荐指数
3
解决办法
2万
查看次数