syscall.LazyProc を使用して Go から COM メソッドを呼び出す方法

Barbara Streisand
リリース: 2024-10-31 03:48:01
オリジナル
940 人が閲覧しました

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

Go での COM の使用

問題

Go プログラムで Windows DLL ファイルを使用したいのですが、次のときにエラーが発生します。 COM メソッドの呼び出し。

解決策

syscall.LazyProc を使用して Go から COM メソッドを呼び出す場合は、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!