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

COM の世界を斬る!

■ このスレッドは過去ログ倉庫に格納されています
0001IUnknownNGNG
ATL や MFC でラッピングされていない素顔の COM について語り合いましょう。
0357デフォルトの名無しさんNGNG
それはキャッシュです、とか言い張る?(w
0358デフォルトの名無しさんNGNG
なんつーか、VARIANTあたりの設計で、C++みたいな
コンストラクタ/デストラクタ持ってる言語でも
うまく破棄されない場合があった気がする。
0359John ◆0z.4Is5E NGNG
>>356
酸
0360デフォルトの名無しさんNGNG
自分のバグを人のせいにすんな、見苦しい。
0361デフォルトの名無しさんNGNG
>>360
それじゃ話が終わっちゃうじゃん
0362デフォルトの名無しさんNGNG
>>360
禿同
0363デフォルトの名無しさんNGNG
禿同、とかいってるやつは理解してないだけ。
0364デフォルトの名無しさんNGNG
>>363
禿同
0365デフォルトの名無しさん NGNG
実行時のエラーは起きる可能性はいつだってあるから、
バグとも言い切れない
0366デフォルトの名無しさんNGNG
>>365
確保できた資源が、解放時にエラーになる?
それはどのシステムのどんな資源でしょうか?
0367デフォルトの名無しさんNGNG
>>366
禿同
0368デフォルトの名無しさん NGNG
スマートポインターとスコープ
参照カウンター
0369デフォルトの名無しさんNGNG
COMは巨大なオープンソースプロジェクトであるMozillaに採用されているYO!
0370デフォルトの名無しさんNGNG
>>369
まぁた路線変更に迫られるのですが?
0371デフォルトの名無しさんNGNG
路線変更?
0372デフォルトの名無しさんNGNG
Mozilla使ってる奴はCOMに感謝するべき
0373うぴゅNGNG
LinuxやMac OSのMozilla使ってる奴は誰に感謝すべき?
0374デフォルトの名無しさんNGNG
>>373
Mozillaのソース見たことないのか...
0375デフォルトの名無しさんNGNG
ここは悲惨は373の居るスレってことで
0376デフォルトの名無しさんNGNG
XPCOMなんてCOMの足元にも及ばんだろ
inner-processだけだし
http://www-106.ibm.com/developerworks/webservices/library/co-xpcom.html
0377デフォルトの名無しさんNGNG
禿同
0378デフォルトの名無しさんNGNG
>>366
ヒープが壊れたときとか。
0379デフォルトの名無しさんNGNG
>>349
Unadviseされるわけがない。
理由:Proxy/Stubがそこまで考慮していないから。
0380デフォルトの名無しさんNGNG
>で、Adviseの件はどうなんでしょう?
>だれか教えてください。自動的にUnadviseされるなんてやっぱり甘い?

カメレスで済まないけど、Adviceつーても、
単に内部で参照カウントとインターフェースのポインタ
持ってるだけだということを考えませう。

クライアントが落ちてもサーバーが落ちても、
DCOMがRelease( )してくれるのなら
メモリリークはとりあえず発生しない。
0381380NGNG
ただし、
Unadviceはもちろんやってくれないので、
接続のはがれたインターフェースポインタがいつまでも居座ることにはなる。

DCOMがどんな風にRelease( )するかによるけど、安全性の観点から見て、
多分落ちることはないのではないかと思う。
(使うと常にエラーを返すようになると思うが)

ほんとは、そのあたりでエラーを検出したらインターフェースを取り外すように
Proxy/Stubを吐いてくれると無駄が無くていいのだけど。
そこまではしてくれていない。

VC++のウィザードが作るコードは、大雑把にはvectorでインターフェースを複数
保持して、それらをお構いなしにコールしているだけだと思った。
(エラーが返るからまあいいじゃねーか、という考えなのかな?)
0382デフォルトの名無しさんNGNG
メモリリークするかしないかは実装の仕方により。

ATLのIConnectionPointの実装だと(純粋なCOMというスレの趣旨だがサンプルということで)
Adviseしたオブジェクトのシンクインタフェースへのポインタを固定長の配列で保持している。
だからUnadviseし忘れたオブジェクトがいくつもあってもそのうち、保持しきれなくなる。
あとからAdviseしてきてもCONNECT_E_CANNOTCONNECTと返すほか無くなる。

人によってはIConnectionPointの実装を可変長配列やリストで管理していたりする。
そうなるとおそらくヒープにとるので、Unadviseされないとメモリリークになる。

よくありがちなのが、クライアントが死んでものだからしょうがなく再起動するを繰り返したりする場面。
クライアントが異常終了から再起動するたびに、どんどんメモリリークするかAdvise可能な回数が減る。
DCOMをつかってサーバーから接続しているクライアントに一斉にイベントを投げるようなシステムは気をつけたほうがいい。

こんな状況でもAdviseを受け付けられるようにメモリリーク覚悟でヒープからとるか
固定長の配列で、あふれるようなら拒否するかどっちが良いか悪いかわからんが問題があることは確かだ。
(俺としてはAdvise可能な回数は制限したほうがいいと思うけど)

というわけでイベント送出時にRPC_E_なんとかとなったら自分でUnadviseするのが無難だろ。

VBは自分でUnadviseなんかできないな。
VB屋さんが、DCOMで簡単にサーバークライアントシステムが組めるや、
ちょちょいのちょい。なんて調子で安易にDCOMを使って、
しまいにはどうしたらいいかわからなくなる。

これでもWindowsDNA(死語)の基幹テクノロジーなんだがね。
0383デフォルトの名無しさんNGNG
っていうかDCOMベースのシビアな環境でIConnectionPointなんか使うほうが間違い。
0384デフォルトの名無しさんNGNG
DCOMを使う=シビアな環境なのか。
0385デフォルトの名無しさんNGNG
>っていうかDCOMベースのシビアな環境でIConnectionPointなんか使うほうが間違い。
おいおい、リモート・ローカル等価性はどうなったんだ?
IConnectionPointはリモートで使ってはいけないから
リモートとローカルで等価ではないってことだな。
実はリモートに限らずローカルサーバーもやばいんじゃないか?ということで等価か。

とIConnectionPointひとつを重箱の隅を突くように取り上げて煽ってもしょうがないが
現実問題として、IConnectionPointに限らず、リモートオブジェクトから
インタフェースを渡されるような場面は気をつけたほうがいい。
渡してきた相手がこそっり死んでいるようなこともあるんで。
0386デフォルトの名無しさんNGNG
>>382
VBはUnadviseを勝手にやってくれたりはしないのかな?
0387デフォルトの名無しさんNGNG
>>384
そうではない。ここで問題になっている程度の、それなりにそれなりが要求される環境で、
しかもDCOMを使っている場合ってこと。

>>385
Effective COM読んでね。
9. Avoid connection points
0388デフォルトの名無しさんNGNG
はげ
0389デフォルトの名無しさんNGNG
#別のところから流れてきました。

VCでCOMつくってVBScriptから使おうと思ったんですが、
VBScriptに2つ以上の返り値を戻す方法がわかりません。
つまるところ、
 Set Hoge = CreateObject("Hoge.Hoge")
 Status = Hoge.Func(InVal, OutVal, OutVal2)
 IF OutVal = "aaa" And OutVal2 = "bbb" Then
みたいな設計はできないんでしょうか?
0390デフォルトの名無しさんNGNG
>>389
できません。VBScriptの制限事項です。
0391389NGNG
>>390 どうも。
がっくし。SAFEARRAYとVARRANTつかって配列で受け渡しするしかないか・・・
0392デフォルトの名無しさんNGNG
COMでプロパティって設定しますよね。たとえば、
COM側(VC):
[propget, id(10), helpstring("プロパティ RemoteHost")] HRESULT RemoteHost([out, retval] BSTR *pVal);
[propput, id(10), helpstring("プロパティ RemoteHost")] HRESULT RemoteHost([in] BSTR newVal);

クライアント側(VBscript):
Hoge.RemoteHost = "myhost"

みたいな。

でこの場合、getやputでエラーとなった場合の処理ってどう実装すればいいんでしょうか?
とくにputの場合エラーとなってもクライアントは判定できないです。
0393デフォルトの名無しさんNGNG
なんの為にHRESULT返してるんだ。
0394デフォルトの名無しさんNGNG
スクリプト側でエラーを検出したいって事だろ
0395393NGNG
クライアントか。すまん。
VBSならON ERRORで処理するんちゃうんか?
それともVBSはput時のエラーは無視する仕様なの?
0396ななしNGNG
えっと、初歩的な質問かもしれませんが・・・。

VBからオートメーションでExcelを操作するのに、事前バインドと実行時バインドでどのくらい
レスポンス差があるのか気になって、

(1) 事前バインドで Dim .... As New Excel.Application
(2) 事前バインドで Dim .... As Excel.Application → Set .... = New ... でインスタンシング
(3) 事前バインドで Dim .... As Excel.Application → Set .... = CreateObject ... でインスタンシング
(4) Dim .... As Object → Set .... = CreateObject ... で実行時バインド

の4通りを比較してみたところ、(4)が一番速いという、予想外(常識はずれ)の結果となってしまい
ました。(ベンチマークの内容は、DAOのRecordsetをExcelに出力する、というもの)

COMの解説書には、事前バインドの方が高速と書いてありますが、どうして期待した結果にならないの
でしょうか?

ちなみに、インプロセスサーバを参照してコンパイルしたEXEを該当するコンポーネントがレジスト
されていない端末で起動するとプロセスが起動せずにクラッシュしますが、上記(1)〜(3)のEXEを
Excelがインストールされていない端末で起動しても、エラーにならずに正常に起動してしまいます。(無論、オートメーション機能は動きませんが)
インプロセスコンポーネントと、アウトプロセスコンポーネントでは、バインドの仕組みが違うの
でしょうか?

ご存知の方、コメントお願いします。m(_ _)m

0397ななしNGNG
>>396

環境は、VB6.0 SP5 + Excel8.0 SR-2 です。

Windows 98 / NT4.0 ws SP6
のどちらでも、

> (4) Dim .... As Object → Set .... = CreateObject ... で実行時バインド

が最速でした。
0398デフォルトの名無しさんNGNG
速いというのが具体的に何の時間を測ったのか書け。
0399ななしNGNG

>>398

ソースが現在手元に残ってないのでアレですが、50000件のレコード(DAO.Recordset)を
セルに出力する時間を計測しました。
インスタンス化 → Nothing までの時間です。
無論、現実的には、二次元配列を使うなり、CopyFromRecordsetメソッドを使えば一発の
処理なのですが、メソッドやプロパティの参照回数を増やさないと明確な差が検出でき
ない?と考えたので、1件ずつループしてます。
0400デフォルトの名無しさんNGNG
>>399
ケース毎にプログラム終了した?
exeにコンパイルして試した?
ケース毎にマシン再起動した?
0401デフォルトの名無しさんNGNG
おおよそ
 (総時間) = (一件当たりの時間) * (件数) + (定数)
になるから
件数を変化させたときの時間の変化を見れば、
もう少し分かったと思うんだがなあ・・・

ソースコードがないんじゃあもう無理か。
ちなみにそれぞれの時間を覚えてない?
0402ななしNGNG
>>400

当然、IDEではなく、EXEでテストしてますし、プログラムも1回毎に立ち上げ
直しました。マシンのリブートまではしてませんが。(やるべきでした?)
それと、レスポンスの計測にTimer関数を使用したので、測定誤差はあるかも
しれません。でも、誤差が出るのは、(1)〜(4)までおなじ条件なので、(4)に
だけ有利に働くなんてことはないですよね?
0403ななしNGNG
>>401

ソースがないのは、今、実家に帰ってるから(^-^;で、自分とこのマシンにはちゃんと
あります。(件数をもう少し増やせば、というのはちらっと思いました)

ちなみに、このベンチマークをやったのは、昨年の9月頃です。
実行時バインドの方が高速だなんて、気でも違ったかと思われそうで、技術系のMLやBBS
に上げるのを躊躇してました・・・。
0404デフォルトの名無しさんNGNG
>>399
>ちなみに、インプロセスサーバを参照してコンパイルしたEXEを該当するコンポーネントがレジスト
>されていない端末で起動するとプロセスが起動せずにクラッシュしますが、上記(1)〜(3)のEXEを

CreateObjectでコケてるんですな。

>Excelがインストールされていない端末で起動しても、エラーにならずに正常に起動してしまいます。(無論、オートメーション機能は動きませんが)

こっちは、めそっど、ぷろぱてぃの情報がコンパイル時に解決されますね。
0405デフォルトの名無しさんNGNG
ソースあるんなら試せるね。よかった。

厳密に言うなら、ディスクキャッシュなどの影響をなくすために、
同じテストを3回以上繰り返すべき。(1なら1を3回実行する)
これで生の処理時間に近づけるはず。

あと、プロパティやメソッドの実行レスポンスを調べたいのであれば、
計測開始時刻と計測終了時刻 を ループ開始直前とループ終了直後 に
置いたほうがいいね。

4にだけ有利に働く可能性としては
 a:単に最後に実行して、全部のデータがディスクキャッシュに乗っていた
 b:4のみ >>401 のいう定数部分が小さい(あるいは1〜3は定数部分が大きい)
などがあると思う。

ベンチマーク(理科でいうところの対照実験)の基本なので、
このへんを押えてないと厨房扱いされちゃうよ。
0406デフォルトの名無しさんNGNG
>>396
エクセルを操作するのでアウトプロセスでしかもDispatchインターフェイスのみ
でしょう。
どの方法でも測定誤差程度しか違わないのではないでしょうか。
0407ななしNGNG
>>405

ありがとうございます。

> b:4のみ >>401 のいう定数部分が小さい(あるいは1〜3は定数部分が大きい)
> などがあると思う。

その可能性はありそうですが、Excelの場合、行数に65536という制限があるので、
ベンチマーク方法をもう少し工夫した方がいいのかもしれません。

私的に気になっているのは、メモリ上の操作ではなく、ファイル出力の
レスポンステストなので、複数回実行すると環境が汚れることによる影響
があるんじゃないかと・・・?
0408ななしNGNG
>>406

ありがとうございます。

> エクセルを操作するのでアウトプロセスでしかもDispatchインターフェイスのみ
> でしょう。

インプロセスとアウトプロセスではバインド方法が違う、という理解でよろしいの
でしょうか?

使っている言語がVBオンリーな上、COMのメカニズムもあまり理解していないので、
このスレの話題についてくのはしんどいです・・・。(T_T)
0409デフォルトの名無しさんNGNG
よそのプロセスのCOMインターフェースにアクセスする方法はありませんか?
0410409NGNG
ちなみに、取得できる情報は、
対象のプロセスとインターフェースの型と、インターフェースへのポインタだけです。
CoCreateInstance()などで取得できるものではありません。
0411409NGNG
それから、できれば、ウインドウをフックしてcallするのは最後の手段にしたいです。
0412デフォルトの名無しさんNGNG
もうちょっと勉強してから出直せ。
0413デフォルトの名無しさんNGNG
COM関係のスレ2つとも職人さんたち対象なので、
お勉強レベルのスレがあってもいいかもね
0414409NGNG
>>412

1 そんなことできるわけねーだろ、ボケ
2 そんな簡単に実現できること、自分で調べろ ゴルァ

なのか、どっちなんでしょう?
それだけでもよろしくお願いします。
0415409NGNG
通常ポインタがプロセスを超えられないことは知ってます。
ただ、スタックトレースを見ると、たとえばドラッグ&ドロップなんかは
rpcrt4.dllなどを介してcallされているし、何か抜け道なりがあるのかもしれないと思って聞きました。

ちなみに、フックをかけてcallをする方法は試してみたところ成功しました。
0416デフォルトの名無しさんNGNG
>415
だから、マーシャリング、プロキシ/スタブ、スレッドモデルなんかに
ついてもっと勉強しろや。
他のプロセスにあるinProc COMサーバを(その、「ほかの
プロセス」を実行主体として)呼ぶのは、フックでもしないと無理。
そうでないなら、普通にCreateProcessから呼び出せば、
あとはole関連ライブラリが善処してくれる。
0417406NGNG
>>408
バインド方法とサーバのプロセス形態は直接は関係ないですよ。
バインド方法はVBのソースで型名でオブジェクトを扱うのか、
Objectで扱うのかの違いでしょ。
一般的にVBでいうところのバインドは、

参照を追加して型名で操作 == アーリーバインド
 開発時に型情報等を解析する
  サーバへのバージョン依存性は高くなるが
  開発時にエラーチェックできる
  またパフォーマンスはよい
object型で操作 == レイトバインド
 実行時に型情報等を解析する
  サーバへのバージョン依存性は低くなるが
  実行時エラーになる可能性もある
  またパフォーマンスはさがる

という事で >>396 でなぜレイトバインドが一番速かったのか
と疑問に思っているのではないでしょうか。
#ちなみにnewとCreateObjectはオブジェクトを作るときのみ
#違いがあるので受けた後の型しだいで上記と同じ。

バインド方法で著しくパフォーマンスがかわるのは
dualインターフェイスのインプロセスサーバを扱った
ときでしょう。アーリーバインドで開発時にIUnknown側の
メンバーを扱う様にコードが吐かれるのか、レイトバインド
で実行時にDispatchのInvoke経由でメンバーを扱うのかという。

たとえdualインターフェイスでもアパートメントに互換性が
あるインプロセスサーバ以外は直接サーバとは対話していない
ので注意が必要です。

しかし >>396 で検証した結果レイトバインドが速いというので
あれば、仮説ですがVBがDispatchのみのエクセルに対して
アーリーバインドするとエクセルを扱う仮想のエクセルオブジェクト
を作成しているとか、使用しないメンバー情報等も全て
取得してまうとか...そのぐらいでしょか。

結局エクセルを扱うときDispatchでInvokeするしかないわけだから
アーリーバインドする事でどのぐらいパフォーマンスに差がある
かといわれると「誤差ぐらい」と思われますが。
0418ななしNGNG
>>417

丁寧なコメント、ありがとうございます。m(_ _)m
残念ながら、私は勉強不足のようです。(VBユーザーは、COMを「使う」ことはあっても、
内部の仕組みは必ずしもしらなくても足りてしまう場合が多いので)

このスレの話題について行けるよう、いろいろ研究してみます。
ソフトウェアの動作原理や(隠蔽された)内部のふるまいに興味が大いにありますので。
0419DNGNG
Inside COM+ や Inside OLE ぐらいは読んどいたら?
0420デフォルトの名無しさんNGNG
>>419
たしか前者は入手困難じゃなかった? 
0421DNGNG
それは後者だね。ちなみに私は 177 のレスを読んで
速攻買いに行きました。ここまで高い本買ったのは初めてだったが
かなり勉強になるよ。入手出来なければ大きめの図書館で借りたりとかね。
家の近郊の図書館にはInside OLEはあった。まあ購入後知ったことだから
どうでもいいんだけどね。常に手元に無いと落ち着かないって言うのもあるし
損した気分にはならなかったね。今の学生さんならお金持ってるだろうし
そんなに負担ではないのでは?(いいかげんな推測ですが)
0422ななしNGNG
>>421

いちおう、ええ歳こいた社会人(0x20代)なので(にしては、厨房質問ですが(^-^;;;)、
本くらいは買えます。

「Inside COM+」ですね。
ありがとうございました。m(_ _)m
0423デフォルトの名無しさんNGNG
InsideOLEは駒場東大前の駅前の書店に野ざらしにされてボロボロの状態で、定価で売ってる。
俺が立ち読みしてるので、絶対に買うな。お長居します。
0424ななしNGNG
>>423
現在、東京在住ではない(地方に飛ばされました(T_T)ので、買えません・・・。
0425デフォルトの名無しさんNGNG
誰か俺にIMonikerをやさしく解説してください。
このインタフェース訳わからんです。

どう実装していいのかどう使っていいのか
何のためにいるのか、さぱーりわかりません。

ちなみにInsideOLE読みました。でもわかりません。
0426デフォルトの名無しさんNGNG
IMonikerはIClintonを陥れたりするために使います。
0427デフォルトの名無しさんNGNG
IMoniker に I はない。あるのは、ただ欲だけ(:´Д`)
0428デフォルトの名無しさんNGNG
うまいなぁ。
0429デフォルトの名無しさんNGNG
COM+ってこれからどうなるの?
良く分からないは、レジストリから切り離されるって噂。
それと、64bitVBが出ないんなら、64bitCOM+が出ないって事?
0430デフォルトの名無しさんNGNG
MFCをかじった程度の初心者です。教えてください
・COMってなんですか?入門ページありますか?
・COMって今後はどうですか?
0431デフォルトの名無しさんNGNG
こちらからお入りください (W
COM プログラミングの基本
http://www.microsoft.com/japan/msdn/thisweek/combasics/combasics1.asp
0432デフォルトの名無しさんNGNG
タイプイライブラリを#importを使わずにC言語で
読み込む方法を教えて下さい。(VC6またはBCC)
0433斬ってくれ!NGNG
ITypeLib や ITypeInfo とか使えば?
そういうことじゃなくて?
0434ProxyNGNG
VBScript エンジンと JScript エンジンではアーキテクチャという観点から
どのようなメリット、デメリットがありますか?
たとえば文字列において VBScript では BSTR、 JScript ではオブジェクト、
実行速度などで差が出てくるものなのでしょうか?
0435432NGNG
>>433
>ITypeLib や ITypeInfo
多分それです。知りませんでした。
これもQueryInterfaceやGetIDsOfNamesで取ってこれるんでしょうか。
0436デフォルトの名無しさんNGNG
>>434
やってみれば?
0437デフォルトの名無しさんNGNG
QueryInterface(IID_ITypeInfo, &pTypeInfo)だろ。多分。
0438233NGNG
ITypeLib ITypeInfo
で検索しても日本のサイトはほとんど引っかかりませんね。
本の索引とかばっかりで。
タイプライブラリの参照で参考になりそうなWebサイトがありましたら
紹介してください。
0439432NGNG
s/233/432/
0440デフォルトの名無しさんNGNG
    ...
0441IUnknownNGNG
>432

私の場合、ほとんどの情報や技術は MSDN ライブラリと
専門書から学びました。まあ専門書は高いですし、簡単に
買えとは言えませんが、MSDN ライブラリはお持ちでないの?

持って無くても以下のサイトで見ることが出来ます。

msdn.microsoft.com/library/

ここで次のように階層を辿って下さい。

Component Development
  Automation
    SDK Documentation
      Automation
        Type Description Interfaes


あと厳しいようですが英語が読めないというのは論外です。
専門技術を身につけるには英語力は必須ですからね。
0442デフォルトの名無しさんNGNG
ひょっとして、ASPからはCOMを使ってもレジストリの中身は見れないんですか?
実行ユーザの権限が低いから
0443デフォルトの名無しさんNGNG
>>442
NT,W2K,XPだとレジストリにもセキュリティ属性というものがあるんよ。
0444デフォルトの名無しさんNGNG
>>443
やっぱりそうですか・・・
IISの匿名アクセスユーザをAdministratorとかに設定させるしかないのかな?
0445デフォルトの名無しさんNGNG
Usersで十分。Readがあればいいんでしょ。
0446デフォルトの名無しさんNGNG
>>445
とおもってUsersのユーザにしたけどだめでした。

そしてなぜかAdministratorsにしてもだめでした。
コンピュータの管理者(XPなので・・・)にしてみたらできました。

へんですね。コンピュータの管理者も所詮所属グループがAdministatorsになってる
だけなのに・・・
0447デフォルトの名無しさんNGNG
iisresetしてやりなおし。
0448デフォルトの名無しさんNGNG
>>447
ありゃ?できました。
IIS画面で停止->COM+のIIS????をシャットダウン->IIS画面で起動
までやったんで大丈夫かと思ってたのに。

iisresetってさらに何かやってんですね。どうやら。

・・・けどやっぱりUsersだけだとだめでした。たぶん自分の見に行ってるレジストリの
権限が高いんですね。きっと。
0449デフォルトの名無しさんNGNG
COMにしたDLLに、自分自身がインストールされているパスを返す関数を
組み込みたいのですが、うまい方法がわかりません。

Dllの仕組みの中にそういう機能ってありませんでしたっけ?
0450デフォルトの名無しさんNGNG
GetModuleFileNameをつかえばいいのでわ?
0451449NGNG
>>450
なにか期待と違う結果が・・・

C:\WINDOWS\System32\dllhost.exe

dllを呼び出した側のモジュール名が出てきました。?
0452デフォルトの名無しさんNGNG
>>451
DllMainで渡されるHINSTANCEを保存しておいて、それにGetModuleFileName()
0453449NGNG
>>452
ありゃ?だめだ。というかdllhost.exeってただしいっちゃ正しいんだけどね。
dllhost.exeってCOM+だけの話かとおもってました。
GetDllFileNameとかあればよかったんだけど。

HINSTANCE g_hInstance;
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
g_hInstance = hInstance;

}
--
extern HINSTANCE g_hInstance;
hoge()
{
TCHAR fileName[_MAX_PATH];
::GetModuleFileName(g_hInstance, fileName, sizeof(fileName));
}
0454449NGNG
失礼。できてました。(iisが前のをにぎりっぱなしでした)
0455デフォルトの名無しさんNGNG
昔ポプCOMっていう小学館からでてた雑誌あったなー
関係ないけど好きだった
0456デフォルトの名無しさんNGNG
VC++でreturn E_FAILをし、それをVBScript(ASP)で受けたいのですが、なぜか受け取れません。

エラー タイプ
(0x80004005)
エラーを特定できません

とは出るので、以下のように受けようとしても、Err.Numberは0のままなんです。

On Error Resume Next
MyCom.Hoge()
Response.Write("Error# " & Hex(Err.Number) & "<BR>")
Response.Write("Generated by: " & Err.Source & "<BR>")
Response.Write("Description: " & Err.Description & "<BR>")

On Errorじゃ受けられないんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています