gpt4 book ai didi

c++ - 跨 DLL 边界使用 Direct2D

转载 作者:行者123 更新时间:2023-11-30 17:43:31 26 4
gpt4 key购买 nike

因此,我开始用 C 语言编写一个程序,该程序需要大量精美的绘图,但我严格使用 Windows,因此我决定使用 Direct2D。

到目前为止,我在 DLL 中创建了一个自定义控件,程序像任何其他 Win32 控件一样使用和使用该控件。自定义控件在其窗口内设置一个 D2D 上下文,并根据需要绘制到其中,这工作得很好。

我意识到这将在未来的项目中成为一个非常有用的 DLL,用于通过传统的控件接口(interface)轻松设置和拆除 Direct2D,因此我让控件在绘制时向父窗口发送通知,而不是在需要绘制时向父窗口发送通知。调用它自己的内部绘图代码(基本上就像所有者绘制的控件)。它调用 BeginDraw,然后使用包含指向 ID2D1DCRenderTarget 的指针的自定义 NMHDR 将通知发送给父级,然后调用 EndDraw。在我的主窗口中,我创建控件,然后响应通知,然后调用方法来绘制内容,然后返回。

问题是,当在 DLL 中调用 EndDraw 时,我收到错误“对象未处于处理该方法的正确状态”。这让我觉得跨越 DLL 边界肯定会影响操作。 DLL 是否始终与附加进程在同一线程中运行?跨越 DLL 边界是否还有其他一些奇怪的地方,特别是在 Direct2D 方面?

谢谢。

最佳答案

This makes me think that crossing DLL boundaries must muck with the operation. Do DLLs always run in the same thread as the attached process? Is there some other oddity about crossing through DLL boundaries, especially with respect to Direct2D?

不,调用位于不同 DLL 中的函数与调用与调用者相同的模块中的函数没有什么不同。请记住,标准 Windows 控件始终存在于与其主机不同的模块中,例如user32.dll、comctl32.dll等。

代码中的问题与其驻留在不同模块中无关。

关于c++ - 跨 DLL 边界使用 Direct2D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230487/

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