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 중국어 웹사이트의 기타 관련 기사를 참조하세요!