2016-08-30 5 views
0

VBA에서 간단한 C# DLL을 호출 할 때 심각한 문제가 발생해도 작동하지 않습니다. 다른 사람들을 위해 일하는 것처럼 보인 몇 가지를 시도했지만 운은 없었습니다.VBA에서 사용자 지정 C# DLL, 오류 429

기계 1 :

using System; 
using System.Runtime.InteropServices; 
using System.Windows.Forms; 

namespace DLLTester3 
{ 
    [Guid("6A40F90B-B8FC-4F4A-9B4C-850279D45B3B")] 
    [ClassInterface(ClassInterfaceType.AutoDual)] 
    [ProgId("DLLTester3.DoSometing")] 
    public class DLLTester3 
    { 
     public void DoSometing() 
     { 
      MessageBox.Show("Hello world"); 
     } 
    } 
} 

가 되세요 "폼 COM interop에 등록"과 세트 "조립 COM-볼합니다": 윈도우 7, 비주얼에서 sudio 2013 익스프레스, 여기

Office 2010을 내 C# 코드입니다 사실로, 어셈블리에 서명했다.

Option Explicit 

Sub DoIt() 
    Dim Something As DLLTester3.DLLTester3 
    Set Something = New DLLTester3.DLLTester3 
    Call Something.DoSometing 
End Sub 

기계 : 2 : 윈도우 10, 오피스 2013
는 기계 3 : 윈도우 서버 2008, DLL을 복사 오피스 2010
, RegAsm을을 사용하여 등록 엑셀에서 다음 VBA 실행

예상대로 작동 /codebase 옵션을 사용하면 두 시스템 모두 오류 429가 발생합니다.

제안 사항을 환영합니다! 당신이 한 일을 바탕으로

+0

Regasm.exe 문제 일 수 있습니다. 선택할 수있는 4 가지 버전이 있다면, 잘못된 선택을 할 확률은 약 75 %입니다. 음, 100 %. 당신이 사용한 것을 명시하십시오. –

+0

대상 프레임 워크 4.0 C : \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ RegAsm.exe (Windows 10) –

+0

100 % 확률을 감안할 때 Framework 디렉토리에있는 것을 사용하십시오. Framwork64의 기능은 64 비트 프로세스에서만 작동하며 Office는 여전히 일반적으로 32 비트 설치입니다. –

답변

0

: 당신이 ProgID를 당신이 DLL을 sigend 한 GUID

  • 을 추가 한
  • 을 추가 한

    • COM 볼 수

    당신이 필요 해야 할 일 :

    1. 는 GAC에 DLL을 추가 gacutil의 오른쪽 버전을 사용

      C : \ VBS \ DNFW4 \하여 gacutil.exe/난

    2. 이 DLL을 등록 할 RegAsm을 오른쪽 버전을 사용

      을 XXX.dll

      C : \ VBS \ DNFW4 \는 RegAsm.exe XXX.dll

    는 이제 VBS를 사용할 수 있습니다 그것을 테스트 :

    On Error Resume Next 
    
    Err.Clear 
    
    Set Obj=CreateObject("ProgId") 
    
    'output the error msg 
    If Err.Number <> 0 Then 
        WScript.Echo "Error: " & Err.Number 
        WScript.Echo "Error (Hex): " & Hex(Err.Number) 
        WScript.Echo "Source: " & Err.Source 
        WScript.Echo "Description: " & Err.Description 
        'Err.Clear 
        'Quit 
        WScript.Quit(Err.Number) 
    End If 
    
    'On Error Goto 0 
    
    'invoke the add method 
    WScript.Echo obj.Add(1,2) 
    
    
    set obj=Nothin 
    
  • +0

    Thx,하지만 문제가 해결되지 않았습니다 ... –

    +0

    @AntonK VBS로 COM을 호출 할 수 있습니까? 그렇다면 Framework4 대신 Framework3.5를 사용해 보시겠습니까? VBA는 Framework3.5와 Framework2.0을 더 잘 지원합니다. – neohope