如何在 VBA Host MFC 应用程序中使用动态外部 MFC CView 类对象(存在于 DLL 库中)





1.00/5 (8投票s)
2002年12月9日
3分钟阅读

57867

389
在 VBA 主机 MFC 应用程序中实现两个现有 DLL 库之间的接口。
引言
在 MFC 应用程序中,在运行时使用存在于 MFC DLL 库中的动态视图非常困难,因为这样的视图对象可能与此应用程序无关,或者此视图是在创建此应用程序之后创建的。如果某些应用程序可以动态创建视图,那么它肯定可以无限扩展。如果您使用 Tangram SDK (您可以从 http://www.tangramdev.com/english/downloads.asp 免费获取它),您可以轻松地创建这种应用程序。
步骤
- 首先,您必须安装 Tangram SDK
- 使用向导“Tangram Application”创建一个 Tangram 应用程序。(请参考:https://codeproject.org.cn/useritems/Tangram_class_library.asp)。
- 使用向导“Tangram component Dll”创建一个 Tangram 组件 Dll。
- 我将给您一个简单的例子。为此组件 Dll 添加一个新类。使用向导“Tangram component”添加一个新类。
- 为了获取值,我为新组件添加了一个编辑控件和一个按钮。然后为编辑控件映射一个变量。
- 为此组件添加一个事件以传输值。打开类“TangramDllLeftLib”,右键单击“_IAtlLeftEvents”,选择选项“Add”,然后单击“Add Method”,并在参数类型中选择类型“BSTR”,将“str”填入参数名称,然后单击按钮“add”。
- 接下来,编译 idl 文件“TangramDllLeft.idl”,并在类“CAtlLeft”上添加连接点(右键单击类“CAtlLeft”,选择选项“Add”,然后选择子选项“Add connection point”。然后双击“_IAtlLeftEvents”使其位于右侧。)
- 添加事件后,下一步是激活此事件。在资源视图中双击“Button1”。并添加以下代码:
UpdateData(TRUE); m_pComObj->Fire_ShowText(m_strEdit.AllocSysString());
备注:“m_pComObj”是指向类“CAtlLeft”的指针变量。
然后,当您单击“button1”时,此事件将被激活,并且来自编辑控件的值将被发送出去。 - 使用步骤 3~4 创建一个新的 Tangram 组件 Dll。仅添加一个编辑控件,并为此编辑控件映射一个变量。
- 为此组件添加一个方法以获取该值。右键单击类“IAtlRight”,选择选项“Add”,然后选择子选项“Add method”。
- 打开类“CAtlRight”,双击方法“AddText”。删除代码“AFX_MANAGE_STATE(AfxGetStaticModuleState());”并添加以下代码:
m_pMfcWnd->m_strEditR=strText; m_pMfcWnd->UpdateData(FALSE);
备注:m_pMfcWnd 是指向类“CRightView”的指针变量。
- 将这两个组件添加到 Tangram。构建并运行“Tangram Application”。
- 打开一个新文档,单击“Design”。在 splitter Tab 窗格中输入“1”行和“2”列,然后单击“CreateSplitter”按钮。然后您将看到此文档分为两部分。
- 单击左侧的“Design”,将 tangram 组件 Dll 项目名称和类名“TangramDllLeft.CLeftView”填入 ComWnd 选项卡窗格。以相同的方式,将另一个 tangram 组件 Dll“TangramDllRight.CRightView”填入右侧窗口中的 com wnd。然后单击按钮“Create COM Window”。
- 之后,您将看到如下图所示。
- 彼此交互。打开菜单栏中的“Tool”,然后单击选项“Visual Basic”进入 VBA 代码界面。在 CleftView 对象中添加以下代码。
CRightView.AddText(str)
- 保存更改,然后关闭 VBA 界面。切换到文档,在左侧的编辑控件中填写一些单词。然后单击“button1”。您将看到您输入的单词出现在右侧的编辑控件中。