Как использовать функции из управляемой DLL в VBA? - PullRequest
1 голос
/ 20 декабря 2011

У меня есть простая функция C #, которую я хочу использовать из VBA.Ради вопроса, допустим, что подпрограмма в 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 Как использовать статические функции, созданные на C # в VBA?

Ответы [ 2 ]

3 голосов
/ 20 декабря 2011

Я думаю, что это просто невозможно.Вам нужно создать оболочку COM в C # или VB.Net с эквивалентной нестатической функцией и вызывать ее из своей программы VBA.

0 голосов
/ 20 декабря 2011

Посмотрите на проект Forms Interop, и, возможно, вы сможете понять это. Если вы можете вызвать форму из VB6 / VBA, вы можете вызвать функцию.

ссылка: http://www.codeproject.com/KB/dotnet/VB6_-_C__Interop_Form.aspx

...