2017-04-19 10 views
0

WinFormsコントロールを.NET UserControlでラップし、Microsoftで使用するCOMアセンブリとして使用できるようにするVB.NETプロジェクトがありますオフィス。プロジェクトはこれを行うための標準的なテクニックを使用します。つまり、プロジェクトプロパティで[Make Assembly COM-Visible]チェックボックスと[COM Interopに登録する]チェックボックスをオンにし、アセンブリに強い名前で署名します。レジストリ内のコンポーネント登録は以下の通りです:VB.NET UserControlのCOMバージョンをMicrosoft Officeの64ビット版で利用可能にする

<ComRegisterFunction()> 
Public Shared Sub RegisterForCOM(ByVal aType As Type) 
    Dim strCtrlKey, strVersion As String 
    Dim typeLibGUID As Guid 
    strCtrlKey = "CLSID\" + aType.GUID.ToString("B") 
    Dim key As RegistryKey = Registry.ClassesRoot.OpenSubKey(strCtrlKey, True) 
    key.CreateSubKey("Control") 
    key.CreateSubKey("Implemented Categories\{40FC6ED4-2438-11CF-A3D8-080036F12502}") 
    key.CreateSubKey("MiscStatus").SetValue("", "131457") 
    typeLibGUID = Marshal.GetTypeLibGuidForAssembly(aType.Assembly) 
    key.CreateSubKey("TypeLib").SetValue("", typeLibGUID.ToString("B")) 
    Dim asmVersion As Version = aType.Assembly.GetName().Version 
    strVersion = asmVersion.Major.ToString() + "." + asmVersion.Minor.ToString() 
    key.CreateSubKey("Version").SetValue("", strVersion) 
    key.Close() 
End Sub 

<ComUnregisterFunction()> 
Public Shared Sub UnregisterForCOM(ByVal aType As Type) 
    Try 
     Registry.ClassesRoot.DeleteSubKeyTree("CLSID\" + aType.GUID.ToString("B")) 
    Catch 
    End Try 
End Sub 

この構造は、当社の顧客は、Microsoft Officeの64ビット版では、この.NET COMラッパーを使用しようとした瞬間まで年間、何の問題もなく働いています。私はインターネットでこの質問に対する答えを見つけようとしましたが、WinFormsコントロール用に64ビット互換のCOMラッパーを実装する方法のガイドが見つかりませんでした。

それはまったく可能ですか?もしそうなら、正しい方向に向けることができますか?


更新:答えを見つけるために助けるため@HansPassantへ

regasm <full_path_to_dll> /tlb /codebase 
+0

これは問題ではありませんが、重要な情報は質問にはありません。ユーザーは、「COM Interopの登録」チェックボックスをクリックしていません。このコンポーネントがどのようにユーザーのマシンに登録されているか説明する必要があります。インストーラを作成した場合は、64ビットインストーラでなければなりません。 Regasm.exeを使用する場合は、64ビットバージョンを使用する必要があります。 –

+0

@HansPassant、我々のユーザーはregasmを使用しています。私はちょうど質問にこのコマンドライン呼び出しを追加しました。 – TecMan

+1

あなたのユーザーは、不完全なインストール手順から問題を把握するのに十分な知識を持っていますが、使用するRegasm.exeの4つのバージョンのどれが驚くべきものかわからないと思います。なぜあなたは自分でそれを試してみてください、あなたはすぐにそれが間違っているかを見るでしょう。 –

答えて

1

ありがとう:現在、当社のユーザーはCOMラッパーを登録するには、管理者権限で起動したコマンドプロンプトで次のコマンドを使用します。 64ビットOfficeに.NET COMラッパーを登録するには、顧客はFramework64サブフォルダから対応するregasmを起動する必要がありました。完全なコマンドラインは次のようになります。

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm <full_path_to_dll> /tlb /codebase 
関連する問題