65.9K
CodeProject 正在变化。 阅读更多。
Home

科学数据可视化器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (17投票s)

2013年11月4日

CPOL

2分钟阅读

viewsIcon

29913

downloadIcon

1746

用于 3D 可视化的 ActiveX 组件,嵌入在不同的客户端应用程序中。

引言

在计算物理场时,通常情况下,人们希望用 3D 空间中的图形图来评估结果。

背景  

几年前,我在 CodeGuru.com 上发表了一篇文章,解决了将数值结果可视化为 3D 曲面的问题。现在我发现该文章和作者的引用都不存在于该网站上。 所以,在这里我想介绍一下由以下内容组成的解决方案:

  • ATL 项目 - DLL,公开 ActiveX (COM) 组件,
  • 使用该 ActiveX 组件的 C# Windows Form 应用程序,
  • 使用相同 ActiveX 组件的 MFC 客户端应用程序,
  • 嵌入相同 ActiveX 组件并使用 JavaScript 控制其参数的 HTML 页面。

使用代码

如您所知,COM 对象必须注册多个 UUID:(CLSID、接口、类型库)。 如果没有这些讨厌的 128 位标识符,它就无法生存。 因此,必须在以管理员帐户运行的 Studio 中打开 ATL 项目。 否则,项目无法在 Windows 注册表中注册 COM 实体。 其他 2 个客户端项目可以在 VS 的单独实例中打开(以普通用户帐户运行)。 我发现最好在这种环境中开发 COM 服务器和 COM 客户端应用程序。 在开发使用 COM 互操作的应用程序时,您可能会遇到一些(非常令人讨厌的)陷阱。

  1. 不要忘记在 ATL 控件向导中包含 IPersistStorage 和 IPersistStreamInit 接口。 否则,您将无法将 ActiveX 控件嵌入到 Windows 窗体中。
  2. 编译 DLL,使用管理员权限启动 Visual Studio Native Tools 命令提示符,并使用 aximp 实用程序生成代理,如下所示。
  3. C:\Windows\system32>aximp D:\...your path...\ATLServer\Debug\ATLServer.dll /source /verbose

    该实用程序必须回答此问题

    Generated Source: C:\Windows\system32\AxATLServerLib.cs
    Generated Assembly: C:\Windows\system32\ATLServerLib.dll
    Generated Assembly: C:\Windows\system32\AxATLServerLib.dll

    现在剪切 (Ctrl+X) 这 3 个文件并将它们带到您的项目文件夹中。

  4. 在 MFC 客户端项目中,使用 ClassWizard 创建代理,如下所示。

编程愉快!

© . All rights reserved.