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;
}
};
No.1ベストアンサー
- 回答日時:
のシェル拡張シリーズがSDKでCOM作ってます。外部公開する関数の定義、実装、IUnknownインターフェイスの実装は一緒です。といってもここではIUnknownの実装は省略されちゃってますね。基本なんで。
#シェル拡張の場合は自分でタイプライブラリは持たないのが普通です。IContextMenuとかはすでにSDKのヘッダに存在するためです。
もしかしてここを見ながらやってました?ここにしっかりとIUnknownの3つのメソッドは実装方法書いてありますけど。なんでChapter.6のソースをベースにしないかなぁ。
http://www5.plala.or.jp/atata/com/
#で、全部聞かないで自分で調べたりとかして勉強しましょうね。
http://okweb.jp/kotaeru.php3?q=1266493
回答ありがとうございます。
以前の質問はすみませんでした。
締め切れなくなりなりました。
自分の努力不足でした。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Notepad++の関数リスト表示の変...
-
【gcc・cygwin】multiple defin...
-
int main()、void main()、void...
-
C++にてtemplateで受け取った任...
-
戻り値を返す関数の前に(void)...
-
ArduinoでMouse関数を使用して...
-
C++別のオブジェクトからメンバ...
-
合格か否かを表示するプログラ...
-
C#でラジオボタンを設定に記録...
-
C# KeyDownイベントでショート...
-
void*型の配列について
-
C# Controls.Addで動的に配置し...
-
多重定義が起きている?--lnk20...
-
c言語 引数のvoidについて
-
構造体を宣言と共に初期化する方法
-
CTabCtrl:TABインデックス単位...
-
コールバックって・・・
-
静的でないメンバ関数の呼び出...
-
クラス間でのクラスの共有?
-
マイナスからプラスへ転じた時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【gcc・cygwin】multiple defin...
-
int main()、void main()、void...
-
戻り値を返す関数の前に(void)...
-
既定のコンストラクタがありま...
-
Notepad++の関数リスト表示の変...
-
ArduinoでMouse関数を使用して...
-
多重定義が起きている?--lnk20...
-
C++にてtemplateで受け取った任...
-
静的でないメンバ関数の呼び出...
-
C# Controls.Addで動的に配置し...
-
const_castのつかいどころを教...
-
(void)0 はどんな意味ですか
-
C# KeyDownイベントでショート...
-
gcc: incompatible pointer type
-
C#でラジオボタンを設定に記録...
-
VC++でGetKeyboardStateがうま...
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
void*型の配列について
-
GDI+の使用方法について
-
DirectInput でのエラー
おすすめ情報