2017-04-19 18 views
0

우리는 WinForms 컨트롤을 .NET UserControl로 랩핑하고 Microsoft에서 사용할 COM 어셈블리로 사용할 수있게하는 VB.NET 프로젝트를 가지고 있습니다 사무실. 프로젝트는 이것을 수행하기위한 표준 기술을 사용합니다. 즉, 프로젝트 속성에서 '어셈블리 COM- 보이기'및 'COM Interop에 등록'체크 상자를 설정하고, 강력한 이름으로 어셈블리에 서명하는 등의 작업을 수행합니다. 우리의 고객은 마이크로 소프트 오피스의 64 비트 버전이 .NET의 COM 래퍼를 사용하려고 할 때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 

이 구조는 순간까지 년 동안 아무 문제없이 일했다 레지스트리에서 구성 요소의 등록은 다음과 같다. 인터넷에서이 질문에 대한 답변을 찾으려고했지만 WinForms 컨트롤에 대해 64 비트 호환 COM 래퍼를 구현하는 방법에 대한 지침을 찾을 수 없었습니다.

전혀 가능합니까? 그렇다면 올바른 방향으로 우리를 지적 할 수 있습니까?


UPDATE : 현재 우리의 사용자는 COM 래퍼를 등록 할 수있는 관리자 권한으로 실행 명령 프롬프트에서 다음 명령을 사용

regasm <full_path_to_dll> /tlb /codebase 
+0

이것은 문제가되지 않지만 중요한 정보는 질문에 없습니다. 사용자가 " 'COM Interop에 등록"확인란을 클릭하지 않습니다. 이 구성 요소가 사용자 컴퓨터에 어떻게 등록되어 있는지 설명해야합니다. 설치 프로그램을 만든 경우 64 비트 설치 프로그램이어야합니다. Regasm.exe를 사용하는 경우에는 64 비트 버전을 사용해야합니다. –

+0

@HansPassant, 우리 사용자들은 regasm을 사용합니다. 방금 질문에이 명령 줄 호출을 추가했습니다. – TecMan

+1

사용자가 불완전한 설치 지침에서 파악할만큼 잘 알고 있지만 사용하려는 Regasm.exe의 네 가지 버전 중 어떤 버전을 사용하는지 모를 것이라고 생각합니다. 왜 당신은 그것을 너 자신을 시도하지 않는가 당신은 빨리 그것으로 틀린 무슨을 볼 것이다. –

답변

1

감사를 @HansPassant에 대한 답을 찾는 데 도움을. 64 비트 Office 용 .NET COM 래퍼를 등록하려면 고객이 Framework64 하위 폴더에서 해당 regasm을 시작해야했습니다. 전체 명령 줄은 다음과 같습니다.

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm <full_path_to_dll> /tlb /codebase