Maison > développement back-end > Golang > Comment puis-je importer des fonctions DLL C dans Go ?

Comment puis-je importer des fonctions DLL C dans Go ?

Susan Sarandon
Libérer: 2024-12-10 18:06:11
original
657 Les gens l'ont consulté

How Can I Import C DLL Functions into Go?

Importation d'une fonction DLL dans Go à l'aide de DllImport Equivalent

Énoncé du problème

En C#, DllImport est utilisé pour importer des fonctions à partir d'une DLL écrite en C. Existe-t-il un mécanisme similaire disponible dans Go qui permet d'importer Fonctions DLL créées en C ?

Solution utilisant CGO et Syscall

Il existe plusieurs approches pour importer une fonction DLL dans Go. Une méthode consiste à utiliser le package cgo, qui facilite la création de liaisons Go pour le code C. Avec cgo, vous pouvez appeler directement les fonctions DLL comme s'il s'agissait de fonctions Go.

Une autre méthode exploite le package syscall. Cela vous permet d'interagir avec les API de bas niveau du système, y compris le chargement de DLL et l'appel de fonctions. En gérant explicitement la mémoire et en appelant les fonctions système nécessaires, vous pouvez importer des fonctions DLL à l'aide de syscall.

Exemple de code pour CGO

import "C"

func main() {
    C.SomeDllFunc(...)
}
Copier après la connexion

Exemple de code pour Syscall

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

func main() {
    kernel32, _ := syscall.LoadLibrary("kernel32.dll")
    getModuleHandle, _ := syscall.GetProcAddress(kernel32, "GetModuleHandleW")

    handle := GetModuleHandle()
    fmt.Println(handle)
}

func GetModuleHandle() uintptr {
    var nargs uintptr = 0
    ret, _, _ := syscall.Syscall(uintptr(getModuleHandle), nargs, 0, 0, 0)
    return ret
}
Copier après la connexion

Supplémentaire Ressources

Pour plus de détails, reportez-vous aux ressources suivantes :

  • [Utilisation de DLL sous Windows](https://github.com/golang/go/wiki/ WindowsDLL)

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!

source:php.cn
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