- PR -

【C#】IMalloc.FreeとMarshal.FreeHGlobalの違い

投稿者投稿内容
清華
ベテラン
会議室デビュー日: 2005/12/21
投稿数: 50
投稿日時: 2005-12-26 17:39
引用:
なんだかMarshal.GetTypedObjectForIUnknownメソッドのMSDNの解説を見てみると、
第2引数の"Type t"って制約が多いんですね。
引用:

解説
t パラメータは、COM インポート型または COM インポート型のサブタイプである必要があります。さらに、 t は、タイプ ライブラリ インポータ ( Tlbimp.exe) によってメタデータがインポートされた型である必要があります。



よく分からないですが…解説から推測するに
たとえば、ExcelをCOM参照設定で追加した場合、
「ApplicationClassクラス」と「Applicationインターフェイス」が自動的に定義されますが、

【OK】Object o = Marshal.GetTypedObjectForIUnknown(ptrUnknown, typeof(ApplicationClass));
【NG】Object o = Marshal.GetTypedObjectForIUnknown(ptrUnknown, typeof(Application));

ってことでしょうか。


はっきりいってMSDNの解説さっぱり分かりませんね(苦笑。
インターフェイスを渡せないというのは不思議な感じがします、この辺深く下げるとごっちゃになりそうなので手を引きます(苦笑。

稍丼さんもいってるようにキャストする必要性が出るなら Marshal.GetObjectForIUnknown(ptrRet); 使うほうが綺麗な気もしますが……

どっち使えばどのような問題と利点が発生するんですかマイクロソフトさん(苦笑。

たぶんこれから Marshal.GetObjectForIUnknown(ptrRet); 使うと思います、凡庸性がありますし、コードコピーして使いまわすときに書き換えるのが少なくてすみますし(そういう理由か……

お二方いろいろ深いところまで下げていっていただいて有難うございました。

スキルアップ/キャリアアップ(JOB@IT)