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

Comment importer une fonction DLL C dans Go ?

Linda Hamilton
Libérer: 2024-12-05 07:47:12
original
476 Les gens l'ont consulté

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(...)
}
Copier après la connexion

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
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal