>  기사  >  백엔드 개발  >  syscall.LazyProc을 사용하여 Go에서 COM 메서드를 호출하는 방법은 무엇입니까?

syscall.LazyProc을 사용하여 Go에서 COM 메서드를 호출하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-31 03:48:01921검색

How to Call COM Methods from Go Using syscall.LazyProc?

Go에서 COM 사용

문제

Go 프로그램에서 Windows DLL 파일을 사용하려고 하는데 다음과 같은 경우 오류가 발생합니다. COM 메소드 호출.

해결책

Go에서 COM 메소드를 호출할 때 syscall.LazyProc를 사용하려면 LazyProc 개체에서 제공하는 Call 함수를 사용해야 합니다. Call 함수는 모든 매개변수가 uintptrs로 전달될 것으로 예상합니다.

예를 들어 참조 스레드에 언급된 Direct3D9 Go 래퍼 예제에서 DllGetClassObject 함수를 가져와 보겠습니다. 서명은 다음과 같습니다.

HRESULT __stdcall DllGetClassObject(
  _In_  REFCLSID rclsid,
  _In_  REFIID   riid,
  _Out_ LPVOID   *ppv
);

Call을 사용하여 이 함수를 호출하려면 다음과 같이 해야 합니다.

// TODO set these variables to the appropriate values
var rclsid, riid, ppv uintptr
ret, _, _ := getClassObject.Call(rclsid, riid, ppv)
// ret is the HRESULT value returned by DllGetClassObject, check it for errors

XA_Session 개체의 경우 다음을 래핑해야 합니다. Go 유형으로 만든 다음 사용하려는 각 COM 메서드에 대한 래퍼 메서드를 정의합니다. 다음은 ConnectServer 및 DisconnectServer 메서드에 대한 단순화된 래퍼입니다.

package xasession

import "syscall"

type XASession struct {
    // ...
}

func (obj *XASession) ConnectServer(id int) int {
    // ...
}

func (obj *XASession) DisconnectServer() {
    // ...
}

위 내용은 syscall.LazyProc을 사용하여 Go에서 COM 메서드를 호출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.