COM

■ このスレッドは過去ログ倉庫に格納されています
1IUnkonwn
垢版 |
2007/01/10(水) 20:13:15
いざ語れや
2013/03/18(月) 11:30:40.91
DLLに、最初にこの関数呼んでね的な関数追加して、そこでCoInitializeすれば良いのかなぁ
327デフォルトの名無しさん
垢版 |
2013/03/18(月) 13:47:33.00
プラグインなんでしょ?
サーバーというかホストが 初期化するよ/終了するよ みたいなの教えてくれないの?
2013/03/18(月) 21:29:45.45
>>323 MFCを読め
2013/03/18(月) 22:12:09.83
>>326
>>327
アプリ側でケアするんならそっちでCoInitializeするだけじゃね?
2013/03/20(水) 16:18:28.68
>>326
MSも含め、DLL側じゃなくexe側で初期化しろって方針なんだから、
DLL側で初期化すんのやめたら?
MSのDLL使う時だって、CoInitialize、CoUninitialize(もしくはWrapした関数)
必要なんだから、DLL使う側だって今更そこまで気にしないだろ。
2013/03/20(水) 17:08:33.74
CoInitialize忘れてCOM使うと
エラーが良くわからん状態になるので
忘れないようにしたいという需要はある
2013/03/20(水) 18:51:54.57
そういってもMS提供のDLLでもそうしてんだから、
それに従うしか無いだろうに
2013/03/20(水) 20:18:30.82
アパートメントモデルの問題があるから、
DLLで勝手に初期化するわけにはいかない。
334デフォルトの名無しさん
垢版 |
2013/03/21(木) 12:58:18.91
foreach実装する方法おしえてチョン
2013/03/21(木) 13:36:26.47
何語?
2013/03/24(日) 14:17:42.23
マゲ
337片山博文MZパンク ◆0lBZNi.Q7evd
垢版 |
2013/04/06(土) 22:42:52.62
IShellViewのヘッダーが表示され内容に死体が胴すればいイカ?
2013/04/07(日) 15:09:37.56
FWF_NOCOLUMNHEADER あたり
339片山博文MZパンク ◆0lBZNi.Q7evd
垢版 |
2013/04/17(水) 20:53:57.97
>>338 似たようなフラグで解決。ありがd。

相変わらずReactOS開発中。SHDOCVWとBROWSEUIの実装に関する資料希望。
2013/04/17(水) 22:39:12.48
儲かるActiveXの作り方教えて下さい、偉い人。
2013/04/17(水) 23:21:04.39
んなもんない
2013/04/21(日) 13:17:50.82
localのEXEサーバーに大きなデータ(数十MB)を渡したいんだが、SAFEARRAYに
突っ込んだ場合、パフォーマンスはどうなんだろう?
数秒とかかかるようならあきらめるけど。
343片山博文MZパンク ◆0lBZNi.Q7evd
垢版 |
2013/04/23(火) 10:36:29.88
登録されているCOMのCLSIDとそのDLLパスのペアの一覧を取得する方法を教えて下さい。
344デフォルトの名無しさん
垢版 |
2013/04/23(火) 10:47:56.76
レジストリを舐める
2013/04/23(火) 22:32:31.11
>>344
構造を説明した資料ないっすか?英語可
346デフォルトの名無しさん
垢版 |
2013/04/24(水) 12:35:05.38
http://msdn.microsoft.com/en-us/library/windows/desktop/ms691424%28v=vs.85%29.aspx
2013/04/24(水) 19:07:02.13
OLE Viewer使えば簡単だった。すまそ
2013/04/24(水) 20:21:39.67
ヽ(・ω・)/ズコー
2013/04/24(水) 21:32:53.68
ATLが使えてひまな人、ReactOSの開発に参加して下さい。お願いします。
2013/04/24(水) 21:36:25.70
はい。
2013/04/24(水) 23:19:06.74
>>350
おお、参加してくれるか。まずは僕のHPの「ReactOS開発の手引き」を読んで下さい。
2013/04/24(水) 23:20:39.20
いいえ。
2013/04/24(水) 23:31:49.80
--------------------------
運命の選択
--------------------------
ReactOS開発に参加しますか?

     [はい] [いいえ]
--------------------------
2013/04/24(水) 23:44:20.41
それは人生のスイッチ。

実力と英語力と時間がある人はお金がもらえるよ
2013/04/28(日) 13:51:46.76
複数のアプリで共通のインタフェースを持たせたい場合、単純にそのインタフェースを
定義したIDLをそれぞれのアプリでimportすればいいんですかね?
あとこのとき、インタフェースのバージョンアップ(メソッドの追加など)はどのようにすれば
いいんでしょうか?
2013/04/29(月) 01:24:17.27
>>349
お前が亡くなれば参加してもいい
2013/04/30(火) 22:25:04.86
>>356
ジェラシーか?
自分を恥じているのか?
いずれにしても時間の無駄
358デフォルトの名無しさん
垢版 |
2013/05/03(金) 10:32:20.14
VSのウィザードが生成するidlは最初にinterfaceの定義があって、その後に
coclassを含むlibraryが記述されますが、interfaceがlibraryの外で定義されるのは
どういう理由からなんでしょうか?
libraryの中にinterface定義を記述する場合とどう違うんでしょうか?
同じinterfaceを使う複数のlibraryが書けるようにしているんですかね?
359デフォルトの名無しさん
垢版 |
2013/05/05(日) 19:33:07.15
>>358
インターフェイスの再利用のため。
2013/05/05(日) 19:35:18.14
COMは人工知能を作りたい人が越えるべき一里塚
2013/05/05(日) 19:48:55.67
いいえ。
362片山博文MZパンク ◆0lBZNi.Q7evd
垢版 |
2013/05/05(日) 20:44:26.04
COMではinterfaceと実装を分けて考える必要がある。
interfaceは外に公開する操作用の接点。実装はinterfaceに必要な機能の詳細。
interfaceを幅広く利用するために、生成・破棄の手段を一定の形式に従って公開している。
2013/05/05(日) 20:48:16.38
ずっと昔はidlとodlに分かれてなかったっけ?
364デフォルトの名無しさん
垢版 |
2013/05/05(日) 21:39:29.29
馬鹿じゃね?
OOならずともinterfaceなら当たり前じゃね
2013/05/05(日) 22:01:55.03
例えば、集合を表すinterface ISetを公開する場合、実装方法は自由に選べる。
連結リストで集合を実装するclass CSetByListの実体を返してもいいし、ベクトルで集合を実装するclass CSetByVectorを返してもいい。
interfaceと実装を分離することでソフトウェア部品の共通化と再利用性が高まる。これはこれからの人工知能の要と言える。
2013/05/05(日) 22:12:28.10
>>359
再利用ってのはつまり、複数のlibraryで同じinterfaceを参照したい場合のために
libraryの外でintefaceを定義しているってことですかね。
ということはひとつのlibraryでしか使わないintefaceはlibraryの中で定義しても
同等なんでしょうか?
dispinterfaceの場合はlibraryの中で定義する場合と外の場合とでMIDLの
コンパイル結果が大きく違うようですが。
2013/05/05(日) 22:36:34.92
公開したくないなら公開するな。そういうことだ
2013/05/05(日) 22:55:13.70
>>367
library内のcoclassが参照するinterfaceなら、中で定義されたものでも外で定義されたものでも
どちらの場合もタイプライブラリに含まれて公開されますが?
2013/05/05(日) 23:10:51.26
じゃあ、参照するinterfaceを作成する方法は何通りある?
2013/05/05(日) 23:41:13.95
とりあえず、再利用の話なのか公開の話なのか参照の話なのか話題を絞れ。
2013/05/05(日) 23:49:02.61
>>369
一通りって何を数えるんだろう?
・同じidlに書く
・別のidlに書いてimportする
・別のタイプライブラリにコンパイルしたものをimportlibする
とか?
2013/05/05(日) 23:57:34.82
>COMは人工知能を作りたい人が越えるべき一里塚

なんで人工知能を作りたい人の文脈でCOMが出てくんの?
2013/05/06(月) 00:03:17.85
>365 :片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/05(日) 22:01:55.03
>interfaceと実装を分離することでソフトウェア部品の共通化と再利用性が高まる。これはこれからの人工知能の要と言える。

なんでこの人広義なソフトウェアの一般論をわざわざ人口氏h脳だけに的を絞って話してんの?
覚えたてなの?きもちわるい
374片山
垢版 |
2013/05/06(月) 00:44:13.05
えいやこら
えいやこら
どっこいしょ
2013/05/06(月) 00:54:33.89
ワリートマケの唄

えいやこらどっこいしょ
えいやこらどっこいしょ
パソコンのためならえいやこら
376デフォルトの名無しさん
垢版 |
2013/06/16(日) 20:30:09.00
We love COM
377デフォルトの名無しさん
垢版 |
2013/06/25(火) 09:16:34.35
C#で書いたアプリにスクリプト機能つけようとしてんだけど
C#4.0のオプション引数機能がそのままスクリプトでも使えてワロタ

public void Hoge( object arg1 = null, object arg2 = null, object arg3 = null ){...}

って公開したメソッドがスクリプトのほうでも

Hoge( 1, "hage", true );
Hoge( 1, "hage" );
Hoge( 1 );

って感じで使えてマジでスクリプトっぽい。ちょっと感動。
2013/06/25(火) 10:03:40.56
当たり前じゃね?
なんで出来ないと思ったの?
2013/06/25(火) 11:18:52.59
いやー
スクリプトさんがシグニチャからメソッド探すときに
よく間違えないで見つけてくれるもんだと思ってさぁ

オプション引数使ってないメソッドをシグニチャ違いで呼ぶと
スクリプトさんのプロセスで「プロシージャの呼び出し、または引数が不正です」って怒られるのよ
.netの方じゃなくて。
2013/06/25(火) 12:12:25.70
引数があってるか確認してるのは
スクリプト側じゃなくてBinderだからな
2013/06/25(火) 22:38:57.90
そうだ、バインダーが探せバインダー
2013/06/26(水) 10:22:05.92
昔MSX界隈に、どうすれバインダーっていう人がいたな
383デフォルトの名無しさん
垢版 |
2013/07/13(土) NY:AN:NY.AN
ファイルタイプのアイコンハンドラを登録して
InprocServer32にdllを設定する時、

64bitOSの場合でそのdllが64でビルドされてたら
32bitアプリケーションからはそのアイコンハンドラが呼ばれないって状況はありえる?

つーか普通そのdllって32bitで作るの?
2013/07/13(土) NY:AN:NY.AN
状況はありえる

32bit専用で作ることも出来るし
64/32bit兼用で作ることも出来るが
64bit専用のものは32bit側からは使えない
385デフォルトの名無しさん
垢版 |
2013/08/07(水) NY:AN:NY.AN
comcom
2013/08/08(木) NY:AN:NY.AN
comとcom+は何が違うのですか?
387デフォルトの名無しさん
垢版 |
2013/10/20(日) 07:29:10.07
COMはインプロセス
COM+はアウトプロセス
細かい違いはあるが基本はそれだけ
388デフォルトの名無しさん
垢版 |
2013/10/20(日) 07:57:19.20
32bit用に作られたcomサーバーを
64bit用のcomクライアントから使用したい場合
上記サーバーを64bit用に作り直す
(ソースの変更と再コンパイル)
必要がありますか?
それともwrapperみたいなのを書けば対処可能ですか?
2013/10/20(日) 08:13:57.34
必要ありません
登録する時に適切な手順を踏めば問題なく利用できますし
390デフォルトの名無しさん
垢版 |
2013/10/20(日) 10:33:00.13
なるほど
どいうことは
64bit用のクライアントで使用できない
32bit用に作られたCOMサーバーは
登録する時に適切な手順を踏んでいないということですね
多分COMサーバーのインストーラーが変なことしてるのかな
2013/10/20(日) 10:52:02.39
http://msdn.microsoft.com/ja-jp/library/aa384231(v=vs.85).aspx
この辺見ると、63bit/32bit相互運用可能なのは、アウトプロセスの場合のみって思えるけど違うの?

IEやOfficeはともかく、一般のライブラリ的なCOMサーバはインプロセスが多そうなので、
相互呼び出しできないんじゃないの?
2013/10/20(日) 10:58:41.04
×63bit/32bit相互運用可能なのは、
○64bit/32bit相互運用可能なのは、
です
2013/10/20(日) 11:57:13.62
>>392
気付かなかったorz
眼科行くべきか
394デフォルトの名無しさん
垢版 |
2013/10/20(日) 12:09:36.50
2秒くらいえっ?てなった
395デフォルトの名無しさん
垢版 |
2014/03/08(土) 15:04:30.80
鳥の竜田揚げ
396デフォルトの名無しさん
垢版 |
2014/03/17(月) 14:07:47.87ID:Z9hT6Asb
IDataObjectを実装してるオブジェクトから
あるフォーマットのデータを削除することってできる?

空データで上書きしてもそのフォーマットとしては残るし
空データでもデータとして意味がある場合もあるし

自前の実装でそういう処理を書ける場合じゃないと無理?
2014/03/17(月) 19:51:29.13ID:+0g3AXKA
無理だな
398デフォルトの名無しさん
垢版 |
2014/04/12(土) 18:28:31.07ID:EWT/9iBD
IDataObjectにHGLOBALなデータを設定するとき、
一体どのAPIを使ってメモリを割り当てたらいいんでしょう?

伝統的にはGlobalAllocを使うんだと思いますが
LocalAllocを直接使っているコードを見たことがあります。。
2014/04/12(土) 18:47:39.61ID:QTVFiGTh
HGLOBALならGlobalAlloc使っとけばいいんじゃない?
Win16と違って、Win32では同じものだけどね。
400デフォルトの名無しさん
垢版 |
2014/05/01(木) 18:25:47.02ID:R3+I0L0F
またお世話になります。

プロパティシステムまわりの質問なんですが、
プロパティのcanonical name ("System.Keywords"みたいなの) ⇔ PROPERTYKEY/IPropertyDescription は相互に取得できるのは分かったんですが
表示名("キーワード"みたいなローカル名) をパースして canonical nameを取得する方法ってありませんか。

もしかして総当りしか方法はなかったりしますか。。。
401400
垢版 |
2014/05/02(金) 09:11:42.05ID:vd73L/AD
とりあえずシェルのカラムにあるやつはなんとか取得できそうです。

IShellFolder2::GetDetailsOf( null, ... をループでまわして取得したローカル名と比較するという力技ですが。
一致した場合にそのインデックスからIShellFolder2::MapColumnToSCIDでPROPERTYKEYが取れました……
402デフォルトの名無しさん
垢版 |
2014/05/06(火) 20:14:34.65ID:XJoiCw0I
OLE スレッド モデルの概要としくみ
http://support.microsoft.com/kb/150777/ja
2014/05/07(水) 13:11:23.49ID:9Lrwf94O
φ(..)メモメモ

EternalWindows - COM
http://eternalwindows.jp/#com

温COM知新 (おんこむちしん)
http://www.asahi-net.or.jp/~kv8s-yjm/another/yjamain.htm

COM研究室
http://atata.sakura.ne.jp/com/
2014/05/07(水) 13:19:13.42ID:9Lrwf94O
どとねと

相互運用マーシャリング
http://msdn.microsoft.com/ja-jp/library/eaw10et3%28v=vs.110%29.aspx

アンマネージ コードとの相互運用
http://msdn.microsoft.com/ja-jp/library/sd10k43k%28v=vs.110%29.aspx
2014/05/14(水) 14:14:24.97ID:duQE1tkX
A synchronous OLE call made by the recipient of an inter-process/inter- thread SendMessage fails with
RPC_E_CANTCALLOUT_ININPUTSYNCCALL(0x8001010D).

http://support.microsoft.com/kb/131056/EN-US
2014/07/08(火) 15:13:40.82ID:VCOU0wLj
テキストエディタのMeryみたく、自作アプリのマクロを
WSHエンジンで動かせるようにするにはどうしたらいいのでしょうか?
Visual Studio で C++(MFCなし) の場合です。

ヒントだけでもいただけたらと思います。
2014/07/09(水) 11:49:40.02ID:Q25RUpED
どなたか、いませんか〜?
2014/07/09(水) 13:21:03.55ID:QQm9iNty
いませんよ
2014/07/09(水) 15:23:34.29ID:Q25RUpED
生存かくにん。 よかった(ハート)
410デフォルトの名無しさん
垢版 |
2014/07/10(木) 06:52:04.27ID:fp5I0Zvk
season quinen age
2014/07/10(木) 08:28:32.99ID:hXB94njE
COMも、LoadLibraryみたいな形でアプリ内で閉じて使えたらアプリのプラグイン
インターフェースとして使えたのにな。
2014/07/10(木) 09:47:10.09ID:1VHW603R
>>406
WSH上で動かすんじゃなくてWSHの機能を呼び出すんじゃろ

まずは難しいことを考えずに
コマンドリストを実行できる機能をつけて
そこから改良していけばいいのではないか

凝ったことをやりたいなら構文解析・パーサーをキーワードにして
知識を広げていくのが良い
2014/07/10(木) 15:23:41.68ID:1VHW603R
それとも
IDispatch::Invoke と IDispatch::GetIDsOfNames を組み合わせて使うとか
そういう話かな
2014/07/10(木) 17:14:05.85ID:fp5I0Zvk
v8を組み込んで
jsインタプリタ内蔵の
プラグインにすれば良い
2014/07/13(日) 03:23:13.23ID:b3Vz6umr
>>406
サクラエディタのマクロはWSHだったような気がする
416デフォルトの名無しさん
垢版 |
2014/07/14(月) 15:28:36.63ID:uZs3XM/U
IFileOperation でファイルのショートカットを作成することって出来ないの?

コピー・移動・リンク作成が直交的に作れたら美しいんだけど
2014/07/14(月) 22:35:59.63ID:DvBldTQU
EXCELをCOMアドインで操作していると、同じ処理をしているにも関わらず、
ある時は数秒で終わるのに、ある時は、何十秒も掛かったりと、挙動が
おかしいのですが、何か解決のヒントありますか?
2014/07/15(火) 20:35:27.97ID:UxnDWfjl
>>417
COMなんて使わずにこれ使えよ。マイクロソフトご謹製だよ。
http://www.microsoft.com/ja-jp/download/details.aspx?id=5124

ま、使うとかなり目眩がするけどなwww
419デフォルトの名無しさん
垢版 |
2014/07/21(月) 07:49:19.08ID:6nmHe42m
>>416のシェルを使ったショートカット作成の件だけど、

→作成先フォルダのIDropTarget取得
→ショートカットを作るファイルのIDataObjectをCF_HDROPとかCF_SHELLIDLISTとかの形式で作成
 IFolderViewがある場合簡単。
→IDropTargetのDropその他を順番に呼び出す。その時effectをDROPEFFECT_LINKにしておく

みたいなウンコな方法か、ちまちま一個ずつ作るしかないの?
ちまちま一個だとUndoを一度にやってくれないし

もしかしてこのウンコの方法が正統な方法だったりする?
2014/07/21(月) 07:53:53.45ID:hvY5HB9k
うん
2014/07/24(木) 19:57:03.53ID:s9ARWR1P
COMによるOffice automationを調べていると
COM/ATLというような用語も見つかるのですが、COMとCOM/ATLというのは
異なる技術ですか?
私の理解では、C++でCOMやる場合は、CoInitializeExやCoUninitializeを使って
やる方式のことだと思っています。COM/ATLというのが分りません。
どなたか簡単に解説お願いします。
2014/07/24(木) 20:19:40.19ID:BX5qEEGf
「active template library」で検索
423デフォルトの名無しさん
垢版 |
2014/08/07(木) 17:34:11.54ID:utSp7A7J
>>421
プログラムが大きくなるとコンパイルに時間がかかるから
共通部分と分けるじゃない? あれが静的ライブラリで lib

さらに共通であちこちのexeで使われるようなものは1度コンパイルしておいて
動的にメモリに読み込んで使えるようにすればいいじゃん これが動的ライブラリで dll

さらに動的ライブラリdllにもC++のオブジェクト構造のような関数以外のものも入れたいなぁ
さらに言語非依存にして、そこで参照回数などのオブジェクトのメモリ管理も加えたCOM技術で作ったdll
COMサーバーという

この外部オブジェクトライブラリを使うのに、CoInitializeExやCoUninitializeを使うのはCOMクライアント
COMクライアントは別にC++でなくてもJavaScriptでもVBでもC#でもPerlでもなんでもいい

COMサーバーは大別してインプロセスサーバー、アウトプロセスサーバーがあるけど
ぶっちゃけ一から書くのはメンドクサイ
そこでライブラリ作ろうか〜ということで出来たのがATL/WTL
2014/08/07(木) 17:50:19.99ID:oQyOe1xD
わっかりやすーい
2014/08/07(木) 19:32:56.15ID:zGwpFhqC
参照カウントなんてどこで増やしてんの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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