【问题标题】:How do I use functions from a managed DLL in VBA?如何在 VBA 中使用托管 DLL 中的函数?
【发布时间】:2011-12-19 20:24:44
【问题描述】:

我希望从 VBA 中使用一个简单的 C# 函数。为了这个问题,假设 C# 中的例程如下所示:

using System;
namespace MyTestLibrary
{
    public static class Class1
    {
        static string Shout(string message)
        {
            return message + "!";
        }
    }
}

我希望能够像这样在 VBA 端使用它。这会导致错误(“找不到 DLL 入口点“Shout”):

Public Declare Function Yell Lib "C:\blah\MyTestLibrary.dll" Alias "Shout" (phrase As String) As String

Sub test()
    MsgBox Yell("Hello World")
End Sub

进一步的研究显示了一种解决方法(我已经让这个实现工作):

Sub test()
    Dim y As MyTestLibrary.Class1
    Set y = New MyTestLibrary.Class1
    MsgBox y.Shout("Hello World")
End Sub

但是,这不符合我的要求,因为我无法将我的库与我的工作簿一起部署,因为我必须手动添加参考。对于个人使用来说没什么大不了的,但是当您必须将其部署给非技术导向的最终用户时会很头疼,因为必须手动引用每个 dll。

TLDR如何在 VBA 中使用 C# 制作的静态函数?

【问题讨论】:

标签: c# vba dll com-interop


【解决方案1】:

我认为这是不可能的。您需要在 C# 或 VB.Net 中使用等效的非静态函数创建一个 COM 包装器,然后从您的 VBA 程序中调用它。

【讨论】:

  • link provided by GSerg 应该让您开始使用 COM 方法。
  • 实际上,that guy 提供了一个模板,用于使用 C# 创建导出函数,这些函数可用于 VBA 中的declare function。它仍然是 COM 互操作,但有一些变化并且没有繁琐的注册。
  • @GSerg 我一开始没有关注链接,现在我关注了,确实令人印象深刻!谢谢。
【解决方案2】:

看看Forms Interop 项目,也许你能搞清楚。如果您可以从 VB6/VBA 调用表单,则可以调用函数。

链接:http://www.codeproject.com/KB/dotnet/VB6_-_C__Interop_Form.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多