从VBA调用正在运行的C#应用​​程序

时间:2010-04-01 01:40:14

标签: c# .net vba com interop

我有一些需要与正在运行的c#应用程序通信的VBA代码。 为了它的价值,c#应用程序作为服务运行,并通过.net远程处理公开接口。

我发布了一个关于我已经遇到的具体问题的问题(From VB6 to .net via COM and Remoting...What a mess!),但我想我的结构可能都错了......

所以我退后一步 - 最好的方法是做什么? 值得考虑的一件事是,我想调用正在运行的应用程序 - 而不仅仅是调用预编译的DLL ......

2 个答案:

答案 0 :(得分:0)

在过去,我完成类似工作的一种方法是使用Microsoft Message Queueing。两种语言/平台都可以读/写队列。

在我的场景中,我们有一个我们必须维护的遗留Access数据库。我们希望从中迁移出来并用更强大的.NET解决方案替换它。为了将当前系统中的实时数据导入新系统,我们添加了VBA代码以将数据写入消息队列。然后我们编写了一个C#windows服务来处理新系统中的数据。

我不完全确定你在做什么,所以这可能不合适,但我想我会提到它。

答案 1 :(得分:0)

我使用原始结构提出了一个解决方案......

也就是说,VBA应用程序调用COM包装器应用程序,该应用程序将所有类型从.Net转换为COM安全类型。然后,此包装器使用.net远程调用主服务。

我遇到的问题是包装器和服务之间的常见dll需要位于C:\ Program Files \ Microsoft Office \ Office12文件夹中(与msaccess.exe一起)。

当我使用AssemblyResolve方法在运行时提供dll时,这不起作用...所以现在我只需要将dll复制到文件夹 - 这远非优雅的解决方案,但是至少沟通现在正在发挥作用。