Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 无法注册使用VS2012/VC+;生成的COM DLL+;在32位机器上 我使用VisualStudio 2012构建了基于C++的COM对象。它在64位计算机(由32位代码调用并调用32位进程外COM服务器)上注册并正常工作,但在32位计算机(既不是XP也不是Win32-bit)上不注册。来自regsvr32的消息是 LoadLibrary("comobj.dll") failed - The specified procedure could not be found._Visual C++_Visual Studio 2012_Com_Mfc_Atl - Fatal编程技术网

Visual c++ 无法注册使用VS2012/VC+;生成的COM DLL+;在32位机器上 我使用VisualStudio 2012构建了基于C++的COM对象。它在64位计算机(由32位代码调用并调用32位进程外COM服务器)上注册并正常工作,但在32位计算机(既不是XP也不是Win32-bit)上不注册。来自regsvr32的消息是 LoadLibrary("comobj.dll") failed - The specified procedure could not be found.

Visual c++ 无法注册使用VS2012/VC+;生成的COM DLL+;在32位机器上 我使用VisualStudio 2012构建了基于C++的COM对象。它在64位计算机(由32位代码调用并调用32位进程外COM服务器)上注册并正常工作,但在32位计算机(既不是XP也不是Win32-bit)上不注册。来自regsvr32的消息是 LoadLibrary("comobj.dll") failed - The specified procedure could not be found.,visual-c++,visual-studio-2012,com,mfc,atl,Visual C++,Visual Studio 2012,Com,Mfc,Atl,该项目最初是使用Visual Studio 6(7年前)构建的。它使用ATL宏(如BEGIN_COM_映射和BEGIN_SINK_映射)来声明各种接口的实现。它必须重新编译,因为它调用的COM服务器已更改(新ProgID、新GUID、新类型库等)。除了进行这些调整,并使用当前的VS,没有(有意的)更改——在项目文件的旧等价物中肯定没有指向64位的内容 使用64位版本的DEPENDS.EXE检查DLL时,标准引用DLL(如KERNEL32和USER32)旁边会显示“64”图标。除了在64位机器上构

该项目最初是使用Visual Studio 6(7年前)构建的。它使用ATL宏(如BEGIN_COM_映射和BEGIN_SINK_映射)来声明各种接口的实现。它必须重新编译,因为它调用的COM服务器已更改(新ProgID、新GUID、新类型库等)。除了进行这些调整,并使用当前的VS,没有(有意的)更改——在项目文件的旧等价物中肯定没有指向64位的内容

使用64位版本的DEPENDS.EXE检查DLL时,标准引用DLL(如KERNEL32和USER32)旁边会显示“64”图标。除了在64位机器上构建DLL之外,我找不到任何关于DLL的“64位”的东西。目标显式为Win32(不是X64)

使用32位版本的Dependes.EXE(在虚拟PC下运行的Windows XP上)检查DLL时,会显示带有红色图标的KERNEL32.DLL,这显然是因为32位KERNEL32.DLL中不存在对FlsAlloc FlsFree FlsGetValue FlsSetValue的引用。(我不知道这些是什么,也不知道这些引用来自何处——可能来自编译完成的64位机器上的MFC副本?)

是否我必须在XP上安装VS2012并在那里重新编译?如何使用C++ VisualStudio.

在C++中构建Win32 COM对象,这是怎么做的? 有人知道我会去哪里吗?我已经检查了所有的项目和解决方案选项,似乎没有设置为64位。“使用MFC”下的选项设置为“使用标准Windows库”——这可能是答案,但如果不能移植到32位Windows,则很难只使用“标准库”。(发送此邮件后,我将尝试对其进行更改。)


提前感谢您的建议。

Visual Studio 2012附带的默认工具集通过使用Vista稍后引入的某些API生成与Windows XP不兼容的输出

为了既能利用最新的微软C++编译器的功率和特性丰富性,又能与Windows XP兼容,你需要使用一个备用工具集代号“V1xXP”,它是用Visual Studio 2012更新1引入的。目前最新的更新可用,您可能只需要为VisualStudio安装最新的可用更新

您可以在“项目设置”下使用该设置:


请参阅此处的详细信息:。

使用Visual Studio 2012构建,您需要使用工具集保持XP兼容。感谢您提供这些信息。当我了解到这是否是修复此问题所需的全部操作时,我将更新此信息。使用这些信息,我能够使事情正常运行。请用相同的信息添加一个答案(如果你愿意,请删除评论),我会这样做——这是我至少能做的,因为你为我指出了正确的方向,为我节省了很多时间。你是对的,但他的核心问题是他还没有安装任何更新。他仍在使用CRT的RTM版本,即对FlsAlloc()具有直接动态链接依赖性的版本。你可以推荐@HansPassant:当然,我提到了更新1,但安装最新的更新是有意义的,即更新3。我添加了上面的链接,谢谢。我在搜索VS2012更新时很容易找到“更新3”——这个答案很有价值,因为它为我指明了正确的方向。我很幸运,在“更新2”出现后没有问这个问题,打破了“更新1”提供的XP支持。我要做的使事情正常运转的工作是微不足道的。最大的奥秘在于VS2012 RTM如何默认为“没有支持XP(C++)”,例如,当你安装C++时,警告你这个问题。