MFC 应用程序从另一个 DLL 加载对话框

发布于 2024-09-16 03:44:12 字数 407 浏览 4 评论 0原文

我们有一个非常大的 MFC 应用程序,解决方案中有 16 个项目。每个项目都是一个 DLL。其中四(4)个项目就是我们所说的“网络”。在每个网络中,都有一个我们称之为 X 的对话框。该对话框在每个网络中都非常不同,但对话框本身的名称在每个 resources.h 中都是相同的。在resource.h中,它们也具有相同的ID(值)。

现在发生的事情是,当我在网络 1 上并使用对话框 X 加载类时,它会尝试使用网络 2 中的对话框。由于它们不具有所有相同的控件,因此它在DoDataExchange 尝试查找其他网络中不存在的控件。

有谁知道什么会导致这个?尝试更改网络中不起作用的名称并没有改变任何内容,因为它使用了ID...

我一直认为DLL正在使用它自己的resource.h,但现在看来情况并非如此...

有人可以帮忙吗? 谢谢

We have a very big MFC application that have 16 projects in the solution. Each project is a DLL. Four(4) of these projects are what we call "Network". In each network, there is a dialog that we will call X. This dialog is VERY different in each of the network but the name of the dialog itself is the same in each of the resource.h. In resource.h, they also have the same ID (value).

What happend right now is that when I'm on the network 1 and load the class with the dialog X, it try to use the dialog from Network 2. Since they don't have all the same control in it, it crash in the DoDataExchange trying to find controls that don't exist in the other network.

Does anybody know what can cause this? Attemps at changing the name in the network that do not work didn't change anything since it use the ID...

I always think that the DLL was using it's own resource.h but now it's seems that it's not the case...

Can anybody help?
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心头的小情儿 2024-09-23 03:44:12

听起来您需要调用 AfxSetResourceHandle指定从中加载对话框的 DLL。

编辑:根据您的描述,您基本上需要在每次显示对话框时使用正确的值来调用它。更改 DLL 加载顺序之类的内容并不能解决问题 - 在任何给定时间,MFC 都会尝试使用 DLL/EXE 加载所有对话框的一个顺序,而这是模态的,因此在您更改之前它会保持不变。考虑到相同的资源 ID 需要在不同的时间引用不同的资源,您需要在任何给定时间告诉它是哪个资源 - 否则,您会得到它使用正确的 ID 找到的第一个资源,并且几乎无法控制哪个资源将被引用。是。

It sounds like you need to call AfxSetResourceHandle to specify the DLL from which to load the dialog.

Edit: Given your description, you'll basically need to call this with the right value every time you display a dialog. Changing things like the DLL load order isn't going to fix the problem -- at any given time, MFC is going to try to use one order for the DLLs/EXE to load all dialogs, and this is modal, so it stays the same until you change it. Given the same resource ID needing to refer to different resources at different times, you need to tell it which one at any given time -- otherwise, you get the first thing it finds with the right ID, and almost no control over which that will be.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文