> 백엔드 개발 > Golang > C DLL 함수를 Go로 어떻게 가져올 수 있나요?

C DLL 함수를 Go로 어떻게 가져올 수 있나요?

Susan Sarandon
풀어 주다: 2024-12-10 18:06:11
원래의
657명이 탐색했습니다.

How Can I Import C DLL Functions into Go?

DllImport Equivalent를 사용하여 Go로 DLL 함수 가져오기

문제 설명

C#에서, DllImport는 C로 작성된 DLL에서 함수를 가져오는 데 사용됩니다. C에서 생성된 DLL 함수를 가져올 수 있는 유사한 메커니즘을 Go에서 사용할 수 있습니까?

CGO 및 Syscall을 사용한 솔루션

DLL 함수를 Go로 가져오는 방법에는 여러 가지가 있습니다. 한 가지 방법은 C 코드에 대한 Go 바인딩 생성을 용이하게 하는 cgo 패키지를 사용하는 것입니다. cgo를 사용하면 마치 Go 함수인 것처럼 DLL 함수를 직접 호출할 수 있습니다.

또 다른 방법은 syscall 패키지를 활용하는 것입니다. 이를 통해 DLL 로딩 및 함수 호출을 포함하여 시스템의 하위 수준 API와 상호 작용할 수 있습니다. 메모리를 명시적으로 관리하고 필요한 시스템 기능을 호출하면 syscall을 사용하여 DLL 함수를 가져올 수 있습니다.

CGO용 예제 코드

import "C"

func main() {
    C.SomeDllFunc(...)
}
로그인 후 복사

CGO용 예제 코드 시스콜

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
}
로그인 후 복사

추가 리소스

자세한 내용은 다음 리소스를 참조하세요.

  • [Windows에서 DLL 사용](https://github.com/golang/go/wiki/ WindowsDLL)

위 내용은 C DLL 함수를 Go로 어떻게 가져올 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿