gpt4 book ai didi

winapi - DCompositionCreateDevice2 : E_INVALIDARG One or more arguments are invalid

转载 作者:行者123 更新时间:2023-12-04 07:44:40 33 4
gpt4 key购买 nike

运行带有函数 DCompositionCreateDevice2 的 Win32C++ 源代码时出现异常问题,这是用 VS 2015 编译的。
源代码编译没有任何错误,但显示上述运行时错误。用VS 2019重新编译并运行相同的源代码,没有运行时错误。
测试示例代码是下面列出的 Windows SDK 示例:
TouchInputDirectManipulation
DCompV2BackfaceandD2DBatching
知道这个问题的根源是什么吗?我正在从事 WTL 开源项目,并且不想将构建环境限制为 VS 2019。

最佳答案

这实际上是一个不寻常的问题......发生的事情是微软严重搞砸了dcomp.lib Windows 8.1 SDK 和 Windows 10 SDK 之间。
如果您转储 Windows 8.1 SDK dcomp.lib 导出,您会看到以下内容:

C:\>dumpbin "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64\dcomp.lib" /exports
Microsoft (R) COFF/PE Dumper Version 14.28.29914.0
Copyright (C) Microsoft Corporation. All rights reserved.

Exports

ordinal name

DCompositionCreateDevice
1017 DCompositionCreateDevice2
DCompositionCreateSurfaceHandle


如果您转储 Windows 10 SDK dcomp.lib 导出,您会看到以下内容:
C:\>dumpbin "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x64\dcomp.lib" /exports
Microsoft (R) COFF/PE Dumper Version 14.28.29914.0
Copyright (C) Microsoft Corporation. All rights reserved.

Exports

ordinal name

DCompositionAttachMouseDragToHwnd
DCompositionAttachMouseWheelToHwnd
DCompositionCreateDevice
DCompositionCreateDevice2
DCompositionCreateDevice3
DCompositionCreateSurfaceHandle

如您所见 DCompositionCreateDevice2最初用序号 1017 定义。当您使用 Windows 8.1 SDK 构建您的程序(这些示例当前是如何定义的)时,您可以使用 dumpbin 获得它:
C:\>dumpbin c:\mypath\TouchInputDirectManipulation\cpp\x64\Debug\DirectManipulationSample.exe /imports
Microsoft (R) COFF/PE Dumper Version 14.28.29914.0
Copyright (C) Microsoft Corporation. All rights reserved.

Section contains the following imports:

dcomp.dll
140054570 Import Address Table
140054E98 Import Name Table
0 time date stamp
0 Index of first forwarder reference

Ordinal 1017
因此,您的 .exe 链接到序号 1017,而不是导出名称 DCompositionCreateDevice2 .
问题是,对于 Windows 10(我认为您在 Windows 10 上运行),dcomp 序号 1017 不是 DCompositionCreateDevice2但是 DCompositionAttachMouseDragToHwnd !如果您调试程序,进入不喜欢发送给它的内容并报告 E_INVALIDARG 的函数,则可以确认这一点。
enter image description here
因此,如果您的目标是 Windows 10,解决方案是更改 SDK:
enter image description here
或者简单地使用 GetProcAddress("DCompositionCreateDevice2")等到 dcomp.dll 以确保你得到好的。
这应该报告给微软我猜...

关于winapi - DCompositionCreateDevice2 : E_INVALIDARG One or more arguments are invalid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67263442/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com