Разрешить ссылку.net tlb


Прямо сейчас я пишу.net DLL, которая должна использоваться в коде VBA (Excel, Access и т. Д.). Следующая настройка работает нормально:

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
[Guid("8079e4a4-1e4b-4788-92ba-9d5b017fa9be")]  //Allocate your own GUID
public interface ICommunication
{
    string TestProp { get; set; }
    string Login();
    string Disconnect();
}

[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[Guid("19fd86e2-f1b9-478c-ba7a-bd76bdf19b85")]  //Allocate your own GUID
[ProgId("TestDll.Communication")]
public class Communication : ICommunication
{
    public string TestProp { get; set; }

    public string Login()
    {
        // use of BouncyCastle here
        return "logged in";
    }

    public string Disconnect()
    {
        // ...
        return "disconnected";
    }
}

Ссылаясь на сгенерированный файл tlb, я могу правильно использовать функцию "Отключить свойство aswell", однако вызов функции "Вход в систему" ​​приводит к проблемам (окно сообщения "Файл не найден" в Excel), которые, я полагаю, связаны с использованием ссылочной BouncyCastle.

Sub Button1_Click()
    Dim o: Set o = CreateObject("TestDll.Communication")
    Dim value As String
    value = o.Login()
    MsgBox value
End Sub

Каков наилучший способ справиться со ссылками на другие сборки.net внутри com видимых библиотек? До сих пор я безуспешно пытался зарегистрировать надувной замок в GAC.

Спасибо:)

1 ответ

Решение

Это действительно было похоже на предложенный выше файл, который не может быть прочитан: В каждой сборке я помещаю.txt в каталог bin проекта, который читается во время выполнения. Используя dll в моем решении, файл мог быть найден, поскольку относительный путь был моим каталогом bin, однако, используя tlb, относительный корневой путь был папкой документов вошедшего в Windows пользователя.

Забавно, как я все время думал, что ошибка связана с тем, как я установил свою dll как видимую com:).

Другие вопросы по тегам