跨DLL边界使用Direct2D
Using Direct2D across DLL boundaries
所以我开始用C语言编写一个程序,这需要很多花哨的绘图,但我严格使用Windows,所以我决定使用Direct2D。
到目前为止,我在DLL中创建了一个自定义控件,该程序像使用任何其他Win32控件一样使用该控件。自定义控件在其窗口中设置了一个D2D上下文,并根据需要绘制到其中,这很好。
我意识到这将在未来的项目中成为一个非常有用的DLL,可以通过传统的控件界面轻松地设置和拆除Direct2D,所以我让控件在绘图时向父窗口发送通知,而不是调用自己的内部绘图代码(基本上像所有者绘制的控件)。它调用BeginDraw,然后使用自定义NMHDR向父级发送通知,其中包括指向ID2D1DCRenderTarget的指针,然后调用EndDraw。在我的主窗口中,我创建控件,然后响应通知,然后调用方法来绘制内容,然后返回。
问题是,当在DLL中调用EndDraw时,我会得到错误"对象的状态不正确,无法处理该方法"。这让我觉得跨越DLL边界一定会影响操作。DLL是否总是在与附加进程相同的线程中运行?跨越DLL边界是否还有其他奇怪之处,尤其是在Direct2D方面?
谢谢。
这让我觉得跨越DLL边界一定会影响操作。DLL是否总是在与附加进程相同的线程中运行?跨越DLL边界是否还有其他奇怪之处,尤其是在Direct2D方面?
不,调用不同DLL中的函数与调用方调用同一模块中的函数没有什么不同。请记住,标准Windows控件总是存在于与其主机不同的模块中,例如user32.dll、comctl32.dll等。
代码中的问题与驻留在不同模块中的问题无关。
感谢您的回复!刚刚意识到这与DC与RenderTarget的绑定有关,所以怪我。
- std::当在256字节边界上写入整数时,流的奇怪行为
- 使用不变量来确定二分搜索中的边界条件
- 跨 DLL 边界访问虚拟方法是否安全/可能?
- 在 64 位边界上对齐C++结构数组?
- std::数组边界检查如何工作?
- CGAL:如何创建填充边界曲线的曲面网格?
- 在 c++ 中是否允许创建具有运行时边界的数组?
- 是否可以跨 dll 边界返回常量引用/指向 std::vectors?
- 如何在 Direct2D 窗口中正确初始化 Directwrite IDWriteTextLayout
- 没有专用显卡的 Direct2D 与 GDI+
- C++11:16 字节原子<>变量是否在 16 字节边界上自动对齐,从而允许CMPXCHG16B指令?
- 转换引用对象的边界框?
- 将迭代器作为 3 个元素的滑动窗口,可以超调边界(可能使用 Boost)
- 算法设计:用边界数字表示 2D 网格的最佳方式,以C++?
- 查找矩形的边界集
- 在sfml中获取可转换的边界框
- SystemC sc_signal数组内存边界
- 如何处理libstdc++跨执行边界抛出的异常
- 如何在 direct2d 中使用随其窗口重新缩放的效果绘制图像
- 跨DLL边界使用Direct2D