プロが教えるわが家の防犯対策術!

MessageDll.idlファイルで以下のようにコードを書いて、コンパイルしてできた
MessageDll_h.hをインクルードして、
MessageComponent.cppに以下のように記述しました。
実装方法を教えてください。
また、間違っている所は指摘して頂きたいです。
DllRegisterServerとか足りない所はありますが、class内部だけでもお願いします。
お願いします。
//MessageDll.idl
import "oaidl.idl";
import "ocidl.idl";
[uuid(7BBCC3A6-033D-4306-BC3D-EA358549F30F),version(1.0)]
library ComputerLibrary
{
importlib("stdole2.tlb");
[uuid(9CAEC929-7E14-4af3-80EE-3D4EFECB3DCC), object]
interface IMessage : IUnknown
{
HRESULT Message();
};
[uuid(0689B073-989C-483c-9757-0770F90A8C86)]
coclass MessageClass
{
[default] interface IMessage;
};
};
//MessageComponent.cpp
#include"MessageDll_h.h"
class MessageClass : public IMessage
{
public:
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject)
{
// 指定されたIID(Interface ID)に応じて、そのインターフェースポインタを
// *ppvObjectに渡してやります。
if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IMessage))
{
*ppvObject = static_cast<IMessage *>(this);
}
else
{
*ppvObject = NULL;
return E_NOINTERFACE;
}
return S_OK;
}

ULONG STDMETHODCALLTYPE AddRef()
{
// 今は何もしません。
return 0;
}
ULONG STDMETHODCALLTYPE Release()
{
// Release関数は、その名の通りコンポーネントの開放を行います。
delete this;
return 0;
}
HRESULT STDMETHODCALLTYPE Message()
{
MessageBox(NULL,"Hello World","",MB_OK);
return 0;
}
};

A 回答 (1件)

http://www.runan.net/program/tips/sdk.shtml
のシェル拡張シリーズがSDKでCOM作ってます。外部公開する関数の定義、実装、IUnknownインターフェイスの実装は一緒です。といってもここではIUnknownの実装は省略されちゃってますね。基本なんで。

#シェル拡張の場合は自分でタイプライブラリは持たないのが普通です。IContextMenuとかはすでにSDKのヘッダに存在するためです。

もしかしてここを見ながらやってました?ここにしっかりとIUnknownの3つのメソッドは実装方法書いてありますけど。なんでChapter.6のソースをベースにしないかなぁ。
http://www5.plala.or.jp/atata/com/


#で、全部聞かないで自分で調べたりとかして勉強しましょうね。
http://okweb.jp/kotaeru.php3?q=1266493
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
以前の質問はすみませんでした。
締め切れなくなりなりました。
自分の努力不足でした。
ありがとうございました。

お礼日時:2005/03/27 19:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!