次のようにCOMDLLをインポートする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ファイルは、2番目と3番目のパラメーターのタイプを変更しました。
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*」に変更された理由がわかりません。コンパイラがこれを実行しないようにする方法はありますか?