COM の世界を斬る!
■ このスレッドは過去ログ倉庫に格納されています
0001IUnknown
NGNG0608デフォルトの名無しさん
NGNGWindowsインストーラでもやっくれると思うがな
あとはjacarta-tomcatのisaapiリダイレクトDLLのインストールで
するような hoge.regファイルを自分で書いて
インストーラのスクリプトで自動実行させて登録させるとか
どっちにしてもテストの時は面倒で膨れ上がったレジストリサイズが
元にもどらないのは不満だけどね
仕様だからしょぅがない
0609デフォルトの名無しさん
NGNGWizardで作成するATL, ActiveX, などの多数のCOMタイプが不明
だと思いません?
どのCOMタイプがなにが得意なのかみなで整理しまへんか?
ちなみに今漏れの手元で動かしてるのはVC++7.0っす
VC++6.0の人も参加してください
プロジェクト作成時の大項目
(1)ATL Server Webサービス
(2)ATL Serverプロジェクト
(3)ATLプロジェクト
そのプロジェクトに追加する中項目
(a)ActiveXコントロールのMFCサポート
(b)ATL Active Server Pageコンポーネント
(c)ATL COM+1.0コンポーネント
(d)ATL OLEDBコンシュマー
(e)ATL OLEDBプロパイダ
(f)ATL Server Webサービス
(g)ATL コントロール
(h)ATL シンプルオブジェクト
(i)ATL ダイアログ
(j)ATL パフォーマンスモニタ
(k)ATL プロパティページ
(l)MFC ODBCコンシューマ
(m)MFCにATLサポートを追加
ふぅ〜
0610デフォルトの名無しさん
NGNG0611デフォルトの名無しさん
NGNGrundll32.exeから呼び出せる関数をエクスポートして
それをinfファイルに記述するってのはどうよ?
0612デフォルトの名無しさん
NGNGエクスプローラ相手にドロップしたところ、
ファイルの移動が開始するまで(圧縮ファイルを一時ファイルに展開している間)
エクスプローラが固まってしまいます。
これを回避したいのですが、、、
IAdviceSinkとやらで非同期の通信が出来るようですが、
Drag&Dropにも適応できるんですか?
IViewObjectが無いので出来ないような気もするのですが。
0613デフォルトの名無しさん
NGNGドラッグ開始のタイミングで展開始めれば?
0614デフォルトの名無しさん
NGNG.NET出てきてCOMの価値が下がったってことありません?
今からでもCOM勉強したほうがいいですかね?
0615デフォルトの名無しさん
NGNG0616デフォルトの名無しさん
NGNG0617デフォルトの名無しさん
NGNG0618デフォルトの名無しさん
NGNG0619デフォルトの名無しさん
NGNG0620デフォルトの名無しさん
NGNG0621デフォルトの名無しさん
NGNG0622デフォルトの名無しさん
NGNG0623デフォルトの名無しさん
NGNG0624VB房
NGNGCOMコンポーネントに実装されているメソッドがIDispatchインターフェイスなのか、
IUnknownインターフェイスなのか、確認する手段、ツール等はありますか?
(手元にソースがなく、バイナリしか存在しない前提で)
(例) ExcelのQuitメソッドが IDispatch/IUnknown のどちらなのか知りたい。
0625デフォルトの名無しさん
NGNGVBはよく知らないけど、ObjectとしてアクセスするとIDispatch経由に
なるんじゃなかったっけ?
0626デフォルトの名無しさん
NGNG> OLE/COMオブジェクトビューアを使えば確認できるよ
てことは、Visual Studio 6.0 の開発環境があればOKですね。
感謝! m(_ _)m
0627デフォルトの名無しさん
NGNGIDLがあるなら、それみろ。
0628デフォルトの名無しさん
NGNGIDLをコンパイルしたのがtypelibで、COMモジュールに同梱するのが通例。
OLE/COMビューアはそのビューアでもある。
IDispatchはtypelibを参照して名前でメソッドInvokeするためのインターフェース。
リフレクションみたいなそういう感じ・・・
0629628
NGNG0630VB房
NGNGタイプライブラリは、単独のファイルなのでしょうか?それとも、
レジストリに記述されているもの??
(よくわかってなくてスマソ)
0631デフォルトの名無しさん
NGNGoleviewで見ても、そのとき何でアクセスしているかはわからんよ。
>>627
IDLは必須ではない。IDLのないCOM DLLはたくさんあるぞよ。
>>628
IDispatchにtypelibは必須ではありません。
>>629
ちょっと違いすぎますね。
>>630
単独のファイルにすることも、リソースとしてファイルに埋め込むこともできます。
レジストリには記述されません。レジストリに記述されるのはそのtypelibのIDだけ。
0632デフォルトの名無しさん
NGNG参照設定をしないとコンパイルできない使い方がIUnknown
参照設定をしなくてもコンパイルできる使い方がIDispatch
0633デフォルトの名無しさん
NGNGあるインターフェースがIDispatch経由で呼び出せるかどうか、
は分るよ
0634デフォルトの名無しさん
NGNG?インターフェイスは呼び出せませんが?メソッドのこと?
だったら「Quit」がIDispatchで呼び出せるかどうかは
やってみなけりゃわからない。oleview見たってわからない。
0635デフォルトの名無しさん
NGNGは?
oleviewはIDispatch経由で取得できるインターフェースが列挙できるよ?
0636デフォルトの名無しさん
NGNGうっそー!(爆笑)
そりゃ単にタイプライブラリの中身見てるだけだろ?
タイプライブラリに書いてあるからって呼び出せるとは限らんよ。
0637デフォルトの名無しさん
NGNG???
少なくとも列挙できないと呼び出せないよ?
0638デフォルトの名無しさん
NGNG636に対してだと思うが。。。
列挙って何を?GetIDsOfNamesが成功すりゃInvokeで呼び出せる。oleviewではそれができるかどうかは
わからん、って言ってるんだけど。
列挙ってGetIDsOfNamesのこと言ってるのかい?それが「やってみなけりゃわからない」ってことだよ。
0639デフォルトの名無しさん
NGNG普通、COMオブジェクト(ActiveXコントロールとか)をregsvr32でシステムに登録するときは
管理者権限で 行いますが、Users権限でも使えるCOMオブジェクトというのはあるのでしょうか?
例えば、Usersグループのユーザがregsvr32を実行すると、もちろんシステムには登録できませんが
そのユーザの環境だけでは有効になる、というようなものはありえるのでしょうか?
それともCOMオブジェクトというものは必ず管理者権限でシステムに登録しないと
使えないものなのでしょうか?
よろしくおねがいします。
0640デフォルトの名無しさん
NGNG管理者以外が勝手にアプリケーションをインストールするから、ウィルスが
はびこったり、業務アプリが止まったりする。君が使っているPCはおそらく
君のものではあるまい。だったら君にはアプリケーションをインストールする
権限がないのだ。黙って管理者様の言うとおりにしなさい。
0641デフォルトの名無しさん
NGNGいいえ自分のものです。
また、「アプリケーションというものはすべて管理者権限でインストールするものだ」という
理想論ではなく、>>639に関する答えをいただけると幸いです。
0642デフォルトの名無しさん
NGNG0643デフォルトの名無しさん
NGNGside-by-side sharingもあるから
原理的には管理者権限がなくてもインストールできるはずだな
対応してるアプリは(MS製のものでさえ)見たことないけど
0644デフォルトの名無しさん
NGNG理想論??すべてのユーザーが勝手にアプリをインストールして、
それでもマシンが動き続けると思い込むほうがよっぽど理想論ですよ。
640が一番現実的なんです。
大体自分のものなのに管理者のパスワード知らないってどういうこと?
それがすでに意味不明なんだけど。
サイドバイサイドならMSのHPに情報があるけど、そういう問題ではないね。
0645デフォルトの名無しさん
NGNG>それでもマシンが動き続けると思い込むほうがよっぽど理想論ですよ。
マシンが正常に動きつづけるなんて一言も言ってないよ。
「管理者以外でもインストールし得る」と考える方が現実的ってだけ。
>大体自分のものなのに管理者のパスワード知らないってどういうこと?
誰もパスワードがわからないなんて言ってないよ。
UsersでもCOMオブジェクトを有効にする環境がありえるのかと聞いてるだけ。
なんか勘違いしてるようだから、もう一回>>639を読み直したほうが良いと思う。
0646デフォルトの名無しさん
NGNG>UsersでもCOMオブジェクトを有効にする環境がありえるのか
だからありえないといっているだろうが。
インストールするときにだけsu/RunAsするのは不満か?それとも知らないだけか。
パスワード知っているならそれができるだろうが。
管理者以外でもインストールしうるから現状に色々な問題があるんだろ。
マシンが正常に動き続けないんだったらインストールすることに何の
意味があるんだよ。勘違いは君だよ。もっと広い視野で物事考えないと
人間として成長できないぞ。
0647元質問者じゃないが
NGNG>だからありえないといっているだろうが。
じゃあHKEY_CURRENT_USER\Classesはなんのためにあるんだよ。
「ありえない」んじゃなくて「仕組みはあるけど現状ではそういう運用を
する事が想定されてない」んだろ。
大体技術的に可能なのかどうかを聞いてるところで運用ポリシーの話
持ち出して来る事自体筋違い。
0648デフォルトの名無しさん
NGNG>だからありえないといっているだろうが。
おいおい>>640以降そんなこと言ったの今回が初めてだろ。
あのさぁ、「実際にここに○○というActiveXコントロールがあってそれを管理者じゃないのに
インストールしたいけどどうすればいいですか?」なんて聞いてないの。
そういうことが可能かどうかって聞いてんの。
0649デフォルトの名無しさん
NGNG的外れな講釈たれる奴はたいがい無能。
政治家によくいるね。
0650デフォルトの名無しさん
NGNGおまえら教えて君のくせにずいぶんとエラソーだな。(w 身の程わきまえろ。
そんなに知りたきゃテメーで調べろよ。やってみればいいじゃないか。
やってみてそれが現実的かどうか考えてみなよ。ヒントはくれてやったろ。
UNIXな人にsuってどういうときに使うんですか?って聞いてみな。
>じゃあHKEY_CURRENT_USER\Classesはなんのためにあるんだよ。
>「ありえない」んじゃなくて「仕組みはあるけど現状ではそういう運用を
>する事が想定されてない」んだろ。
その2つにどんな違いがあるのか教えてほしいもんだ。
>あのさぁ、「実際にここに○○というActiveXコントロールがあってそれを管理者じゃないのに
>インストールしたいけどどうすればいいですか?」なんて聞いてないの。
>そういうことが可能かどうかって聞いてんの。
おいおい、その2つにもどういう違いがあるんだ?YesかNoかで答えろってなら、
すでに答えたとおりNoだ。YesであればHow?って質問なら答える必要はないな。Noだから。
少し行間読めよ。ボクイクチュ?
0651デフォルトの名無しさん
NGNGやはり質問の主旨を理解できずに的外れな講釈をたれるDQN、と。
ま、こいつは根拠無しに「No」ってことしか言えないみたいだからもういいよ。
的外れな運用ポリシー論を主張したいなら別板逝きな。
0652デフォルトの名無しさん
NGNG1.まずテスト用の簡単なCOMオブジェクト(DLL)を作成。これを管理者権限でregsvr32。
2.Users権限からテスト用プログラムでDLLが使えることを確認。
3.HKEY_CLASSES_ROOTに登録されたキーをregeditでファイルに書き出す。(5ファイルできた)
4.テスト用DLLを管理者権限でregsvr32 /u。
5.Users権限からregeditでキーが削除されたことを確認。テスト用プログラムでもDLLが使用不可になっていることを確認。
6.先ほど書き出した5ファイルを編集。(HKEY_CLASSES_ROOTの部分をHKEY_CURRENT_USER\Software\Classesに置換)
7.Users権限でこの5ファイルをレジストリに結合。
8.Users権限からHKEY_CURRENT_USER\Software\Classesにキーが追加され、HKEY_CLASSES_ROOTにも同様に追加されていることを確認。
9.Users権限からテスト用プログラムでDLLが使えることを確認。
よって>>643が正解。
DQN>>640は板違いな講釈をたれた上に答えも間違い。
0653デフォルトの名無しさん
NGNGいくら説明しても曲解しかしないから時間の無駄。
0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNG0656デフォルトの名無しさん
NGNGDLL(API関数が実装されている、プリミティヴ?なDLL)とCOM(ActiveX)との
違いを教えてください。
(タイプライブラリの有無?)
読むべき書籍を提示して頂けると嬉しいです。
0657デフォルトの名無しさん
NGNGCOMとはソフトウェアの構成部分からアプリケーションを構築する技術の事。
0658デフォルトの名無しさん
NGNGCLSID{79376820-07D0-11CF-A24D-0020AFD79767}
のオブジェクトを継承したいのですが,どのようにすればよいのでしょうか?
quartz.dll を #import してもインターフェイスは得られなかったです.
インターフェイスが得られないものは継承できないのでしょうか?
ご享受願います.
Windows2000
0659デフォルトの名無しさん
NGNGアグリゲーションのこと?
0660デフォルトの名無しさん
NGNG0661658
NGNGアグリゲーションでできれば楽かな通っているのですが^^;
0662デフォルトの名無しさん
NGNG0663デフォルトの名無しさん
NGNG>読むべき書籍を提示して頂けると嬉しいです。
純粋にCOMって何?
ということなら,「Inside Com」がお勧め。
OLEも含めてなら,「Inside OLE」かな?
0664デフォルトの名無しさん
NGNG感謝。
0665デフォルトの名無しさん
NGNG0666デフォルトの名無しさん
NGNGリクエストがある度に、インスタンスの生成・破棄が起きている。
何とかならんもんか。
スレ違いならスマソ
0667デフォルトの名無しさん
NGNG名著だが、今となって読む価値があるかは、絶妙に微妙
0668デフォルトの名無しさん
NGNGVC++のBothスレッドモデルでステートレスなCOMを作っているなら、
IObjectControlインターフェイスを実装してCOM+ Component Serviceに登録。
0670デフォルトの名無しさん
NGNG> VC++のBothスレッドモデルでステートレスなCOMを作っているなら、
> IObjectControlインターフェイスを実装してCOM+ Component Serviceに登録。
レスさんくす。
よくわからんのだが、↓のようにしたらとりあえずConstrucrot/Destructorの繰り返しは
なくなった。
class ATL_NO_VTABLE CXXX :
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CConferenceSession,&CLSID_XXX>,
public IDispatchImpl<IConferenceSession, &IID_IXXX, &LIBID_XXXLib>,
public ISupportErrorInfo
{
public:
DECLARE_CLASSFACTORY_SINGLETON(CXXX);
DECLARE_PROTECT_FINAL_CONSTRUCT();
なんなのコレ?
誰か解説たのんます。
0671デフォルトの名無しさん
NGNGDECLARE_CLASSFACTORY_SINGLETON(CXXX);
すると、ひとつのインスタンスをstaticな変数内に保持して以後、それを使いまわす
から、コンストラクタとデストラクタの繰り返しはなくなる。
IObjectControlについては、おいらも説明キボーン
0672デフォルトの名無しさん
NGNGは、べつにいらないんじゃないか
0673デフォルトの名無しさん
NGNG>>656
お主の質問文は
えらく乱れた日本語だが
言いたいことはわかった
Win32もCOMもAPIだ
Win32はC関数の集まり
COMはC++純粋仮想関数の集まり
Win32もCOMもDLLだ
Win32は例えばC:\WINNT\SYSTEM32\USER32.DLLのように位置が決まっている
COMは例えばHKEY_CLASSES_ROOT\CLSID\{00000010-0000-0010-8000-00AA006D2EA4}\InprocServer32=C:\Program Files\Common Files\Microsoft Shared\DAO\DAO350.DLLのようにレジストリに位置が書いてある
COMでないDLLはエクスポートで関数を公開する
COMは仮想テーブルで関数を公開する
0674デフォルトの名無しさん
NGNGCOMでないDLLはDllMain()がOSから呼び出される
COMはDllMain()/DllRegisterServer()/DllUnregisterServer()/DllGetClassObject()/DllCanUnloadNow()がOSから呼び出される
タイプライブラリは必須ではない
最小限のものは*.cppと*.defだけで作れる
お勧めはできんが型宣言とGUIDをコピペれば*.hもなしで使える
COMを始める前に知りたかったことって
こんなことだったな、少なくとも漏れは
本は他の香具師が紹介してたからセミナーを紹介しておく
ttp://www.catnet.ne.jp/triceps/hi/COM.htm
まあがんばれや
0675デフォルトの名無しさん
NGNGぷっ
0676専門バカにうんざり
NGNGぷっ
0677デフォルトの名無しさん
NGNGregsvr32.exeは、%SYSTEMROOT%\system32の下にいるから、当然、OSの構成要素ですが何か?
0678専門バカにうんざり
NGNG0679デフォルトの名無しさん
NGNGfreecell.exeも、%SYSTEMROOT%\system32の下にいるから、当然、OSの構成要素ですが何か?
0680デフォルトの名無しさん
NGNG0681デフォルトの名無しさん
NGNGカーネルモード以外はアプリとか言ってのける手合いか?
0682??
NGNG------/*ifaststring.h*/------
class IFastString
{
public:
virtual void Delete(void) = 0;
virtual int Length(void) const = 0;
virtual int Find(void) const = 0;
};
extern "C"
IFastString* CreateFastString(const char* psz);
------/*faststring.h*/------
#include "ifaststring.h"
class FastString : public IFastString
{
const intm_cnt;
char*m_psz;
public:
FastString(const char* psz);
~FastString();
void Delete(void);
int Length(void) const;
int Find(void) const;
};
------/*faststring.cpp*/------//実装略
みたいなのあるんですけど
0683??
NGNG(略)
#include "ifaststring.h"
(略)
void CTestdlgDlg::OnBtn()
{
UpdateData(true);
IFastString* pfs = CreateFastString(m_input); //<-(**)
if(pfs != NULL){
m_length = pfs->Length();
pfs->Delete();
}
UpdateData(false);
}
(**)のところで「error LNK2001: 外部シンボル "_CreateFastString" は未解決です」
って出るんですけど、何でですかね?
0684デフォルトの名無しさん
NGNGエクスポートはどうやってるの?
0685??
NGNGというか、本にはそう書いてあるので・・・
exportって「_declspec(dllexport)」のことですか?
一応、class IFastString や class FastString の間に挟んでみたりもしたのだが・・・
素人丸出しの質問で申し訳無いス。
0686デフォルトの名無しさん
NGNG0687デフォルトの名無しさん
NGNGそれがいやなら、LoadLibraryからGetProcAddressの流れを。
0688??
NGNG使う側のアプリのプロジェクトの設定で
「リンク」タブのところの「オブジェクト/ライブラリモジュール」に
libファイル名を入れておけばOKですよね?(パスもちゃんと通ってる)
0689デフォルトの名無しさん
NGNGうん、ダメ。
ちょっとスレ違いになってきたな
http://pc3.2ch.net/test/read.cgi/tech/1036897197/
あたりでどうだ?
0690??
NGNG0691デフォルトの名無しさん
NGNGIWebBrowser2とはどう違うの?
IWebBrowserAppを取得する時は、IServiceProvider::QueryService
を使うというのも意味が分からないし。
サービス?なんじゃらほい。
0692いつでもどこでも名無しさん
NGNG0693デフォルトの名無しさん
NGNG0694デフォルトの名無しさん
NGNG> IWebBrowserとIWebBrowserAppがそれであり、前者はコントロール、
> 後者はアプリケーションである。
つまり、サービス=アプリケーション、ってこと?
0695初心者
NGNG今のところ↓とか使ってます
C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\lib\Win32API.csv
0696デフォルトの名無しさん
NGNG0697デフォルトの名無しさん
NGNGNdrConformantStructUnmarshall()
このAPIの使い方知ってる?
MSDNにも記述ないんだけど・・・。
0698デフォルトの名無しさん
NGNG使い方はわからないんだけど、それってCOMとは関係ないような...
COMより低レベルのraw RCPで使うものだと思います。
0699697
NGNGオープン配列/オープン構造体を
カスタムマーシャリングしようとしてるんです。
MIDLのはき出すproxy/stubコードでこのAPIを使っていて、
カスタム化する際にこのAPIを使用しなくちゃいけないと
思うんですけど・・・。
って事なんです。
0700デフォルトの名無しさん
NGNG0701デフォルトの名無しさん
NGNG0702デフォルトの名無しさん
NGNG外してたらスマソ。MBVカスタムマーシャリングだけが目的なら(構造体とか配列
ってことでそう思ってるわけなんだけど)、直接RPCのAPIを叩かなくても、IMarshal
をオーバーライドしてやって、ストリームへのシリアライズ/デシリアライズ処理を
記述してやればいいんじゃないかな。
#ようはその構造体や配列自体をインターフェイスとして出してやれば良いのではと。
#って、こんな記述で意図がわかってもらえれば楽でいいけどな。
0703デフォルトの名無しさん
NGNGC++でCOMを使ってたときは、言語との透過性、文字列操作の煩雑さ、エラー処理の言語との不一致などコンポーネントを作ろうとしたのを挫折した覚えがあります.
既存資産の利用を含めて、すべてを置き換えるとはおもいませんが、.NETのほうが私的にはプログラムに使いたく思ってます.仕事あるかは知りませんが…
そんな私に意見お願いします.
0704デフォルトの名無しさん
NGNGゆくゆくはその多くが置き換わるものと思ってるけど、
いきなり全てなくなるようなことはない。これはいいよね?
明らかなことは.netからそれらネイティブなコードを
呼び出そうとした場合、C関数をDLLに詰め込んだものよりも
COM形式の方が親和性が高いということ。
ネイティブのコードに対する需要がまだまだあることを考えたら
COMは未だに必要だし、理解しておくべき技術でもある。
こんな風に単純に思ってますがどうでしょうか?
0705デフォルトの名無しさん
NGNGOpenDocを使いましょう。
0706703
NGNGコンポーネント作る簡便さは.NETに多くの点で軍パイがあがるのでしょうか?
COMでないとという必要があれば知りたいので…お願いします.
0707デフォルトの名無しさん
NGNG>COMでないとという必要
おれの知る限りじゃ、ない
0708デフォルトの名無しさん
NGNGる、とありましたけど、どなたかいい参考書ご存知ありませんか?よろしくおながいし
ます。
■ このスレッドは過去ログ倉庫に格納されています