C++ 跨DLL边界使用Direct2D
所以我开始用C语言编写一个程序,这个程序需要很多漂亮的绘图,但我严格使用Windows,所以我决定使用Direct2D 现在,我在DLL中创建了一个自定义控件,该程序使用该控件,就像使用任何其他Win32控件一样。自定义控件在其窗口内设置D2D上下文,并根据需要将其绘制到其中,这很好 我意识到这将在未来的项目中成为一个非常有用的DLL,可以通过传统的控件接口轻松设置和拆除Direct2D,因此我让控件在绘图时向父窗口发送通知,而不是调用自己的内部绘图代码(基本上类似于所有者绘制的控件)。它调用BeginDraw,然后使用包含指向ID2D1DCRenderTarget指针的自定义NMHDR将通知发送给父级,然后调用EndDraw。在主窗口中,我创建控件,然后响应通知,然后调用方法绘制内容,然后返回 问题是,当在DLL中调用EndDraw时,我得到错误“对象未处于正确的状态,无法处理该方法”。这让我觉得跨越DLL边界一定会影响操作。DLL是否始终与连接的进程在同一线程中运行?穿越DLL边界是否还有其他奇怪之处,特别是在Direct2D方面 谢谢 这让我觉得跨越DLL边界一定会影响操作。DLL是否始终与连接的进程在同一线程中运行?穿越DLL边界是否还有其他奇怪之处,特别是在Direct2D方面 不,调用位于不同DLL中的函数与调用方在同一模块中调用函数无异。请记住,标准Windows控件始终存在于与其主机不同的模块中,例如user32.dll、comctl32.dll等C++ 跨DLL边界使用Direct2D,c++,c,winapi,dll,direct2d,C++,C,Winapi,Dll,Direct2d,所以我开始用C语言编写一个程序,这个程序需要很多漂亮的绘图,但我严格使用Windows,所以我决定使用Direct2D 现在,我在DLL中创建了一个自定义控件,该程序使用该控件,就像使用任何其他Win32控件一样。自定义控件在其窗口内设置D2D上下文,并根据需要将其绘制到其中,这很好 我意识到这将在未来的项目中成为一个非常有用的DLL,可以通过传统的控件接口轻松设置和拆除Direct2D,因此我让控件在绘图时向父窗口发送通知,而不是调用自己的内部绘图代码(基本上类似于所有者绘制的控件)。它调用B
代码中的问题与驻留在不同模块中的代码无关。感谢您的回复!刚刚意识到这与DC到RenderTarget的绑定有关,所以怪我。你真的应该使用调试器。您将立即看到您对线程的怀疑是否正确。因此,我使用Visual Studio 2012及其调试器对其进行了一段时间的研究,但我不太擅长调试这样的东西。我希望您能给我一些关于如何使用调试器来解决这个问题的建议。调用DLL就像调用任何其他函数一样。我会查看您是否遇到消息交错问题(即,如果您在结束消息之前收到额外的开始消息)。COM在处理另一个COM调用所发送的消息时,对进行COM调用也有限制,这可能是原因,也可能不是原因,但总是设法让我绊倒。