COM

■ このスレッドは過去ログ倉庫に格納されています
1IUnkonwn
垢版 |
2007/01/10(水) 20:13:15
いざ語れや
2008/04/23(水) 17:03:26
>>202
どう使うかということは、MSDNライブラリを眺めるより、
サンプルを探しにググって実例を見たほうが分かるようになる。
2008/04/23(水) 19:07:22
>>206
全くその通りなんだけど、
サンプル見つからなくてね・・・。
2008/04/25(金) 00:15:14
>>204
>>205

なるほどー。QSで帰ってくるものは自分自身じゃないんだ。しらなかった。どうもありがとう。
ん?でもでも、だとすると次なる疑問が。。。

QIの価値はわかる。同一コンポーネントが複数IFを持つことは価値があるし、
(IPersistXXXXを持ち、IMyAppを持ち、IMyConfigを持ち、とか)
それが機能するには、Platform側の標準やりとりが必要だから。
(Javaだと言語が切り替えの仕組みをサポートするとか)

それに対しQSって何で必要なんだろ。
標準やりとりが必要ないなら、単純にGetter相当でOKのような。
2008/04/25(金) 01:37:41
ごめん、自己解決。なんで必要か分かった。
はじめから追加サービスがどれだけあるか決まってるならGetterでいいが、
今後の拡張にそってどれだけサービスが増えるか分からないので、名前引きにした、ということですな。
expandoみたいな考え方な。

だからPluginとかいう話もガイシュツだったわけね。賢いなぁ、アドバイスしてくれた人
2008/04/26(土) 01:29:06
COMコンポーネントのメソッドから、COMコンポーネント呼び出し元クライアントの
SID取って管理者権限か判断とかできるかな?
211デフォルトの名無しさん
垢版 |
2008/09/07(日) 09:08:57
COM勉強してるけど、楽しいなあ
2008/09/07(日) 09:56:27
最初だけだよ・・・一定規模以上のプログラム作り出したら全てを放り投げたくなる
2008/09/07(日) 10:50:31
Javaが90年代に鯖サイドであっという間に普及したのはCOMのめんどくささのおかげ
CORBAよりはましだけど
2008/09/07(日) 18:37:14
何ズレた事言ってんだよw
215デフォルトの名無しさん
垢版 |
2008/10/22(水) 17:34:53
C#からCOMいじりしてると、なんか脳液がドクドク出てくるのが分かる
もうシェルインターフェイスだけで丼飯バクバク食えるぞ
自分がMだとは思わなかった
2008/10/22(水) 18:26:23
C++からCOMいじると最強。 >これ、何の意味がある暗号インターフェース?
2008/10/22(水) 18:31:43
これ、何語? >MFC
2008/10/24(金) 13:03:42
C#でCOM使ったことあるけどそんな大変でもないよね。
>>215はどんだけ敏感なんだ?
2008/10/24(金) 19:23:32
C#ではExcelのオートメーションみたいにデフォルト引数を使いまくりだと死ねる。
2008/10/27(月) 11:06:10
C#では重かったり、.net frameworkでサポートされてないのを
C++で書いてCOM化してC#から呼ぶのは使えるな。
2008/10/27(月) 11:10:24
 ↑
C#とCOMを無きものにしたらどうよ?
2008/10/27(月) 12:34:16
windowsでGUIアプリ作るのにC#って選択肢ははずせないしね・・・
さすがに、いまさらATLとかは辛い。
2008/10/27(月) 12:43:10
>windowsでGUIアプリ作るのにC#

外して下さい。
おながいします。
2008/10/30(木) 22:47:48
COM作ろうと思って、shobjidl.hインクルードしたんだが、多重定義のエラー

で、調べてみるとNO_WIN32_LEAN_AND_MEANをdefineすれば解決できるらしい

#define NO_WIN32_LEAN_AND_MEANしようが、コンパイルオプションに/D NO_WIN32_LEAN_AND_MEAN

つけようが、まだ多重定義エラーがでる・・・

解決策おしえてー;;

win xp sp3
vc++6
platform sdk 2003 server sp1
2008/10/30(木) 23:04:27
WIN32_LEAN_AND_MEANを定義したままなんてことはないよな?
2008/10/30(木) 23:08:44
>>225
はい。
ソースのほうは

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

にしてるので・・・

はあ・・・・なんでだ・・・
なんだかんだで1日中調べてる・・・

どこかで、VC++6では2003年2月以降に発行されたplatform sdkは使えないとか
書いてあったけどそれは違うよね・・・?
2008/10/30(木) 23:12:53
>>226
それ削除しないと駄目だ。
両方定義していたら、たぶんWIN32_LEAN_AND_MEANが優先される。
2008/10/30(木) 23:19:59
>>227
優先される?って?

/D WIN32_LEAN_AND_MEAN単独でも
#define WIN32_LEAN_AND_MEAN単独でも
どちらも同じように多重定義エラーでるんですよね・・・


ちなみに・・VC++6のコンパイルオプションだけど、
プロジェクト⇒設定⇒C/C++オプションのところに
/D WIN32_LEAN_AND_MEANを加えるですよね
2008/10/30(木) 23:29:32
>vc++6 
>platform sdk 2003 server sp1 

VCのバージョンを上げろゴラってことじゃないかと・・・
2008/10/30(木) 23:39:59
>>228

NO_WIN32_LEAN_AND_MEANよりWIN32_LEAN_AND_MEANが優先されるだろうからWIN32_LEAN_AND_MEANのマクロシンボルを削除しろってことじゃないの?

>>224>>228の内容が矛盾してるよ。
>>224ではNO_WIN32_LEAN_AND_MEANを定義したいと言ってるのに>>228ではWIN32_LEAN_AND_MEANを定義してるよ。
231224,226,228
垢版 |
2008/10/31(金) 00:08:51
すみません。
すべてNO_WIN32_LEAN_AND_MEANです。
232デフォルトの名無しさん
垢版 |
2008/11/10(月) 20:10:51
永遠なるCOMを称えてage
2008/12/07(日) 02:34:42
Windowsの音量を変更するCOM教えてください。。。
すんません、こんな質問で。
2008/12/08(月) 12:28:56
つ[http://www.google.co.jp/search?hl=ja&q=Windowsの音量を変更するCOM教えてください]
235デフォルトの名無しさん
垢版 |
2009/04/08(水) 22:12:02
"wshom.ocx"をimportしようとすると生成された.tlh,.tli でエラーが発生します

#import "C:\WINDOWS\system32\wshom.ocx" rename_namespace("XXX") named_guids

debug\wshom.tlh(1004) : error C2629: 'class _variant_t (' は不正です。
debug\wshom.tli(832) : warning C4003: マクロ 'GetFreeSpace' に指定された実引数の数が少なすぎます。


import以外にはなにもしていない(mainからreturnしているだけ)なのにこのようなエラーがでる理由がわかりません。
importするやり方が悪いのでしょうか?
2009/04/10(金) 19:40:45
ほしゅ
237235
垢版 |
2009/04/11(土) 21:35:32
ITypeLib ViewerからVBScript Regular Expression を*.IDLファイルに保存したら、
ファイルに出力されるインターフェースが途中までしか保存されません。

具体的には、IregExp2インターフェースの

interface IRegExp2 : IDispatch {
[id(0x00002711), propget]
HRESULT Pattern([out, retval] BSTR* pPattern);
[id(0x00002711), propput]
HRESULT Pattern([in] BSTR pPattern);
[id(0x00002712), propget]
HRESULT IgnoreCase([out, [EOF] ←[EOF]は出力されません。単にファイル終端なだけです

ここまででファイルの終端になっています。何が悪いんだろう・・・


2009/04/13(月) 02:42:25
>>237
最近同じところではまった気がする

結局、何が悪いかは分からなかったけど、ITypeLib View のウィンドウの右ペインで
テキスト選択 => コピー => エディタで貼り付け、
で回避した

ちなみにコピーは Ctrl+C
Ctrl+C のコピーできるなら、マウス右クリックの編集メニューサポートしとけよって…
239235
垢版 |
2009/04/14(火) 22:04:30
ありがとう!!!

手動コピペでうまくいった
240235
垢版 |
2009/04/14(火) 22:48:06
>>233
> Windowsの音量を変更するCOM教えてください。。。
> すんません、こんな質問で。
>

   Dim objShell
  Set objShell = CreateObject("Shell.Application.1")
  objShell.ControlPanelItem("mmsys.cpl")

これでどうよ?コントロールパネル-サウンドとオーディオデバイスのプロパティ を出すだけだけど
241235
垢版 |
2009/04/14(火) 23:23:57
APIでwaveOutSetVolume()ってのがあるみたいだな>>オーディオの調整
2009/04/16(木) 13:13:27
はいはい
2009/05/05(火) 15:20:06
>>235
#import <wshom.ocx> rename("FreeSpace","FreeSpace2")

main.obj - エラー 0、警告 0



244デフォルトの名無しさん
垢版 |
2009/08/27(木) 04:41:21
あげ
2009/08/30(日) 05:14:08
COM形式の実行ファイルの話はこのスレでいいんですか
2009/08/30(日) 12:33:10
いいとは思うが、COM形式の実行ファイルって何だ?
2009/08/30(日) 12:47:30
command.com
2009/08/30(日) 13:10:03
いまさらそっちのCOMなのか
じゃあ違うな
個別のスレはなさそうだし、「スレ立てるまでもない質問はここで」とかで聞くしかないんじゃないの?
2009/10/20(火) 05:39:50
office製品との連携にc++でcom(dll)作ってしまうのが良さそうと思ったけど、誰も使ってなさそうだな。orz
みんなvbaで済ませちゃってるっぽいな。vb回避したいのでいろいろ探してcomにたどり着いたのに。orz
それとももうcomは捨てて、まねーじcom(.net)のほうに逝っちゃったかな?
.netはcom使える様にする設定が面倒と思った。
2009/10/21(水) 05:21:57
もうだれもobaやってないみたいだなw
2009/10/30(金) 12:34:24
Inside COMって絶版だったのか。
会社にあったから何とかなったけど、
XPCOMでの関連書籍にEssential COMとかあるのに、それも絶版とか・・・
2009/10/30(金) 12:43:45
Inside COM
には、
COMは誰も定義が言えないうえ今までなかったプログラミングの構造だが、
今後のプログラミングはこの構造になるって、
ばっちゃが書いてた。
2009/10/31(土) 04:55:58
いまは.netの方向に進んでて、comは捨てられてるな。
2009/11/02(月) 09:43:44
ドトネト進むというか迷走だがw
2009/11/02(月) 16:10:20
com回帰来るの?
2009/11/02(月) 16:33:30
そうならなくて、HTML5だろ、jk
2009/11/12(木) 23:34:11
シェル拡張ってInprocServerじゃないとダメなの?
サンクも出来ないLocalServerなCOMも呼べないとかどうしようもないお荷物じゃねーか
2009/11/13(金) 16:08:58
>【IT】英ITサイトの「Microsoft製品のワースト10」、1位はあのOS[09/11/13]
>ttp://anchorage.2ch.net/test/read.cgi/bizplus/1258085902/
英ITニュースサイトV3.co.ukが、同サイトが選んだMicrosoft製品のワースト10を
発表した。
10位はMS-DOS 4.0、
9位はIE 5、
8位は「期待ほど革新的ではなかった」という理由でWindows 95、
7位はZune、
6位はBob(Windows 3.1/95にバンドルされたナビゲーションシステム)、
5位は「セキュリティ問題を引き起こした」という理由でActiveX、
4位はWindows Vista、
3位はVista Capable(Vista対応PCにロゴを付けるプログラム。実際はVista Capableは
Home Basicエディションにしか対応していなかった)、
2位はClippy(クリップの形をしたOfficeのマスコットキャラクター)、
1位はWindows Meだった。

ソースは
http://www.itmedia.co.jp/news/articles/0911/13/news028.html
Top 10 worst Microsoft products of all time(V3.co.uk)
http://www.v3.co.uk/v3/news/2252318/top-worst-microsoft-products
http://www.v3.co.uk/v3/news/2252318/top-worst-microsoft-products
http://www.v3.co.uk/v3/news/2252318/top-worst-microsoft-products?page=2
2010/01/30(土) 22:24:33
VC++ のキーワード __hook で COM のイベントのソースとハンドラを繋げる仕組みがありますが、
__hook を使わず、COM 系関数などで完全に再現できるものでしょうか。
2010/02/05(金) 18:06:08
いろいろ調べたところ、
__hook と同等の機能かはわかりませが、
IConnectionPointContainer インターフェイスを用いることで、
__hook を使わなくても COM のサーバーとクライアントを
イベントで関連づけることができました。

お騒がせししました。
2010/02/05(金) 18:56:45
おお
2010/09/01(水) 22:42:43
COMインタフェース登録時のパス指定について。

動作&開発環境:Windows XP Embedded & VC++2005

HogeHogeCom.dllを作成し、IHogeObjectを作りました。
dllと同一フォルダにバッチファイルを作成し、以下を記述しました。

regsvr32 HogeHoge.dll

バッチファイルを叩いたところ、
「HogeHoge.dllのDllRegisterServerは成功しました。」と表示されますが、
レジストリ登録が失敗しています。
CoCreateInstance()で0x80040154 (REGDB_E_CLASSNOTREG)が返されます。

regsvr32 に相対パスではなく絶対パスを指定すると、
レジストリ登録が成功します。
CoCreateInstance()で0 (S_OK)が返されます。


質問の内容ですが、
regsvr32でCOM登録する場合は、絶対パスを指定しないとダメなのでしょうか?
2010/09/02(木) 00:07:50
環境変数
264デフォルトの名無しさん
垢版 |
2011/02/25(金) 23:01:19.09
蘇れ
2011/02/26(土) 19:19:28.35
>>262
レジストリ登録ファイル使えばええがな。
アレと、継承ツリーを遡り、IIDをマッピングする独自テンプレート
書いておくとATL無しでも簡単にCOMサーバー書けるぞ。

話は変わるが.netってCLSID付きのクラスや、共有のインスタンスって
作れるの?
2011/03/03(木) 00:26:26.58
>>265
後者は知らない。
CLSIDはGuid属性付きでクラス定義すればOK。
267デフォルトの名無しさん
垢版 |
2011/03/12(土) 21:46:04.54
IDispatchって簡単に言うとなんですか?
2011/03/13(日) 04:23:01.91
WM_COMMAND
2011/03/13(日) 06:54:02.94
ポリモーフィズム
270デフォルトの名無しさん
垢版 |
2011/03/18(金) 23:42:19.02
ん、つまり
いみがわからない
2011/03/26(土) 23:15:49.47
馬鹿にはcomは無理。
2011/04/09(土) 17:50:41.49
.netでCOMインターフェイス実装して
なんも知らないユーザーがMarshal.ReleaseComObjectすると例外でるよね
だってCOMオブジェクトじゃないもん!って怒られちゅうんだ
2011/07/06(水) 07:02:42.16
これ ; デリミタっていうんだけどさ、よく打ち忘れるよね
Rubyだとつけなくてよくなるんだけど


ゴミだな
2011/07/06(水) 08:54:45.07
キチガイはすっこんでろ
275デフォルトの名無しさん
垢版 |
2011/09/01(木) 21:25:48.66
COMあげ
2011/09/02(金) 22:09:39.14
MFCのWindowsアプリから、COMのアウトプロセスサーバーのメソッド呼び出し中に
Windowsメッセージに割り込まれることがありますが、これを防ぐ方法はありますか?
現状は、COMの呼び出し中にフラグを立てて、Windowsメッセージ受信時にフラグONなら
同メッセージをPostMessageし直して処理を保留としていますが、スマートではないので。
2011/09/02(金) 22:22:13.72
充分スマートです
2011/09/02(金) 22:45:33.25
>>277
レスありがとうございます。
他に上手い方法が思いつかないので、とりあえずこの方法で対処したいと思います。
2011/09/02(金) 22:56:48.28
はい
がんがって
280デフォルトの名無しさん
垢版 |
2011/10/11(火) 18:24:40.07
qttabbarとかのソースみたらCOMだらけだったんですが
ああいうのってどこで学習したらいいんでしょうか
2011/10/12(水) 03:02:03.58
ttp://www.amazon.co.jp/dp/4881357557/
2011/10/12(水) 11:55:53.42
基本的に今の時代0からOLE/COM学習するの無理っぽくね?
昔俺が手がかりにしたMSの仕様書は今探してもことごとく抹消されてた。
Inside OLEとか絶版だし、手に入れても内容がバラけてて網羅性もない。
やっぱりあの仕様書群読むのが一番手っ取り早いはずなんだけど。
2011/10/27(木) 10:58:54.79
http://msdn.microsoft.com/en-us/library/ee663262(v=VS.85).aspx
284デフォルトの名無しさん
垢版 |
2011/11/28(月) 20:38:46.98
シェルエクステを簡単に実装する方法を教えてください
285デフォルトの名無しさん
垢版 |
2012/01/10(火) 18:51:55.79
SHCreateShellItemArrayFromDataObject の逆のAPIってないの?

IShellItemArrayからIDataObjectが欲しいんだけど
2012/01/10(火) 18:56:36.31
と思ったら
IShellItemArray::BindToHandler でいいのか

いずれにせよIShellItemArrayとIDataObjectの寿命がバインドしてるっぽいから
使い勝手悪いな
ITEMIDLISTにばらして持つしかないのか
2012/01/11(水) 10:36:36.21
IShellItemArray / IShellItem使って
IShellFolder / ITEMIDLIST は使うなってことなのか

でも過渡期だとどうせ両方使わなくちゃできないことも多いんで
手間が増えるな
2012/01/13(金) 13:08:43.73
class IHoge : public IUnknown { 〜
class IFuga : public IUnknown { 〜
class Piyo : public IHoge , public IFuga { 〜

COMってこういう場合でも仮想継承はしないほうがいいんですか?

void MyFunc(IUnknown * p) { 〜

Piyo * piyo;
MyFunc(piyo);

みたいなコードが書けなくて困るんですけど
2012/01/13(金) 17:00:12.78
うんこなぅ
290デフォルトの名無しさん
垢版 |
2012/03/21(水) 18:04:08.53
俺のCOM は9800bpsの高速だぜぇ。
2012/03/21(水) 18:10:30.31
それを言うなら、9600bpsだろう。
いずれにしても、つまらんが。
2012/03/21(水) 20:28:33.22
久しぶりだなこのスレ

Windows7とか8でまた楽しいCOMインターフェイスが追加されてるな
2012/03/22(木) 21:57:04.40
IInspectable
2012/03/22(木) 22:50:15.60
COMで扱うバリアント型の気持ち悪さは異常
2012/03/23(金) 08:15:11.72
馬鹿には無理
2012/04/10(火) 19:47:12.90
ああするしかない。
2012/04/10(火) 20:47:48.71
データもIUnknownから派生すればよかったのに
298本田
垢版 |
2012/04/13(金) 20:27:15.38
>>175
The COM Programmer's Cookbook
5 out of 23 rated this helpful Rate this topic

Crispin Goswell
Microsoft Office Product Unit

Spring 1995
Revised: September 13, 1995
http://msdn.microsoft.com/en-us/library/ms809982.aspx
Abstract
This cookbook shows you how to create Microsoft® OLE Component Object Model (COM) objects and use them effectively.
The examples are mostly in C, as this shows most clearly what is actually being done.
Some programmers will prefer to use C++ to implement their objects.
Kraig Brockschmidt's book Inside OLE (2nd edition) (MSDN Library, Books)
covers the concepts of COM and basic usage from the C++ programmer's perspective.
Readers interested in gaining a better understanding of what COM is, as well as the motivations behind its design and philosophy,
should read the first two chapters of the Component Object Model Specification (MSDN Library, Specifications).
Chapter 1 is a brief introduction, and Chapter 2 provides a thorough overview.
This cookbook builds on the information found in Inside OLE and the COM specification by showing some good ways to implement COM objects.
2012/04/29(日) 18:42:56.85
>>288
なので、IUnknownへのポインタが欲しくば、QueryInterfaceするのが王道。
QueryInterefaceはCOMインタフェースへのキャストを行うものだと思えばいい。
300デフォルトの名無しさん
垢版 |
2012/08/27(月) 09:32:55.41
Windows8 でデスクトップガジェットってなくなるの?
IDesktopGadgetとかどうしてくれるの?
301デフォルトの名無しさん
垢版 |
2012/11/08(木) 16:20:07.81
COOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOM
2012/11/09(金) 08:06:58.10
COMのイベントについてググるのはバカにとって鬼門だな。
バカがやると「なんとかドットコム、秋のイベント開催中」みたいのしかヒットしないからなw
2012/11/09(金) 08:47:34.89
やったのですね
わかります
304片山博文MZボット ◆0lBZNi.Q7evd
垢版 |
2012/12/05(水) 12:08:57.50
ReactOSっていうWindowsクローンのOSを開発しています。
その中のexplorer_newの開発を手伝ってくれる人を探しています。
COMの知識がある人、居ませんか?
305デフォルトの名無しさん
垢版 |
2012/12/05(水) 21:26:28.16
おいらはExplorerでCOMな人間だけど
あいにくC#で動いてるしなぁ
2012/12/06(木) 02:15:33.17
>>304
おめーのプロジェクトじゃねえだろうが…
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況