Maison >développement back-end >Golang >Comment importer une fonction DLL C dans Go ?

Comment importer une fonction DLL C dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-05 07:47:12463parcourir

How to Import a C DLL Function into Go?

Comment importer une fonction DLL écrite en C à l'aide de Go

Question :

Comment pouvez-vous importer une fonction à partir d'une DLL écrite en C en utilisant Go, similaire à l'attribut DllImport dans C#.NET ?

Réponse :

Il existe plusieurs approches pour y parvenir dans Go :

1. Méthode Cgo :

L'utilisation de cgo vous permet d'accéder aux fonctions DLL comme suit :

import "C"

func main() {
    C.SomeDllFunc(...)
}

Cette approche "lie" essentiellement à la bibliothèque DLL. Vous pouvez incorporer du code C dans Go et l'importer à l'aide de la méthode C standard.

2. Méthode Syscall :

Vous pouvez également utiliser le package syscall, comme indiqué ci-dessous :

import (
    "fmt"
    "syscall"
    "unsafe"
)

var (
    kernel32, _        = syscall.LoadLibrary("kernel32.dll")
    getModuleHandle, _ = syscall.GetProcAddress(kernel32, "GetModuleHandleW")
)

func GetModuleHandle() (handle uintptr) {
    var nargs uintptr = 0
    if ret, _, callErr := syscall.Syscall(uintptr(getModuleHandle), nargs, 0, 0, 0); callErr != 0 {
        abort("Call GetModuleHandle", callErr)
    } else {
        handle = ret
    }
    return
}

3. Ressource GitHub :

Pour un guide détaillé sur l'utilisation des DLL dans Go, reportez-vous à la documentation de GitHub à l'adresse : https://github.com/golang/go/wiki/WindowsDLLs

Dans En résumé, il existe trois méthodes principales pour importer et utiliser les fonctions DLL écrites en C dans Go : cgo, syscall et la ressource GitHub mentionnée. ci-dessus.

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