Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengimport Fungsi C DLL ke dalam Go?

Bagaimana untuk Mengimport Fungsi C DLL ke dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-12-05 07:47:12434semak imbas

How to Import a C DLL Function into Go?

Cara Mengimport Fungsi DLL Ditulis dalam C Menggunakan Go

Soalan:

Bagaimana bolehkah anda mengimport fungsi daripada DLL yang ditulis dalam C menggunakan Go, serupa dengan atribut DllImport dalam C#.NET?

Jawapan:

Terdapat beberapa pendekatan untuk mencapai ini dalam Go:

1. Kaedah Cgo:

Menggunakan cgo membolehkan anda mengakses fungsi DLL seperti berikut:

import "C"

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

Pendekatan ini pada asasnya "menghubungkan" ke perpustakaan DLL. Anda boleh memasukkan kod C ke dalam Go dan mengimportnya menggunakan kaedah C standard.

2. Kaedah Syscall:

Sebagai alternatif, anda boleh menggunakan pakej syscall, seperti yang ditunjukkan di bawah:

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. Sumber GitHub:

Untuk panduan terperinci tentang menggunakan DLL dalam Go, rujuk dokumentasi GitHub di: https://github.com/golang/go/wiki/WindowsDLLs

In ringkasan, terdapat tiga kaedah utama untuk mengimport dan menggunakan fungsi DLL yang ditulis dalam C dalam Go: cgo, syscall dan sumber GitHub disebutkan di atas.

Atas ialah kandungan terperinci Bagaimana untuk Mengimport Fungsi C DLL ke dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn