我正在编写一个导入 COM DLL 的 C++ 应用程序,如下所示,
#import "MyLib.dll" no_namespace, raw_interfaces_only
使用在 idl 文件中声明的方法 '_GetObject' 存在问题,如下所示,
[
object,
uuid(f022c0e0-1234-5678-abcd-c17d63954f4b),
dual,
nonextensible,
helpstring("IStorageProxy Interface"),
pointer_default(unique)
]
interface IStorageProxy : IDispatch
{
[hidden, helpstring("method _GetObject")]
HRESULT _GetObject(
[in] BSTR entryId,
[in] REFCLSID rclsid,
[in] REFIID riid,
[out, iid_is(riid), retval] IUnknown** stgObject);
};
但是生成的tlh文件改变了第二个和第三个参数的类型。
struct __declspec(uuid("f022c0e0-1234-5678-abcd-c17d63954f4b"))
IStorageProxy : IDispatch
{
//
// Raw methods provided by interface
//
virtual HRESULT __stdcall _GetObject (
/*[in]*/ BSTR entryId,
/*[in]*/ GUID * rclsid,
/*[in]*/ GUID * riid,
/*[out,retval]*/ IUnknown * * stgObject ) = 0;
};
由于我正在针对原始函数签名(在 idl 中定义)进行编码,所以现在 C++ 代码无法编译。我不确定为什么类型更改为“GUID *”。有没有办法阻止编译器这样做?