我有一个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或双接口的托管版本。
话虽如此,如果你不知道如何做这些事情,或者不能快速找到所需的资源,你可能应该考虑将VBA移植到c#。
祝你好运!