2017-03-06 6 views
0


今、私はVBAコード(Excel、Accessなど)内で使用可能な.net dllを作成しています。次のセットアップが正常に動作している:Resolve .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ファイルIが正しくプロパティがログイン機能が問題となる呼び出しの切断機能をaswell使用することができますを参照することにより、私は推測している(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にバウンシーキャスルを登録しようとしましたが、成功しませんでした。各ビルドで 私は、実行時に読み込まれるプロジェクトのbinディレクトリに.TXTを配置します読み取ることができませんでしたファイル上で示唆したように

感謝:)

+0

私の推測では、 'Login'メソッドのどこかで例外が発生しているか、JIT時に例外が発生していると思います。この問題を診断するには、1) 'Login'メソッドの内容全体をヘルパーメソッド(' private string LoginHelper(){...} ')に移動してください。 2) 'try' /' catch'ブロック内でヘルパーを呼び出すために 'Login'メソッドを書き直します。何とか例外をログに記録します。 –

+0

'Login()'メソッドでコードを見ることなく、開始点としてtry/catchでラップして、例外の詳細を含むメッセージボックスを表示することができます。 'using System.Windows.Forms;'をクラスに追加し、あなたのメソッド 'try {your code; } catch(例外e){MessageBox.Show(e.ToString()); } '。それを超えて、より良いテストのために実行できるメソッドのコピーを含むテストシェルとしてWinFormsまたはWPFアプリケーションを作成します。 – zaphodalive

答えて

0

それは確かでした。 私の解決策の中でdllを使うと、相対パスは私のbinディレクトリだったので、ファイルを見つけることができましたが、tlbを使って、相対ルートパスはサインインしたWindowsユーザのドキュメントフォルダでした。

面白い私は、エラーがセットアップされた方法に関連していると思っていました。

関連する問題