>백엔드 개발 >Golang >Go 애플리케이션이 C# DLL을 직접 사용할 수 있습니까? 그렇지 않은 경우 어떤 해결 방법이 있습니까?

Go 애플리케이션이 C# DLL을 직접 사용할 수 있습니까? 그렇지 않은 경우 어떤 해결 방법이 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-05 09:14:16816검색

Can Go Applications Directly Use C# DLLs, and If Not, What Workarounds Exist?

Go 애플리케이션에서 C# DLL 사용: 가능합니까?

Go 애플리케이션에서 C# DLL을 호출하는 것은 일부 사람들에게 토론 주제였습니다. C나 C DLL을 사용하는 것처럼 간단한 프로세스는 아니지만 외부 도구의 도움으로 가능합니다.

Go의 현재 가능성

현재 Go에서 C# DLL을 직접 사용할 수 있는 옵션은 제한되어 있습니다. golang.org/x/sys/windows 패키지는 Go에서 Windows DLL을 호출하기 위한 일부 지원을 제공하지만 C# DLL로 확장되지는 않습니다.

대체 솔루션

다행히 go-dotnet이라는 GitHub 프로젝트는 Go와 .NET 어셈블리 간의 격차를 줄이는 것을 목표로 합니다. go-dotnet은 COM 기반 상호 운용성 라이브러리를 통합하여 Go 애플리케이션이 C# 메서드를 호출할 수 있게 해줍니다.

go-dotnet 사용 방법을 시연하기 위해 다음을 고려해 보겠습니다. 두 개의 숫자를 추가하는 간단한 C# DLL:

public class Adder
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

Go에서는 다음을 사용할 수 있습니다. go-dotnet을 이 DLL과 인터페이스하려면:

package main

import (
    "fmt"

    "github.com/matiasinsaurralde/go-dotnet/dotnet"
)

func main() {
    assembly, err := dotnet.AsAssembly("MathForGo.dll")
    if err != nil {
        panic(err)
    }

    adderType, err := assembly.Type("MathForGo.Adder")
    if err != nil {
        panic(err)
    }

    addMethod, err := adderType.Method("Add")
    if err != nil {
        panic(err)
    }

    result, err := addMethod.Invoke(2, 3)
    if err != nil {
        panic(err)
    }

    fmt.Printf("%v\n", result) // Prints "5"
}

go-dotnet이 제대로 작동하려면 시스템 경로를 조정하거나 COM 상호 운용성을 지원하는 Go 버전을 사용하는 등 추가 설정이 필요할 수 있습니다.

위 내용은 Go 애플리케이션이 C# DLL을 직접 사용할 수 있습니까? 그렇지 않은 경우 어떤 해결 방법이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.