はじめに:
Windows DLL は次のような場合に問題を引き起こす可能性があります。それらを Golang プロジェクトに統合しようとしています。この記事では、コンポーネント オブジェクト モデル (COM) のメソッドと構造を使用して、Windows DLL から Golang に COM コンポーネントを組み込む方法についてのガイドを提供します。
COM 統合手順:
Windows DLL の機能には、COM を使用して Golang でアクセスできます。次の手順はプロセスの概要です:
例:
DLL から「ConnectServer」という名前の COM 関数を使用するシナリオを考えてみましょう。コード サンプルは次のとおりです。
<code class="go">package main import ( "syscall" "unsafe" ) type xaSessionVtbl struct { QueryInterface, AddRef, Release, ConnectServer uintptr } type XASession struct { vtbl *xaSessionVtbl } func (obj *XASession) AddRef() uint32 { ret, _, _ := syscall.Syscall(obj.vtbl.AddRef, 1, uintptr(unsafe.Pointer(obj)), 0, 0) return uint32(ret) } func (obj *XASession) ConnectServer(id int) int { ret, _, _ := syscall.Syscall(obj.vtbl.ConnectServer, 2, uintptr(unsafe.Pointer(obj)), uintptr(id), 0) return int(ret) } func main() { xaSession, _ := syscall.NewLazyDLL("XA_Session.dll") getClassObject := xaSession.NewProc("DllGetClassObject") var rclsid, riid, ppv uintptr getClassObject.Call(rclsid, riid, &ppv) xaSessionObj := (*XASession)(unsafe.Pointer(ppv)) success := xaSessionObj.ConnectServer(12345) if success == 0 { fmt.Println("Successfully connected.") } else { fmt.Println("Connection failed.") } }</code>
この例では、
以上がCOM を使用して Windows DLL 機能を Golang プロジェクトに統合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。