在wpf项目中使用VBA项目作为dll



我有一个vba项目,我想在c# wpf中做相同的,所以有什么方法可以使用相同的项目,只是使用wpf制作UI ?是否有任何方法像创建这个vba项目的dll并将其添加到新的wpf项目中,并调用现有项目的API。

不完全是。VBA是VB6的残缺版本,所以你没有完整的类型库发布功能。也就是说,有可能让VBA实现typelib发布的COM接口(尽管相当痛苦),然后将这些接口公开给托管代码,并通过COM互操作从您喜欢的任何c#代码(包括WPF)调用它们。

基本上,你需要:

  • 定义IDispatch或双接口
  • 在类型库中发布
  • 将typelib引用到你的VBA项目中(如果它不是起源于那里,你的c#项目也可以)
  • 编写一个VBA类模块实现新接口
  • 设置类的实例化属性为PublicNotCreatable
  • 在VBA(非类)模块中编写一个shim函数,可以通过Excel的应用程序从c#调用。运行方法——这个函数应该创建一个VBA类的实例并返回它。调用的c#代码将返回值强制转换为您之前声明的IDispatch或双接口的托管版本。
瞧,现在你可以直接从c#调用你的VBA代码了。这是几年前的事了,但我已经用一个巨大的遗留VBA代码库做了这件事,并取得了巨大的成功。然而,这是一个非常痛苦的过程,充满了危险。接口很容易泄漏,COM接口和类型版本控制有很多问题,线程问题比比皆是。

话虽如此,如果你不知道如何做这些事情,或者不能快速找到所需的资源,你可能应该考虑将VBA移植到c#。

祝你好运!

相关内容

  • 没有找到相关文章

最新更新