COMにはやられた...

このエントリーをはてなブックマークに追加
942デフォルトの名無しさん:05/03/18 00:38:15
>941
>GetModulePathだったかなんとか
ありがとさんです。
出来ればVB.NETで使える方法を教えてちょうだい。
943935:05/03/18 21:04:18
よく考えたらXPでなくてもDllGetClassObjectを直接呼べば、
同じことが出来るんだけどね・・・
944デフォルトの名無しさん:2005/03/23(水) 09:50:12
>>943
DllGetClassObjectでは、ThreadingModelを意識した処理ができないのではないでしょうか。
945デフォルトの名無しさん:2005/03/23(水) 23:21:11
「キムにはやられた」(木村祐一)
「コムにはやられた」(山崎邦正)
946デフォルトの名無しさん:2005/03/25(金) 09:17:37
ばーかあああああああああああああああああああああああああああああああああああああああああああああああああ
947デフォルトの名無しさん:2005/03/25(金) 15:40:14
次スレのタイトルはどうする?
COMスレは三つ目なんだけど。
948デフォルトの名無しさん:2005/03/25(金) 16:06:01
「3COM」でよろ

949デフォルトの名無しさん:2005/03/26(土) 12:00:09
COMについての質問はこのスレでいいのでしょうか。
勉強中なのですが、インターフェースについての理解で分からない部分が
あるので教えてください。

たとえばエディットボックスにオートコンプリート機能を追加するとして、IEnumStringを
継承したクラスとIAutoCompleteを用いて

CEnumString *pEnumStr = NULL;
IAutoComplete *pAutoComp;

CoCreateInstance(CLSID_AutoComplete, NULL, CLSCTX_INPROC_SERVER, IID_IAutoComplete, (void**)&pAutoComp);
pAutoComp->Init(GetDlgItem(hWnd, IDC_EDIT1), pEnumStr, NULL, NULL);

のようにした場合、エディットボックスに対してpEnumStrとのインターフェースを
指定し終わったpAutoCompはすぐに解放してしまってもよいのでしょうか?
950949:2005/03/26(土) 12:16:22
最終的にやりたいことは、動的に生成されるエディットコントロールに対して
オートコンプリートを実装したいのですが、IAutoCompleteやCEnumStringを
どのように管理すればよいのかで悩んでいます。
951デフォルトの名無しさん:2005/03/26(土) 18:50:54
俺もそんなに詳しくはないけど、とりあえず IAutoComplete に関しては
解放しても問題ない。ただし、保持しておくとモードの切替なんかが後でも
可能になる。あとはMSDN嫁。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_int/shell_int_programming/ac_ovw.asp
> The autocomplete object will remain attached to the edit control even after you release it.
> You might not want to release these interfaces if you need to access them later.
> For example, you might want to change the autocomplete options at a later point.

952デフォルトの名無しさん:2005/03/28(月) 06:06:09
boost::xpcom


これで世界は変わる
だれか作って
953デフォルトの名無しさん:2005/03/28(月) 23:35:06
次スレは
「サングラスをかけてて、中肉中背の30代の男にやられた」
でお願いします。
954デフォルトの名無しさん:2005/04/03(日) 21:53:59
COMインターフェイスは仮想継承にしてもいい?

IUnknownを継承してAddRef/Releaseだけを実装したクラス、ReferenceCountを作った。
そして自作のインターフェイスIFooを継承して実装するクラスHogeがある。
これは当然ReferenceCountも継承したい。当然仮想継承にしないとまずい。
ReferenceCountは外には見せないので仮想継承にでも何でも出来るが、IFooの方は仮想継承にしたらまずいような気がするんだ。

心配だから結局ReferenceCountはIUnknownを継承せず、HogeがReferenceCountをメンバとして持つように修正した。
そしてマクロでHogeのAddRef/ReleaseがReferenceCountのAddRef/Releaseを呼ぶようにしている。
だけどやっぱり不恰好な感が否めない。
955デフォルトの名無しさん:2005/04/03(日) 22:27:56
クラス構成が間違ってるだろそれ
956デフォルトの名無しさん:2005/04/03(日) 23:45:12
HogeとIFooの間にReferenceCountを挟め。
957954:2005/04/04(月) 10:47:29
>>956
さらにIFooとは継承関係のないIBarとそれを実装するHageも存在しHageにもReferenceCountが欲しいんですよ。
958デフォルトの名無しさん:2005/04/04(月) 17:29:49
じゃあ、HageとIBarの間にもRefernceCountを挟めばいいだろう。
テンプレートを舐めるな。
959デフォルトの名無しさん:2005/04/04(月) 19:14:32
テンプレート
いつもSTLとBoostは欠かさずに使っているのに忘れていた……。  ○| ̄|_

template<typename T>
class ReferenceCount : public T { /* * */ };
class Hoge : public ReferenceCount<IFoo> { /* * */ };
こうですよね。
960デフォルトの名無しさん:2005/04/05(火) 17:14:21
次スレ既にある様なんだけど
http://pc8.2ch.net/test/read.cgi/tech/1102521580/l50
961デフォルトの名無しさん:2005/04/07(木) 00:39:37
やられた...

VariantInit()やっていないVARIANTオブジェクトにVariantClear()やっていた。
どおりでわけわかんない挙動になるわけだ……。
962デフォルトの名無しさん:2005/04/10(日) 14:36:27
今ファイラー作ってるんですが右クリックを押したままドロップすると
表示されるコンテキストメニューはどうやったら表示できるんですか
963デフォルトの名無しさん:2005/04/10(日) 15:01:11
>>962
win32apiスレできいたほうがいいかも
964デフォルトの名無しさん:2005/04/10(日) 20:57:12
>>963
わかりました
965デフォルトの名無しさん:2005/04/18(月) 22:54:48
最近PCがメモリのエラーを起こすCOM何なんだ
ゴルァ
966デフォルトの名無しさん:2005/04/25(月) 19:18:22
ここで聞くのが適当かわかりませんが、コンテキストメニューに登録して
実行するツールを右クリックから実行すると、その処理が終わるまで
呼び出し元(右クリックしたフォルダ)が復帰しない(固まった状態になる)
のですが、これを解消させる(非同期で処理させる)にはどうすれば
いいのか教えてください。
967デフォルトの名無しさん:2005/04/26(火) 06:39:39
command.com?
968デフォルトの名無しさん:2005/04/30(土) 00:06:25
>>966
スレッドを作ってそこで処理しろ。
969デフォルトの名無しさん:2005/05/06(金) 23:20:43
インターフェースについて、そもそもそれが何なのかというレベルから解説している
良質のサイトってどんな所がありますか
970デフォルトの名無しさん:2005/05/10(火) 09:30:27
971デフォルトの名無しさん:2005/05/20(金) 12:32:48
972デフォルトの名無しさん:2005/06/09(木) 22:30:28
次スレがなさそうなのでage
973デフォルトの名無しさん:2005/06/10(金) 07:23:28
DCOMがむかつくので、無効化しています。DCOMで開発している方々、いい加減にしてください。
974デフォルトの名無しさん:2005/06/11(土) 00:39:36
VC++からタイプライブラリでexcelを操作したい場合の
質問スレはどこいけばよい?
975デフォルトの名無しさん:2005/06/11(土) 00:49:02
>>974
たぶんここでも平気。
976974:2005/06/11(土) 14:45:28
>975
ありがとう

VC++ タイプライブラリ excel操作の結合されたセルの値の取得についてなんだけど
例えば A1 に "test"という文字を入力してA2とA3と結合してあるExcelがある。

これに対してA1(1,1)を取得するようにすれば"test"という文字の取得できるんだけど、A2(1,2)とかA3(1,3)だと値は空白になっていて
"test"という文字が取得できない。これってなんか取得する方法、又は取得しようとしているセルが
どこかのセルと結合されているというプロパティみたいのないでしょうか?

下はサンプルコードです。どなたか知ってる方お願いします。
別の方法でもいいです。

_ApplicationobjExcel;
_WorksheetoneSheet;
RangepXlsRange;
LPDISPATCHpCells;
COleVariant x,y,ItemId;
CString CellName;

/* 〜中略〜 */
pCells = oneSheet.GetCells();
pXlsRange.AttachDispatch(pCells,TRUE);

y = (short)1; x = (short)1;

/* セル値取得 */
ItemId = pXlsRange.GetItem(y,x);
objExcel.AttachDispatch(ItemId.pdispVal,TRUE);
CellName = objExcel.GetValue();
977デフォルトの名無しさん:2005/06/12(日) 00:48:02
>>976
Range::GetMergeArea()
978974:2005/06/12(日) 14:47:44
>977
ありがとうございます。
Range::GetMergeArea()ってLPDISPATCHで戻ってきて・・・
それから・・・・
・・ごめんなさい。続きを教えてください。


979デフォルトの名無しさん:2005/06/12(日) 17:19:12
>>978
結合されたセルのRangeオブジェクトが帰ってくるから。
あとはRange::GetCount()なり、Range::GetItem()でやりたいことはできると思うけど。
980974:2005/06/13(月) 23:22:44
ありがとうございました!
なんとかできました!!
981デフォルトの名無しさん:2005/06/16(木) 01:57:28
構造体みたいなCOMオブジェクトをつくりました。
これをリモート呼び出しで受け渡ししたいのですが
参照ではなくコピーを渡したい。
どうすればよろしいか?
982デフォルトの名無しさん:2005/06/16(木) 02:45:27
値渡しマーシャリングというものを見つけた。
面倒だなあ。
983デフォルトの名無しさん:2005/06/16(木) 11:04:53
自分でマーシャンリングしないとなると、

・構造体をADOのRecordsetで代用する(確かMBVに対応してるはず)
・XMLで代用する

とか。
984デフォルトの名無しさん:2005/06/16(木) 21:51:42
渡すときにコピー作ればいいだけじゃなくて?
985デフォルトの名無しさん:2005/06/17(金) 00:58:39
>>983
マーシャリングってなぁに?
986デフォルトの名無しさん:2005/06/17(金) 01:09:10
線路は続くよどこまでも
987デフォルトの名無しさん:2005/06/17(金) 09:59:29
いまさらCOMしてどうなる?
988デフォルトの名無しさん:2005/06/17(金) 12:32:27
COMatta
989デフォルトの名無しさん:2005/06/17(金) 14:31:44
>>984
コピーを作ってもリモート側にそれが出来上がるだけであって、そいつに対する
アクセスは相変わらずプロキシ経由(リモート呼び出し)になるのではないかと。

981は恐らくオブジェクト実体をローカルに持ってきてリモート呼び出しを避けたい
という話だと思う。

このあたりにMBVの例がでてます。
ttp://msdn.microsoft.com/library/en-us/dnesscom/html/custommarshaling.asp

>>985
辞書的には整列。JavaやMFCのシリアライズと同じ物かと。

>>987
否定は出来ませんね。すぐにはなくならないにしても、適用範囲は減りつづける
一方でしょう。
990デフォルトの名無しさん:2005/06/17(金) 15:12:16
WindowsはCOMで出来ている
MozillaもXPCOMで出来ている
世界はCOMで出来ている
991981
>>989
おっしゃる通りです。
しかしマーシャリングうまくいかん。リモート側でNULLになっとる。
MarshalはコールされるがUnmarshalがコールされない。

>>983
もっともな意見ですが
構造体COMにIPersistStream実装して
byte* buf;
構造体COM->save(buf)
サーバ->setX(buf, buflength)
バイトの塊でわたすという無茶苦茶なインターフェイスでいくことにしました。