5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

COM の世界を斬る!

1 :IUnknown:2001/02/11(日) 01:42
ATL や MFC でラッピングされていない素顔の COM について語り合いましょう。


849 :デフォルトの名無しさん:03/03/29 16:07
言語によってはnullだったり大文字小文字を区別しなかったりするから
やっぱりいまいちだと思う

850 :デフォルトの名無しさん:03/03/29 16:07
COMなしでIEやEXCELを使おうとしたら
大変だろうな。

851 :デフォルトの名無しさん:03/03/29 16:22
>>850
ウデ利きのプログラマなら、処理性能(スループット)だけなら何とか
なるかもしれないが、生産性はお話にならない予感・・・。(-_-;

852 :デフォルトの名無しさん:03/03/29 16:23
>>851
分からんぞ。良い感じのインターフェースを持ったクラスに仕上げてくれるかもしれん。

853 :デフォルトの名無しさん:03/03/29 17:04
COM無しっていうと
DDEやSendMessageやkeybd_eventなどか?
たとえ腕利きでもまともな性能を出せるとは思えないが


854 :デフォルトの名無しさん:03/03/30 18:42
COM無しなら、OLE2あり?

855 :デフォルトの名無しさん:03/04/01 19:39

質問です。
VBで、アーリーバインド ←→ レイトバインド
のコードの相互変換をしたいのですが、例えば、
Set objHoge = CreateObject("Hoge.Instance")
というコードをアーリーバインドに書き換える場合、"Hoge.Instance"の
文字列から、参照すべきライブラリのフルパス、ファイル名、型名
(Dim Hoge As Library.Type)を調べる方法はありますか?

また、その反対に、アーリーバインドで
Dim Hoge As Library.Type
と宣言しているコードを
Dim Hoge As Object
に書き直す場合、
CreateObject(Arg)
の文字列を調べるにはどうすればよいのでしょうか?

856 :IUnknown:03/04/01 23:33
>855
レジストリエディタで HKEY_CLASSES_ROOT 以下に ProgID は登録されています。
あなたのいう Hoge.Instance という文字列のことです。このキーのサブキーとして
CLSID というキーがあります。
ここに書かれている CLSID と同じキーを HKEY_CLASSES_ROOT\CLSID キー以下から
見つけます。そこにあなたの望む情報が登録されているはずです。
ご存知かと思いますが VB の場合、アーリーバインディングには
参照設定が必要です。単にソース上で型を定義しても VB には
なんのことか判らないためです。
また参照設定で目的のコンポーネントを探すには TypeLib 名として
登録されている名称で探す必要があります。
CLSID キーのサブキーである TypeLib に書かれている ID と同じキーを
HKEY_CLASSES_ROOT\TypeLib キー以下から見つけます。
このサブキーに 1.0 などというキーが有ると思います。
これに書かれている名称が登録されているタイプライブラリ名です。
参照設定ではこの名称をさがすとよいでしょう。

OLEVIEW などのツールをつかうことでもう少し効率的に情報を
取得することもできるでしょう。


857 :デフォルトの名無しさん:03/04/02 09:20
>>856
ありがとうございます。(結果報告は後ほど・・・)

858 :デフォルトの名無しさん:03/04/02 22:48
COM使えば
ソース->COM用ソース->コンパイラ->COM生成
という感じで実行時型生成できそうな気がするんだけど
どうなのでしょうか?


859 :デフォルトの名無しさん:03/04/09 10:00
>>856
遅くなりましたが、お蔭様で無事に解決できますた。m(_ _)m

860 :山崎渉:03/04/17 15:46
(^^)

861 :デフォルトの名無しさん:03/04/18 04:02

Essential COM を読み始めたんですが、
Visual C++でコンパイルしたDLLが、他のコンパイラで
利用できないってのはホントなんですか?

DLLって使ったこと無いから、よく分からないんですが。

862 :デフォルトの名無しさん:03/04/18 06:19
それはたしか、「C++クラスをエクスポートしたDLLは、
ほかのコンパイラでは利用できない」、って話だろ。
そのとおり。

863 :山崎渉:03/04/20 03:10
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

864 :山崎渉:03/04/20 03:45
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

865 :まりも:03/04/26 12:28
はじめましてこんにちわ、いま、VCでCOM(ATLウイザード)で
作ったCOM(DLL形式、タイプライブラリ)をVBから
つかっているのですが、現在つかっているCOM別に新たに
COMを作って、C++でいう継承をしたいのですが、
簡単に説明すると
新規で作ったCOMクラスBとしてC++でいう
基本クラス、現在つかっているCOMをAとしてC++で言う派生クラス
(ちなみにA,BもおなじATLウィザードクラス?なかにつくります。)

class A : public B
{
 インターフェイス関数 drawA
}
class B{
インターフェイス関数 drawB
}
//したい事
A *tmp;
tmp = new A;
tmp->drawB(); ←というようにしたいのですが。

どうもうまくいきません。
どうも、インターフェイスのインプリメントとなるメニューを発見して
実行しました。VCのクラスビュウでは、ちゃんと、Bのインターフェイス
がAのクラスにはいっているのですが、VBから呼び出した場合
インターフェイスの関数名がでません。(メンバ一覧にのっていません)
うまく説明できてないところがありますが、どなたかご存知な
方おしえてもらえないでしょうか?よろしくお願いします。

866 :デフォルトの名無しさん:03/05/03 00:34
カスタムインターフェイス...
えっ? IDispatch インターフェイス?


867 :デフォルトの名無しさん:03/05/22 18:58
ActiveXコントロール作ってるんですが、
それに別のActiveXコントロールって貼り付けられますか?
一体どうやればいいのでしょうか。
貼り付けたらダイアログが出てこなくなってしまうんです。

868 :867:03/05/27 17:23
まじでわかんないですけど。誰か助けてください。
ちなみにMFCです。
カスタムコントロールやActiveXを貼り付けるとダイアログが消失します。

869 :デフォルトの名無しさん:03/05/27 17:32
あ、あと、参考にしたページはここです。
ttp://www.tomosan.org/dev/vs/activex.html
コレで作ったダイアログにActiveXコントロールを貼ると
ダイアログが消えてしまいます。

870 :山崎渉:03/05/28 12:38
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

871 :867:03/05/30 13:59
はぁ、やっぱり誰も回答してくれない。
もうActiveXなんて廃れてるよな。
COMなんて今さら勉強したくないのに。
会社辞めてやる!

872 :デフォルトの名無しさん:03/05/30 17:03
廃れてるけど情報源はちゃんとあると思うよ。
それを探せないなら辞めたほうがいいんじゃないかな。

873 :デフォルトの名無しさん:03/05/30 19:02
COMアゲ

874 :デフォルトの名無しさん:03/05/31 04:41
http://www.yomiuri.co.jp/entertainment/tv/tv03051401.htm
“電波少年的”異色FM番組 3局共同制作「OLEっち」

875 : :03/05/31 11:55
未だにCOM使ってる香具師は素人。


876 :デフォルトの名無しさん:03/06/02 11:51
COMで構造体をやり取りしてもいいものでしょうか?

IDLを

typedef struct _a{
  int a;
  int b;
} a;
interface [ 略
  GetData(a *pVal);

みたいに書いて、クライアントでは
a data;
interface->GetData(&a);
とかしてIDLで定義した構造体をやりとりしたいんです。
MIDLでは標準のインターフェイスじゃないみたいな警告がでるんですけどね。

データが数100個あるから、インターフェイス作って
プロパティをそれだけ書くのはめんどいというかためらわれるんです。

やっぱりきちんとインターフェイス作った方がいいですか?

877 :デフォルトの名無しさん:03/06/04 23:00
VBからプロパティとして見えることが重要かどうかによる

878 :若葉:03/06/05 17:35
インターネットエクスプローラーにオリジナルのツールバーを作りたいのですが、
何を勉強したら良いでしょうか。または参考になるサイト、お勧めの書籍などございましたら、
教えてください。

879 :乙葉:03/06/05 17:39
>>878
http://www.codeproject.com/wtl/toolband.asp

880 :若葉:03/06/05 20:31
>>879
ありがとうございます。とても参考になりました。
また長年悩み続けてきたものが解決されました。
ほんっと感謝してます。

881 :デフォルトの名無しさん:03/06/20 04:14
COMって決まり事が多くて俺の脳みそではきつい。
なので、こんなんだったら簡単というCOMを考えてみた。
しょうもなかったら笑って許してください。

・インターフェースポインタは、関数ポインタの配列。
(vtblへのポインタではない)
・サーバは、_new_object(インターフェースポインタを返す)と
_delete_object(オブジェクト削除)という関数をエクスポートする。
・サーバは、xmlでインターフェース定義を書いて、
バイナリとともに配布する。
・クライアントはnew_objectでインターフェースポインタを受け取る。

Cでクライアントを書くと、
struct treeview{
void (*set_visible)(int value);
};
treeview *obj;
obj=new_object("/window/treeview",1);//DLLをロードしつつ1個作る
obj->set_visible(TRUE);
という感じ。

882 :デフォルトの名無しさん:03/06/22 15:05
COMってさー、GUIDとかレジストリ使ってる時点で終わってると思う。

883 :デフォルトの名無しさん:03/06/23 00:34
mozillaをバカにするとは・・・愚かな奴

884 :デフォルトの名無しさん:03/06/23 03:15
>881
簡易COM的な仕様のDLLを作るのは、COMでレジストリを
汚すのがいやな場合なんかには有効なテクかもね。

885 :デフォルトの名無しさん:03/06/25 12:26
厨房ほどレジストリが汚れた・汚れたってうるさいんだよな。
特にHKEY_CURRENT_USER\Softwareに書き込むだけで騒ぐ奴はどうしようもない馬鹿。

886 :デフォルトの名無しさん:03/06/25 14:24
でも厨房はCOMがHKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSIDに書き込んでも気づかなかったりする。

887 :デフォルトの名無しさん:03/07/20 02:06
hoge

888 :デフォルトの名無しさん:03/07/24 00:45
プロセスが使用しているCOMコンポーネントをリストアップする方法って
あるんでしょうか??
教えてくださいーーー。

889 :デフォルトの名無しさん:03/07/26 18:18
あげ

890 :デフォルトの名無しさん:03/07/27 09:09
タイプラブラリを見るとDispatchインタフェース(dispinterface)のみ備わっている
MFCで作成されたCOMサーバに

「シンクインタフェースを実装し、COMサーバとコネクションを確立することで、
 サーバ側で発生した各種イベントを取得することができます。」

という機能がある場合、COMクライアント側のシンクインタフェースの実装(MFC)は

http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q181/8/45.asp&NoWebContent=1

だけを行えば良いのでしょうか?

試しにこの例を参照して実装し、 AfxConnectionAdvise() も正常に完了したので、もうイベントは
取得可能(この例だと CCmdTarget 派生クラスにあるイベントハンドラ関数が呼び出される)のかと
思いきや、取得できていないようです。

> Establish a connection between source and sink.

とはあっても、実際にはまだ必要な手続きが足りないのでしょうか・・・。


891 :デフォルトの名無しさん:03/07/27 09:11
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
★☆                       
☆★ 送料激安!!  送料激安!!  送料激安!!
★☆      http://www.get-dvd.com      
☆★  激安アダルトDVDショップ        
★☆    お買い得セール1枚500円〜980円!急げ!
☆★    インターネット初!「きたぐに割引」  
★☆    北海道・東北の皆様は送料も激安!   
☆★      http://www.get-dvd.com      
★☆        スピード発送!        
☆★      http://www.get-dvd.com      
★☆        商品が豊富!         
☆★      http://www.get-dvd.com      
★☆                       
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

892 :デフォルトの名無しさん:03/07/27 19:37
>888
Comspy

893 :デフォルトの名無しさん:03/07/28 01:44
>892 さま
サンクスです。明日試してみます。zzz・・・。



894 :デフォルトの名無しさん:03/07/30 00:48
c#やVBScriptでいうところの
foreach (object o in hoge){
 fugafuga():
}
という処理をMFCでやる場合は
ttp://www.eternal.nest.or.jp/~shiro/macosx/life0302.html
の2/21であるようにやるといいのでしょうか?

こんな感じのコードを組んだんですが、
IEnumVARIANT::Next( 1, &childVariant, &numfetch );
のnumfetchがどうしても0でしか戻ってきません。

なにか足りない点がありましたらご教示ください。
(具体的なコードが必要でしたらその都度晒します)

895 :山崎 渉:03/08/02 02:12
(^^)

896 :tim:03/08/12 08:53
VB6でEXCELのCOMアドイン登録方法について教えてください。
システムアドインとして登録(HKEY_LOCAL_MACHINE に書き込み)せずに、
システム上の全てのユーザーで使用できるようにしたいのですが、
誰かご存知の方いらっしゃいますでしょうか?
http://support.microsoft.com/default.aspx?scid=kb;ja;290868
MSサポート↑では、HKEY_USERS\.DEFAULT・・・・に書き込むことで可能だと書いてあるのですが、
うまくいきません。
実装したいことは、「COMアドイン」ダイアログで、ユーザーが必要に応じて
アドインを有効にしたり無効にしたり出来るようにしたいのですが・・・・。
よろしくお願いします。


897 :山崎 渉:03/08/15 15:41
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

898 :デフォルトの名無しさん:03/08/16 22:31
DCOM = 'COM ' - MTS

252 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)