我已经使用 COM 几年了,但从来没有写过接口,所以这让我有点困惑。
我有一个接口,让它被调用IFoo
,定义为
import "unknwn.idl";
[
object,
uuid( // guidgen generated one // ),
] interface IFoo : IClassFactory
{
HRESULT Bar(const BYTE * pb, ULONG cb );
};
我使用 MIDL 生成的文件编译并注册到 Windows 注册表中。我还制作了一个本地 COM 服务器,它基本上实现了 IFoo。在此,我遵循“Microsoft SDKs\Windows\v7.0\Samples\com\fundamentals\dcom\simple\”示例代码,将 IStream 替换为我自己的 IFoo。
我可以在我的客户端代码中创建一个 IFoo 实例,但成员函数“Bar”不起作用。我不知道为什么,看,当我打电话时
IFoo->Bar( 0x42A110, 352 ); // address just an example
服务器端将参数视为
Bar( 0x560E20, 352 );
地址值并不重要,但这里的翻译是什么?帮助表示赞赏:) 目前,我只是传递一个指向 a 数据开头的指针,std::vector
这些数据可能无法跨进程边界访问,但这并不能解释翻译。