Прямо сейчас я пишу .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, я могу правильно использовать функцию отключения свойств, однако вызов функции входа приводит к проблемам (окно сообщения «Файл не найден» в 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? До сих пор я безуспешно пытался зарегистрировать bouncycastle в GAC.
Спасибо :)
Login
возникает исключение или исключение возникает во время JIT. Чтобы диагностировать эту проблему, я рекомендую: 1) Переместить все содержимое методаLogin
во вспомогательный метод (private string LoginHelper() {...}
). 2) Перепишите методLogin
, чтобы он вызывал помощника внутри блокаtry
/catch
. Зарегистрируйте исключение как-нибудь. - person Michael Gunter   schedule 07.03.2017Login()
, в качестве отправной точки вы можете обернуть его в try/catch и показать окно сообщения с любыми деталями исключения. Добавьтеusing System.Windows.Forms;
в свой класс и в свой методtry { your code; } catch (Exception e) { MessageBox.Show(e.ToString()); }
. Кроме того, создайте приложение WinForms или WPF в качестве тестовой оболочки с копией вашего метода, который вы можете запустить для лучшего тестирования. - person zaphodalive   schedule 07.03.2017