0
現在我正在寫一個.net dll,它應該在VBA代碼(Excel,Access等)中可用。下面的設置工作正常:解決.net tlb參考
[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
什麼是處理com可見庫內其他.net程序集引用的最佳方法?到目前爲止,我嘗試向GAC註冊bouncycastle,但沒有成功。
謝謝:)
我的猜測是在'Login'方法中有某個異常發生,或者在JIT時間發生異常。爲了診斷這個問題,我建議:1)將'Login'方法的全部內容移動到一個輔助方法('private string LoginHelper(){...}')。 2)重寫'Login'方法在'try' /'catch'塊中調用你的助手。以某種方式記錄異常。 –
在你的'Login()'方法中沒有看到代碼,作爲一個起點,你可以將它包裝在try/catch中並顯示一個包含任何異常細節的消息框。添加'使用System.Windows.Forms;'到你的類,並在你的方法'嘗試{你的代碼; } catch(Exception e){MessageBox.Show(e.ToString()); }'。除此之外,還可以創建一個WinForms或WPF應用程序作爲測試外殼,並提供可用於更好測試的方法副本。 – zaphodalive