windows – 从没有CGo的Go调用COM对象方法

前端之家收集整理的这篇文章主要介绍了windows – 从没有CGo的Go调用COM对象方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Go中创建了一个 Direct3D9 wrapper,它使用CGo与C中的COM对象进行交互.

我想摆脱Windows下对C编译器的依赖,这样用户就不必安装MinGW或Cygwin来使用Go的DirectX.

问题是d3d9.dll不暴露C函数但使用COM.加载DLL后可以直接调用的唯一函数(带有syscall.LoadLibrary(“d3d9.dll”))是Direct3DCreate9.这将返回一个COM对象,该对象将所有功能公开为方法.

如何在没有CGo的纯Go中调用DLL中的COM对象方法

我知道Go-OLE库,它声称它没有CGo调用COM接口,但我不能从源头看到我将如何为Direct3D9做同样的事情.只有相关部分的简单示例将会有很大帮助.

解决方法

(不是一个全面的答案,因为我没有时间对此进行实际测试,但仍然……)

虽然MSDN大多数时候都假设您使用某些具有内置“粘合剂”的平台(例如Visual C™产品或类似的东西)来处理COM对象,但实际上可以使用普通的COM对象. C-look herehere首发.

研究这些资源,您可以了解到在“COM接口”上调用方法相当于正确使用其“VTBL”(虚函数TaBLe)块,该块始终位于相对于由“接口”伪装的指针的众所周知的位置.实例化COM对象的函数返回的“thing”.

go-ole包在普通的Go中实现了你在普通C中所做的事情,所以凭借“调用我们需要在其VTBL上操作的COM对象上的方法”的知识,我们可以在其中找到IDispatch support的实现包.所以我从那里开始.

我还要直接进入go-ole问题跟踪器,要求实现一段示例代码,该代码将演示如何调用COM对象的处理程序上的方法,而不是通过调用go-ole包中的函数获取.

猜你在找的Windows相关文章