programing

단순 C# DLL - Excel, Access, VBA, VB6에서 어떻게 호출합니까?

kakaobank 2023. 5. 17. 23:20
반응형

단순 C# DLL - Excel, Access, VBA, VB6에서 어떻게 호출합니까?

저는 c#로 작성된 간단한 수업 도서관이 있습니다.

using System;
namespace TestDll
{
    public class Test
    {
        public string HelloWorld
        {
            get
            {
                return "Hello World";
            }
        }
    }
}

제 질문은 Microsoft Office Visual Basic(VB6인 것으로 생각됨)에서 이 HelloWorld 기능을 어떻게 부를 수 있을까요?

첫 번째 단계는 DLL을 참조로 추가하는 것이었지만 컴파일된 DLL을 검색하고 선택할 때 "지정된 파일에 참조를 추가할 수 없습니다."라는 메시지가 표시되었습니다.

이 작업을 수행하는 이유와 방법에 대해 올바른 방향을 알려줄 수 있는 사람이 있습니까?

잘부탁드립니다 SO!

COM interop을 통해 정적 멤버에 액세스할 수 없습니다.사실 당신의 코드는 컴파일조차 하지 않습니다. 메소드는 클래스에 있어야 합니다.다음은 이를 수행하는 방법입니다.

[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("01A31113-9353-44cc-A1F4-C6F1210E4B30")]  //Allocate your own GUID
public interface _Test
{
    string HelloWorld { get; }
}

[ClassInterface(ClassInterfaceType.None)]
[Guid("E2F07CD4-CE73-4102-B35D-119362624C47")]  //Allocate your own GUID
[ProgId("TestDll.Test")]
public class Test : _Test
{
    public string HelloWorld { get { return "Hello, World! "; } }
}

프로젝트 속성 빌드 탭에서 COM interop 등록을 선택합니다.그래서 결과를 빨리 볼 수 있습니다.다른 컴퓨터에 dll을 설치하려면 regasm을 사용해야 합니다.

사용 방법:

Dim o : Set o = CreateObject("TestDll.Test")
MsgBox o.HelloWorld

dll을 참조하고 얼리 바인딩을 사용할 수도 있습니다.

Dim o As TestDll.Test
Set o = New TestDll.Text
MsgBox o.HelloWorld

다른 컴퓨터에 DLL을 등록할 수 있습니다.

일단 당신이 당신의 개발 기계에서 위의 코드를 컴파일하고 빌드하면, 만약 당신이.

프로젝트 속성 빌드 탭에서 COM interop 등록을 선택합니다.

컴파일된 *.dll이 있는 Visual Studio 출력 폴더(일반적으로 bin\Debug)에도 *.tlb 파일이 있습니다.

이 *.tlb 파일은 '유형 라이브러리'입니다.그리고 *.dll의 다양한 '유형'을 이해하고 기본적으로 클라이언트 시스템에 사용 방법을 알려주기 위해 클라이언트 시스템에 필요합니다.

위의 'Register for COM interop'을 설정하고 *.tlb 파일을 생성하면 어셈블리(dll)가 컴퓨터에 등록되므로 액세스할 수 있습니다.

VBA에서 이제 이 파일을 참조로 추가할 수 있습니다.

VBA Editor -> Tools -> References -> Browse -> 선택

그러면 라이브러리에서 발견된 클래스를 선언할 수 있습니다.

Dim TestClass As Test
Set TestClass = New Test
MsgBox TestClass.HelloWorld

그러나 다른 클라이언트 시스템에서 dll을 사용하려면 regasm.exe를 사용하여 해당 시스템에 어셈블리(dll)를 등록해야 합니다.

이 작업은 명령줄을 통해 수행할 수 있습니다.

regasm.exe

이 경우에는

regasm.exe TestDll.dll

새 클라이언트 시스템에 어셈블리를 등록하면 *.tlb에 참조를 다시 추가하여 어셈블리에 액세스할 수 있습니다.

이것이 도움이 되길 바랍니다!

Visual Studio 2008에서 생성된 .tlb 파일을 가져오려면 Application | Assembly Information 아래로 가서 "Make Assembly COM visible"을 선택해야 합니다.그걸 찾는데 시간이 좀 걸렸으니 다른 사람들에게 도움이 되길 바랍니다.

앤서니에 추가하기WJones의 좋은 답변은 Regasm을 사용하여 DLL을 등록해야 한다는 것입니다.필요한 레지스트리 항목을 추가하는 exe.

언급URL : https://stackoverflow.com/questions/1170794/a-simple-c-sharp-dll-how-do-i-call-it-from-excel-access-vba-vb6

반응형