トップページ⇒tech
986コメント350KB

COM の世界を斬る!

■ このスレッドは過去ログ倉庫に格納されています
0001IUnknownNGNG
ATL や MFC でラッピングされていない素顔の COM について語り合いましょう。
0666デフォルトの名無しさんNGNG
MicrosoftのSOAP使ってサーバーCOMモジュール作ったんだが、
リクエストがある度に、インスタンスの生成・破棄が起きている。
何とかならんもんか。

スレ違いならスマソ
0667デフォルトの名無しさんNGNG
>>665
名著だが、今となって読む価値があるかは、絶妙に微妙
0668デフォルトの名無しさんNGNG
>>666
VC++のBothスレッドモデルでステートレスなCOMを作っているなら、
IObjectControlインターフェイスを実装してCOM+ Component Serviceに登録。


0669 NGNG
0670デフォルトの名無しさんNGNG
>>668
> 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デフォルトの名無しさんNGNG
どの部分が?かわからないけど、
DECLARE_CLASSFACTORY_SINGLETON(CXXX);
すると、ひとつのインスタンスをstaticな変数内に保持して以後、それを使いまわす
から、コンストラクタとデストラクタの繰り返しはなくなる。
IObjectControlについては、おいらも説明キボーン
0672デフォルトの名無しさんNGNG
DECLARE_PROTECT_FINAL_CONSTRUCT();
は、べつにいらないんじゃないか
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デフォルトの名無しさんNGNG

COMでない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
> COMはDllMain()/DllRegisterServer()/DllUnregisterServer()/DllGetClassObject()/DllCanUnloadNow()がOSから呼び出される
ぷっ
0676専門バカにうんざりNGNG
>ぷっ
ぷっ
0677デフォルトの名無しさんNGNG
ネタにマジレス
regsvr32.exeは、%SYSTEMROOT%\system32の下にいるから、当然、OSの構成要素ですが何か?
0678専門バカにうんざりNGNG
MODESET MODE=SUP,KEY=ZERO
0679デフォルトの名無しさんNGNG
>>677
freecell.exeも、%SYSTEMROOT%\system32の下にいるから、当然、OSの構成要素ですが何か?
0680デフォルトの名無しさんNGNG
つーかregsvr32.exeは必ず入っているとは限らないのだが。
0681デフォルトの名無しさんNGNG
OSでなきゃ何だと言いたいんだよ
カーネルモード以外はアプリとか言ってのける手合いか?
0682??NGNG
Essential COM のはじめの章で

------/*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
これでDLL作ってからダイアログベースのアプリで使おうとすると

(略)
#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
>>682,683
エクスポートはどうやってるの?
0685??NGNG
>>684 ifaststring.h をインクルードするだけじゃダメですか?
というか、本にはそう書いてあるので・・・

exportって「_declspec(dllexport)」のことですか?
一応、class IFastString や class FastString の間に挟んでみたりもしたのだが・・・

素人丸出しの質問で申し訳無いス。
0686デフォルトの名無しさんNGNG
http://alink3.uic.to/user/ranran2.html
0687デフォルトの名無しさんNGNG
リンカに、dllを作ったときにできたlibファイルを、教えておかないと逝けない。
それがいやなら、LoadLibraryからGetProcAddressの流れを。
0688??NGNG
>>687
使う側のアプリのプロジェクトの設定で
「リンク」タブのところの「オブジェクト/ライブラリモジュール」に
libファイル名を入れておけばOKですよね?(パスもちゃんと通ってる)
0689デフォルトの名無しさんNGNG
>>685
うん、ダメ。
ちょっとスレ違いになってきたな

http://pc3.2ch.net/test/read.cgi/tech/1036897197/
あたりでどうだ?
0690??NGNG
>>689 誘導されますた。thx!
0691デフォルトの名無しさんNGNG
IWebBrowserApp って何?
IWebBrowser2とはどう違うの?

IWebBrowserAppを取得する時は、IServiceProvider::QueryService
を使うというのも意味が分からないし。
サービス?なんじゃらほい。
0692いつでもどこでも名無しさんNGNG
それはもう古い
0693デフォルトの名無しさんNGNG
http://www.google.co.jp/search?q=cache:lfxMvBkuDT8C:www1.plala.or.jp/knambo/vc/usemore.html+IWebBrowserApp&hl=ja&ie=UTF-8
0694デフォルトの名無しさんNGNG
>>693
> IWebBrowserとIWebBrowserAppがそれであり、前者はコントロール、
> 後者はアプリケーションである。
つまり、サービス=アプリケーション、ってこと?
0695初心者NGNG
所望のサーバーとか所望のインターフェースってどうやって探してますか

今のところ↓とか使ってます
C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\lib\Win32API.csv
0696デフォルトの名無しさんNGNG
dat落ち回避
0697デフォルトの名無しさんNGNG
NdrConformantStructMarshall()
NdrConformantStructUnmarshall()

このAPIの使い方知ってる?
MSDNにも記述ないんだけど・・・。
0698デフォルトの名無しさんNGNG
>>697
使い方はわからないんだけど、それってCOMとは関係ないような...
COMより低レベルのraw RCPで使うものだと思います。
0699697NGNG
うんとですね。
オープン配列/オープン構造体を
カスタムマーシャリングしようとしてるんです。
MIDLのはき出すproxy/stubコードでこのAPIを使っていて、
カスタム化する際にこのAPIを使用しなくちゃいけないと
思うんですけど・・・。

って事なんです。
0700デフォルトの名無しさんNGNG
キリ番Get age! (・∀・)
0701デフォルトの名無しさんNGNG
現在プログラム板老舗スレ第4位!
0702デフォルトの名無しさんNGNG
>>697
外してたらスマソ。MBVカスタムマーシャリングだけが目的なら(構造体とか配列
ってことでそう思ってるわけなんだけど)、直接RPCのAPIを叩かなくても、IMarshal
をオーバーライドしてやって、ストリームへのシリアライズ/デシリアライズ処理を
記述してやればいいんじゃないかな。
#ようはその構造体や配列自体をインターフェイスとして出してやれば良いのではと。
#って、こんな記述で意図がわかってもらえれば楽でいいけどな。
0703デフォルトの名無しさんNGNG
煽りではないのですが、COM+サービス(トランザクション)とパフォーマンス以外で.NETよりCOMを好む理由は何でしょうか?
C++でCOMを使ってたときは、言語との透過性、文字列操作の煩雑さ、エラー処理の言語との不一致などコンポーネントを作ろうとしたのを挫折した覚えがあります.
既存資産の利用を含めて、すべてを置き換えるとはおもいませんが、.NETのほうが私的にはプログラムに使いたく思ってます.仕事あるかは知りませんが…
そんな私に意見お願いします.
0704デフォルトの名無しさんNGNG
>>703
ゆくゆくはその多くが置き換わるものと思ってるけど、
いきなり全てなくなるようなことはない。これはいいよね?
明らかなことは.netからそれらネイティブなコードを
呼び出そうとした場合、C関数をDLLに詰め込んだものよりも
COM形式の方が親和性が高いということ。
ネイティブのコードに対する需要がまだまだあることを考えたら
COMは未だに必要だし、理解しておくべき技術でもある。
こんな風に単純に思ってますがどうでしょうか?
0705デフォルトの名無しさんNGNG
>>703
OpenDocを使いましょう。
0706703NGNG
>>704 同意.
コンポーネント作る簡便さは.NETに多くの点で軍パイがあがるのでしょうか?
COMでないとという必要があれば知りたいので…お願いします.
0707デフォルトの名無しさんNGNG
>>706
>COMでないとという必要
おれの知る限りじゃ、ない
0708デフォルトの名無しさんNGNG
RogersenのCOMの参考書には、VBAからC++で書かれたDLL内の関数を呼び出せ
る、とありましたけど、どなたかいい参考書ご存知ありませんか?よろしくおながいし
ます。
0709デフォルトの名無しさんNGNG
>>708
超マルチうざい
0710デフォルトの名無しさんNGNG
>>709
ごめんね。でも、情報を得るには仕方がない・・・・・
0711デフォルトの名無しさんNGNG
> でも、情報を得るには仕方がない・・・・・
ハァ?
0712デフォルトの名無しさんNGNG
>>710
氏ね。
0713デフォルトの名無しさんNGNG
>>710
何いってんの?
中学生?
0714デフォルトの名無しさんNGNG
それにしても、マルチポストとか目ざとくよく見つけるよな…。
0715デフォルトの名無しさんNGNG
>>674
厳密にはDllRegisterServer, DllUnregisterServerはCOM DLLにとって必須ではない。
インストール時の利便性を考えてRegSvr32とかで自己登録できるようにしてるだけ。
最近のWindows Installerを使ったSETUPではSETUPプログラムが直接レジストリに
書き込みする場合が多くなってきてるみたいだし、実際登録用の関数をエクスポート
してないCOM DLLも存在する。

本当に必要なのはDllGetClassObject, DllCanUnloadNowのほうだ。これが無ければ
COM DLLとして成立しない。

COM DLLは、CLSIDというGUIDを通じてDLLフルパスを探索てDLLをロード、
DllGetClassObjectでクラスファクトリを作成して、CreateInstane()メソッドから連鎖的に
オブジェクトのインスタンスを作成してゆくタイプのDLL。
普通のDLLは、必要な機能をすべて関数として仕立ててそれをずらーっとエクスポート
してるタイプ。Dependency Walkerで見比べてみるとよくわかるよ。
0716674NGNG
>>715
>厳密にはDllRegisterServer, DllUnregisterServerはCOM DLLにとって必須ではない。

御意
0717デフォルトの名無しさんNGNG
>>715
>>710です。なんか、思い出しました。2年前にそんなことしてました。なつかしや〜。
結局、一番単純な古典的DLLを作って、VBAから呼ぶ路線にしたいと思います。
VBAからWin32APIを使うために必要は知識を網羅した(?)参考書も、他スレで教えてもらいました。
一番単純な古典的DLLで作ったほうが、Solarisなんかに計算エンジンを移すときに、楽そう。
それにしても、やっぱりみなさん詳しいですね。ぼくは、ホントアマチュアだから。
これからも時々お邪魔します。
(^ー^)ノ ヨロシク オネガイシマス
0718bloomNGNG

http://www.agemasukudasai.com/bloom/
0719COM初心者NGNG
素朴な疑問なのですが、コンポーネントサービスでアプリケーションを
右クリックし、詳細設定タブを開くとデバッグという項目があってデバッ
ガ内で実行するというチェックボックスとデバッガパスという入力フィー
ルドがあります。これはどのように使うのでしょうか?これを使ってCOM+
のデバッグがもっと的確にできるようになるといいのですが。
0720デフォルトの名無しさんNGNG
>>693の
>Internet Explorerのイベントを処理する (検討中)
のところが知りたいんだけど
どっか参考資料ない?
0721名無し@沢村NGNG
>>720
MFCのCHtmlViewのソース。
0722720NGNG
>>721
見たけど使ってないぞ
0723名無し@沢村NGNG
>>722
どこ見てるんだ。
BEGIN_EVENTSINK_MAPのあたりを見ればだいたい分かるだろ。
0724名無し@沢村NGNG
>>722
おとなしく、ここでも見とけ。
ttp://www.nitoyon.com/vc/tips/ie_component.htm
0725722NGNG
>>723,724
すいません。
0726デフォルトの名無しさんNGNG
comってcommand.com とかのcomということで委員ですか
0727デフォルトの名無しさんNGNG
激しく既出。
0728デフォルトの名無しさんNGNG
>>727
→同じ
 違う

?
0729デフォルトの名無しさんNGNG
↑

?
0730COM初心者NGNG
どなたか教えてください〜
0731デフォルトの名無しさんNGNG
Component Object Model
0732デフォルトの名無しさんNGNG
あげ
0733名無し@沢村NGNG
俺はCOMに真剣に取り組もうとしたことがあったが、レジストリに登録云々のことろで面倒くさくなってやめたね。
0734デフォルトの名無しさんNGNG
>>733
関数化すればいいやん
ただそれだけのことを何で?
0735デフォルトの名無しさんNGNG
あれ、沢村じゃん
いかん、容易に釣られてもた

鬱だ氏のう
0736IP記録実験NGNG
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
0737デフォルトの名無しさんNGNG
「2chでは裏でIP記録されています。IPを抜かれたくなければ
セキュリティガードに…」

というコピペを流行らせる会 会長↓
0738デフォルトの名無しさんNGNG
そして歴史に刻まれていく
0739デフォルトの名無しさんNGNG
普通に考えて、増えると思うなー。子供世代がPC買って参入してくるから。老人はもともと少ないからなかなか自然減少しないし。
鯖のほうで制限しない限り。
0740デフォルトの名無しさんNGNG
>>326
ネタですよね?
0741デフォルトの名無しさんNGNG
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。          
勢いで上告なんかしても一発で上告却下(門前払い)だよ。
   
二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm
  
ようするに上告しても今の制度では100%無駄。 これで完全終了ってことか。
0742デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0743デフォルトの名無しさんNGNG
すごいラインナップだな(藁
>tmp鯖
0744デフォルトの名無しさんNGNG
>>552
ご愁傷様。
0745デフォルトの名無しさんNGNG
つまらないね。

トリップだってさ
全然ボツ。
0746デフォルトの名無しさんNGNG
>>145
掲示板の一番下が「2ちゃんねる20030107a」
ってなってる板じゃなかったかな?
0747デフォルトの名無しさんNGNG
>>499
漏れが恐いのは、今後の他の裁判だ。
まだいくつか残ってるんでしょ?
0748デフォルトの名無しさんNGNG
159は尊師
0749デフォルトの名無しさんNGNG
>>649
誤爆じゃなくて、ここの前スレのコピペだと思われ。
0750デフォルトの名無しさんNGNG
するからなー。
0751デフォルトの名無しさんNGNG

鷺の質問・雑談スレに移動して下さいね。
0752デフォルトの名無しさんNGNG

シミュレート
0753デフォルトの名無しさんNGNG
ひろゆき君。
メルマガまってるよ。
0754デフォルトの名無しさんNGNG
スレタイの日本語、微妙におかしいね。
0755デフォルトの名無しさんNGNG
news2鯖に入った瞬間撤退すんなよw>コピペ荒らし
0756デフォルトの名無しさんNGNG
2ちゃんねるのオランダ引越しまだぁ〜
0757デフォルトの名無しさんNGNG
まあ、あnグラな話やりたきゃ他逝けってことかなぁ。
雑談、学問、技術系な板には関係ないな。
0758デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0759デフォルトの名無しさんNGNG
知らなかった(゚д゚)つφ.,._., メモメモ
0760デフォルトの名無しさんNGNG
事実・嘘をとわず公衆の面前でその人を侮辱したりした場合です。
0761デフォルトの名無しさんNGNG
まあ,ここでどんなに崇高な理想ブチ上げてるヤツよりも,
実際カラダ張ってるのはひろゆきなわけだからな……。
動機はよくわからないが。
0762デフォルトの名無しさんNGNG
一秒でも早い閉鎖を日々祈ってます( ´∀`)y-~~
0763デフォルトの名無しさんNGNG
内Pのレッド吉田、頼むから「今日のレッド」の時に
ネタ帳見ながらやるのやめてくれ、一応カネ貰ってんだろ
0764デフォルトの名無しさんNGNG
大阪JCネタ
0765デフォルトの名無しさんNGNG
それもどうかと思うけどな(^_^;)
やはり「書き込むことに責任あることを認識しろ」かと。

つーか、まもなく6億〜
■ このスレッドは過去ログ倉庫に格納されています