Introduction :
Les DLL Windows peuvent présenter un défi lorsque tenter de les intégrer dans des projets Golang. Cet article fournit un guide sur la façon d'incorporer des composants COM à partir de DLL Windows dans Golang à l'aide des méthodes et des structures du modèle d'objet de composant (COM).
Procédure d'intégration COM :
Les fonctionnalités d'une DLL Windows sont accessibles dans Golang via l'utilisation de COM. Les étapes suivantes décrivent le processus :
Exemple :
Considérez un scénario dans lequel vous souhaitez utiliser une fonction COM nommée "ConnectServer" à partir d'une DLL. Voici un exemple de code :
<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>
Dans cet exemple, nous :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!