C++ 使用应用程序的Windows API commctrl.h不';我不能在没有平台SDK的机器上工作

C++ 使用应用程序的Windows API commctrl.h不';我不能在没有平台SDK的机器上工作,c++,windows,dll,C++,Windows,Dll,我写了一些使用以下内容的东西,包括: #include <math.h> #include <time.h> #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <commctrl.h> 如何使其在干净的安装上运行?它使用的是哪个dll找不到?我打赌是commctrl,但有人能告诉我为什么不是每个窗口都有commctrl吗 此外,如果有人

我写了一些使用以下内容的东西,包括:

#include <math.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <commctrl.h>
如何使其在干净的安装上运行?它使用的是哪个dll找不到?我打赌是commctrl,但有人能告诉我为什么不是每个窗口都有commctrl吗

此外,如果有人知道如何调试这样的东西,比如我的CPP看起来已经生锈了:)


编辑-对我有用的是下载Visual Studio 2008的可再发行版本。我认为这不是一个好的解决方案——下载一个2MB文件并安装运行一个简单的11K工具。我想我会更改代码,使用LoadLibrary从comctl32.dll获取所需的2或3个函数。谢谢大家:)

我怀疑它正在试图找到一个未安装的通用控件版本。您可能需要一个清单文件来将通用控件的版本映射到目标操作系统。此外,您可能需要确保已安装链接到的相同VC运行时

编辑:进行一点搜索,我已经确认(大部分)是VC++运行时的版本造成的。您需要分发生成时使用的版本。平台SDK通常包含一个用于此目的的合并模块,但通常也包含一个vcredit.exe。试试看微软的下载


使用依赖项步行器。从下载并安装(只需解压缩即可安装)。然后加载可执行文件。该工具将突出显示缺少的DLL。然后,您可以找到需要随可执行文件一起提供的可再发行包


如果您使用VS2005,大多数情况都将包含在其中,其中包括运行使用VS2005创建的EXE所需的所有内容。不过,使用depends.exe您可能会找到一个更轻量级的解决方案。

常见控件是一个麻烦。您的问题是VisualC++ 8运行时-假设您使用VisualStudio 2005——没有安装。静态链接到C/C++运行时库,或分发运行时DLL

<>你会遇到任何使用DLL的C或C++程序的问题。在VS 6.0中,由于Windows 2000以上的操作系统附带了
msvcrt.dll
,而在VS.NET 2003中,由于
msvcr71.dll
附带了.NET Framework 1.1,所以您可以不受影响。没有了。Visual Studio 2005及更高版本使用并行程序集来防止DLL地狱,但这意味着您甚至不能依赖.NET 2.0安装程序内置清单所使用的C运行时的确切版本。NET2.0的
mscorwks.dll
在其清单中绑定到版本8.0.50608.0;从VS2005 SP1开始,VS生成的应用程序绑定到8.0.50727.762。我记得它在VS2005的原始(RTM)版本中使用了一些预发布版本,这意味着您必须部署一个发布者策略合并模块(如果您使用合并模块),以将绑定重定向到发布的C运行时合并模块中的实际版本


另请参见MSDN。

谢谢,我不仅了解了一个新的很酷的工具(Dependency Walker),可再发行的软件包也很有帮助(尽管我使用了VS2008,其链接为:)。尽管我喜欢这篇博文,但你的编辑很到位,这提醒了我为什么我的CPP文件也有清单(我认为这只是一个C的东西)。您应该突出显示:常用控件是一种误导。问题不在于常见控件,而在于C/C++运行库。
---------------------------
C:\Documents and Settings\Someone\Desktop\DesktopRearranger.exe
---------------------------
C:\Documents and Settings\Someone\Desktop\DesktopRearranger.exe

This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

---------------------------
OK   
---------------------------