Как импортировать функцию DLL, написанную на C, используя GO? - PullRequest
5 голосов
/ 22 ноября 2011

Я ищу пример кода, как импортировать функцию из DLL, написанной на C., эквивалентной DllImport из C#.NET.Возможно?Я использую Windows.любая помощь приветствуется.заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 22 ноября 2011

Используйте тот же метод, что и порт Windows Go.См. Исходный код для реализации Windows пакета Go syscall .Кроме того, взгляните на исходный код экспериментального пакета Go exp / wingui

4 голосов
/ 14 мая 2017

Есть несколько способов сделать это.

Способ cgo позволяет вам вызывать функцию следующим образом:

import ("C")
...
C.SomeDllFunc(...)

Он будет вызывать библиотеки в основном путем "связывания" с библиотекой.Вы можете поместить код C в Go и импортировать обычным способом C.

Есть и другие методы, такие как syscall

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

// ..

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
}

Естьэта полезная страница github, которая описывает процесс использования DLL: https://github.com/golang/go/wiki/WindowsDLLs

Существует три основных способа сделать это.

4 голосов
/ 22 ноября 2011

Вы хотите использовать cgo . Здесь введение.

...