Maison >développement back-end >Golang >Les applications Go peuvent-elles utiliser directement les DLL C#, et sinon, quelles solutions existent ?

Les applications Go peuvent-elles utiliser directement les DLL C#, et sinon, quelles solutions existent ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-05 09:14:16816parcourir

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

Utilisation de DLL C# dans les applications Go : est-ce possible ?

L'appel de DLL C# à partir d'applications Go a été un sujet de discussion pour certains temps, et bien que ce ne soit pas un processus simple comme l'utilisation de DLL C ou C, il est possible avec l'aide de logiciels externes bibliothèques.

Possibilités actuelles dans Go

À l'heure actuelle, les options permettant d'utiliser directement les DLL C# dans Go sont limitées. Le package golang.org/x/sys/windows fournit une certaine prise en charge pour l'appel de DLL Windows à partir de Go, mais il ne s'étend pas aux DLL C#.

Solution alternative

Heureusement, un projet sur GitHub nommé go-dotnet vise à combler le fossé entre les assemblys Go et .NET. En intégrant une bibliothèque d'interopérabilité basée sur COM, go-dotnet permet aux applications Go d'appeler des méthodes C#.

Exemple

Pour démontrer comment utiliser go-dotnet, considérons une simple DLL C# qui ajoute deux nombres :

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

Dans Go, nous pouvons utiliser go-dotnet pour s'interfacer avec ceci 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"
}

Veuillez noter qu'une configuration supplémentaire peut être nécessaire pour que go-dotnet fonctionne correctement, comme l'ajustement des chemins système ou l'utilisation d'une version de Go prenant en charge l'interopérabilité COM.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn