COM の世界を斬る!
■ このスレッドは過去ログ倉庫に格納されています
0001IUnknown
NGNG0231227(泥酔)
NGNG0232masa
NGNGhttp://www.zdnet.co.jp/help/howto/win/win2000/0007special/complus_vb/chap4/12.htm
が今のバイブルになっているのですが、プロトコルがDCOMのはずなのでdcomcnfgに登録されているはず
だ!って書いてあるのですが登録されてません。msiファイルをインストールすると
VB上からは参照設定できます。しかしプログラムを動かすとActiveXコンポーネントを作成できません。の
エラーが出てインスタンスが作成できない状態です。win98+dcom98でも結果は同じでした。
ちなみにWinNT4(sp6a)+VB6(sp5)がクライアント環境です。ServerはWin2kServer(sp2)+VB6(sp5)です。
いろいろなhp等々見ているのですがこの辺に関してはほとんど情報がない状態です。
(自分が探しきってないだけかも...)
よろしくお願いします。
0233227(二日酔い)
NGNGどんなエラー?
エラーコードをエラーメッセージに整形する関数があるので
もうちっと詳しいエラーメッセージを調べて見れ
0234デフォルトの名無しさん
NGNG0235masa
NGNG早速の返事ありがとうございます。
エラーの内容ですが、
実行時エラー'429'
ActiveXコンポーネントはオブジェクトを作成できません。
です。
COMの中身ですが
Public Function TestClass() As String
TestClass = "Test"
End Fucntion
といった簡単な内容です。
クライアントは
Private Sub Command1_Click()
Dim cls As TestCLS.TestClass1
Set cls = New TestClass1
Text1.Text = cls.TestClass
Set cls = Nothing
End Sub
で、Newの行(実際にインスタンスを作成する)で上記エラーが発生します。
ちなみにその状態でNT4ServerのMTSに登録してあるCOMをエクスポート後
クライアントにインストールしました。MTSの方はレジストリに書き込まれ
ていますので書き込まれているRemoteComputerの変数を強制的にWin2kServerの
コンピュータ名に書き換えてやるとなぜかWin2k側のCOM+が動きます。
こんな状況です。
よろしくお願いします。
0236227(ほろ酔い)
NGNGちなみにVBはEnterprizeEditionかいな?
VisualStudioToolsのOLE/COM ObjectViewerでCreateInstanceできるかいな?
オデもCOM使うときはC++からのみなもんでVBでのCOMはよう知らんのよスマソ。
本当はAPIのFormatMessageとかが吐くエラーのほうが情報量多いんだろうが・・・
>234
DLLの拡張版じゃ。
0237papa
NGNG>受け側も送り側もIDL(タイプライブラリ)での型宣言は同じになってる?
こちらですが、IDLは使ってませんで、ActiveXでのCOM化(?)でやってマス。
問題はEXE同士、画面を持つモノ同士での構造体配列のデータの引き渡しに失敗することなんです。
ん〜説明不足でしょうか?
やはりIDLを使ってタイプライブラリを作成し、組み込む方が良いのでしょうかね?
ATL未使用でのCOMでのC同士の連携は成功してます。ガックシ。
VB同士のCOMでの開発の資料が殆ど無いので、困ってる次第です。
やっぱIDLでCOMった方が良いのかなぁ・・・・
どなたかVBのEXE同士での連携に成功した方いらっしゃいませんでしょうか?
0238デフォルトの名無しさん
NGNG構造体はやめた方が吉。
クラスで参照渡しした方が安全だしIDL要らずで楽チン。
サーバ側は
Public Property Get Hoge(Byval Index As Integer) As HogeClass
Set Hoge = myHoge(Index)
End Property
ってかんじかな。
>VB同士のCOMでの開発の資料が殆ど無いので
MSDNライブラリを"coffee"で検索してみよう。
0239デフォルトの名無しさん
NGNG俺がよく使うのは・・・
1)2つともOLE2Tしてからstrcmpで比較
2)2つとも_bstr_tに代入して==で比較
なんだけど、どっちのほうがいいんだろう?
なんか、VCは文字列の扱い方が多くて迷うよな・・・。
0240デフォルトの名無しさん
NGNG・UNICODE -> SJIS は変換できない文字がある
ってことで、基本的に1)はあまりお勧めできない。
0241デフォルトの名無しさん
NGNGちなみにこういう書き方はOK?
if( ( _bstr_t )aaa == ( _bstr_t )bbb ) { // aaaとbbbはBSTR変数
いや、いちいち_bstr_tのインスタンスを明示的に生成するのが面倒くさいからキャストしてるんだけど。
それともわざわざ
_bstr_t aaaaa = aaa;
_bstr_t bbbbb = bbb;
if( aaaaa == bbbbb ) {
てやったほうがいいのかなあ?厨房な質問でスマソ・・・
0242デフォルトの名無しさん
NGNGあとでSJISなルーチンにつっこむなら、OLE2Tで比較してもいいし、
UNCIODEのままHogeるなら、最初に_bstr_で代入したほうが便利。
aaa,bbbがそこでしか使わないなら、そこだけキャストするのもいいだろう。
0243デフォルトの名無しさん
NGNGATLのCOMからのイベントをJavaScriptで記述したHTMLではどーしても拾えないっす。
0244デフォルトの名無しさん
NGNG無理
0245これって法の盲点?
NGNG1 :ひろゆき@暫定管理人 ★ :01/11/01 15:49 ID:???
「削除依頼は公開」の原則に従って削除したものを公開してますー。
ソース。
http://www.dd.iij4u.or.jp/~cap/nissei/
17 :ひろゆき@暫定管理人 ★ :01/11/01 16:01 ID:???
いやぁ、削除依頼は公開って原則ですから、、
( ̄ー ̄)ニヤリ
18 :va :01/11/01 16:01 ID:+W2rWnl4
同じこと書き込んだら、速攻で削除されるのかな?
19 :ひろゆき@暫定管理人 ★ :01/11/01 16:03 ID:???
削除依頼がくるまで放置っす。
詳しくはhttp://news.2ch.net/test/read.cgi?bbs=newsplus&key=1004597354
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNG_bstr_t型に直接BSTR型を代入するとリークすると思われ。
if( _bstr_t(aaaBSTR,FALSE) == _bstr_t(bbbBSTR,FALSE ){
...
としたほうがリークしないらしい。(ちゃんと確認したわけではない)
もっとスマートな方法ないんでしょうかね?
MSDNあたりをあさってみてください。
検索で_bstr_t リーク 等のキーワードでHitすると思います。
比較演算子はないけど、ATL使ってるならCComBSTRクラスのほうが軽量でよい、と聞いたことがあります。
0248247
NGNG)が足らなかった。鬱
0249デフォルトの名無しさん
NGNGのエラー原因ってなに?
0250デフォルトの名無しさん
NGNG禿しくスレ違い。
COMに斬られてどうする。
0251デフォルトの名無しさん
NGNG( _bstr_t )aaa とか _bstr_t bbbbb = bbb; とかいままでしょっちゅうやってるんだけど・・・
0252247
NGNGVC6.0SP5の環境でチェックしたらリークしなさそうですね・・・・
1999年の文書を参照してるので、現在は修正されてるのかな?
リークが顕著化しないのであれば、特に問題ないと思います。
# ほんとはしてたりして・・・
0253デフォルトの名無しさん
NGNG微妙に息の長いスレだな。
0254デフォルトの名無しさん
NGNG0255てんさいぷろぐらむぁ(偽) ◆8Fck5JHo
NGNGでいいのでわ?
とかそういう問題(互換性?)じゃあないんでしょうか?
0256てんさいぷろぐらむぁ(偽) ◆8Fck5JHo
NGNG0257デフォルトの名無しさん
NGNG0258デフォルトの名無しさん
NGNGIDLでvoid*は試したことないなあ。
COMの原則から言えば(RPC上の)転送サイズの推測が利かない
VOID*は禁止されていたとしても不思議ではない。
DLLサーバなら別に実害はないんだろうが、EXEサーバーとかで
は完全に破綻する宣言方法だな。
0259某 C1シリーズ
NGNGMIDLはメソッドの引数として型無しを認めていないからです。
これはオートメーションでは禁止という意味で、
MIDLでは全く不可能というわけではありません。
MIDLでの void * の使い方。
cpp_quote("#if 0")
typedef ULONG * HNDL;
cpp_quote("#else")
cpp_quote("typedef HANDLE HNDL;")
cpp_quote("#endif")
反則かも知れないけど、これで HNDL という定義は .cpp 上では void * になります。
また、MIDL上でもエラーをこきません。
0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNG消えるとは思えないけど、デバイスドライバを書く人がそんなに多くないように、
生COMを使わなければならない、という場面は減ると思う。
0262デフォルトの名無しさん
NGNGうまくいったVBの方をOLEViewでTLBの情報をみてC++ で同じようにつくってやれば?
0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNGCOMは消えないかもしれない。
が、COMを経由しない世界はもっとスゴイ。ステップ激減で高性能。
逆に言うと、COMを作る側は不思議に膨大なヘッダーファイル、実行時は性能がネック。
0266デフォルトの名無しさん
NGNG安物ぎじゅつだよあれは。氷魚の著作。しかもかなり手抜きのな。
お前ら糞氷魚のあとおってるだけ。
どうせMSだけでなくて米業界全体が、統一思考や一括管理な
んて思考をうけいれるつもりなんてまったくないと氷魚は嘆いて
いたよ。完璧なものをつくらせちまえよ。やつに。
こころあたりはあるんだろ?それらしいやつ。
0267デフォルトの名無しさん
NGNG勝ち疲れでATIやらにも手ぇ貸してるみたいだがな。
あこがいちばん素直ないろと設計らしいし。もいっかい
りりーすされるのきぼーん。
AUREALも奴つぶした?1bitも奴。
とっとと完成品くんでしまえと逝ってやれよ。
0268デフォルトの名無しさん
NGNG根拠は?
0269デフォルトの名無しさん
NGNG329 :デフォルトの名無しさん :02/01/04 10:22
>>328
ここのデンパが迷い込んだだけ
脳内あぼーん推奨
http://pc.2ch.net/test/read.cgi/prog/999284410/
0270デフォルトの名無しさん
NGNG0271名無しさん@お腹いっぱい。
NGNG0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNGダイアログを追加しました。そして以下のテンプレートクラスを継承させました。
public CAxDialogImpl<CComDialog>,
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CComDialog,&CLSID__ComDialog>,
public IDispatchImpl<IComDialog,&IID_IComDialog,&LIBID_SAMPLELib>
ダイアログリーソースにエディット、インターフェイスにVisibleプロパティを
追加してクライアントプログラム(クライアントはコンソールアプリケーション)から起
動しましたが、エディットボックスに文字をタイプすることが出来ません。
カーソルは表示されマウス操作によるカット&ペーストは可能です。さらにBackSpace
キーは無効でDeleteキー、カーソールは有効です。
EnableWindow、SetFocus周りの見落としがあるのかと試行錯誤しましたた。
このような場合、エディットのテキストエリアに文字を入力できるようにするには、
どうしたらよいのでしょうか?
0274273
NGNGTranslateMessageが無かっただけ。
Wizardに頼りすぎだった。
0275VBCOM
NGNG以下のようにVBでTestVBComをつくって、Com+にも登録してVBScriptから呼べることを
確認して、さあCで使おうとおもったら、タイプライブラリがない、とおこられます。
「コンポーネントおよびコントロールライブラリ」にも自作のVBCOMが出てこないし・・・
なにか不足なことがあるんでしょうか?
#include "stdafx.h"
#include <comdef.h>
#import <TestVBCom.dll> named_guids
int main(int argc, char* argv[])
{
CoInitialize(NULL); // COM の初期化
printf("Hello World!\n");
return 0;
}
0276デフォルトの名無しさん
NGNG・Invokeで取得したVARIANT値がVT_DISPATCHだった時に、
そのインターフェースを使う場合AddRef/Releaseしますが、
使わないで、ただ(戻り型を知る様な目的で)空読みした場合、Releaseは必要でしょうか?
現在必要ないものとして処理してますが、これは正しいでしょうか?
0277デフォルトの名無しさん
NGNG0278デフォルトの名無しさん
NGNGメソッドがIDispatch*を返す直前にAddRef()してるなら、Release()
する必要があるでしょ。そうじゃなければ必要なし。まともなメソッド
なら普通AddRef()してるはずだが。
0279VBCOM
NGNGで、Cからも呼べるようになりました。
#import "C:\Documents and Settings\hoge\My Documents\MyVB\TestVBCom\TestVBCom.dll" no_namespace named_guids
で、次なんですが、[out, retval] BSTR* retValをCで受ける方法がわかりません。
Public Function View() As String
View = "Hello, Com World!!"
End Function
のタイプライブラリが、
inline _bstr_t _Hello::View ( ) {
BSTR _result;
HRESULT _hr = raw_View(&_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _bstr_t(_result, false);
}
となっていたため、_bstr_tで受けたのですが、
_bstr_t retVal = MyPointer->View;
cout << (char*) retVal << endl;
としても、-1しかかえって来ません。
デバッガで_bstr_tを見たのですが、そもそも("-1", (1))という値しか入ってないです。
これってVB側の問題なのでしょうか、VC側の問題なのでしょうか?
0280デフォルトの名無しさん
NGNG0281デフォルトの名無しさん
NGNGどうすればいいのでしょうか?
プールとリサイクルで呼び出し制限を1にしたのですが、いくらでも呼べてしまいます。
0282デフォルトの名無しさん
NGNG_bstr_t retVal = MyPointer->View();やなくて?
0283VBCOM
NGNGComのメソッドを呼ぶときはView()じゃなくてViewなんだあ、
となぜか勝手に思い込んでました。
ありがとうございました。
0284デフォルトの名無しさん
NGNGこの関数は対象となるVARIANT変数のAllocSysStringで確保したBSTRの開放や
DispatchなどのインタフェースのReleaseまでしてくれるんでしょうか?
0285284
NGNGメモリリークの原因になってしまうのでコワイです。
知ってる人いたらおね害します。
0286284
NGNG0287デフォルトの名無しさん
NGNGこんなとこで聞くのが間違い。
ちなみにおれは知らん。
0288284
NGNGえ?
じゃあどこで聞けば委いいですか?
0289デフォルトの名無しさん
NGNGThe function clears a VARIANTARG by setting the vt field to VT_EMPTY.
The current contents of the VARIANTARG are released first.
If the vt field is VT_BSTR, the string is freed.
If the vt field is VT_DISPATCH, the object is released.
If the vt field has the VT_ARRAY bit set, the array is freed.
0290284
NGNGありがとう。
でも英語なんで正確な意味がわからなかった。
つまり開放してくれるって事ですか?
0291デフォルトの名無しさん
NGNGそーでーす。
0292284
NGNGありがとう。
謎は全て解けた!
きみの様ないいやつが沢山いればこの板も安泰だね!
0293John ◆0z.4Is5E
NGNG確かにOSアップグレードする時に、DLL入れ替えるだけでできるのはいいと思うけど、
他になんかある?
0294デフォルトの名無しさん
NGNGすいません。ありませんでした。(゚∀゚)
0295デフォルトの名無しさん
NGNGIEやExcelが操作できるよ
まあ、そんだけかな。
0296デフォルトの名無しさん
NGNG0297デフォルトの名無しさん
NGNG0298デフォルトの名無しさん
NGNGつまり、ソケットが使えない
あるいはクソ言語しか使えないプログラマーのための
上級プログラマーの配慮という事ですな。
0299デフォルトの名無しさん
NGNGクリティカルな部分はCOMにして信頼できるやつに作らせて、
怪しいプログラマにはCOMクライアントの部分をVBとかでやらせるとか。
0300300
NGNG0301デフォルトの名無しさん
NGNG怪しいプログラマは何使わせても危険。
0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNG0304デフォルトの名無しさん
NGNG0305デフォルトの名無しさん
NGNGWindows壊されるぞ。
0306デフォルトの名無しさん
NGNGまじれすつけておこっと
既存インターフェイスと新規インターフェイスのどちらも持てるところ
じゃないかなあ。
ファンクションコードと ver x 以降使えます。みたいな API よりも
実際に必要なインターフェイスをもっているかどうか。
の方が即物的でイイカンジっしょ。
0307デフォルトの名無しさん
NGNGたぶんソケット云々って言ってるやつにとっては、そんなのソケットでできるじゃん、
ってことになるんだろうけど、ソケットとは思想が違う。ソケットにデータを送るのではなく、
相手のメソッドを呼び出すということ。それがマシン内でもマシン間でも透過的に
できることがメリット。
0308デフォルトの名無しさん
NGNGsocket使って書くのはだるい、ちゅうねん。
0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNGCOMの意味ない知識を詰め込むよりましだと思うが。
というか、COMにして良かったと思った例を教えて欲しいんだが。
俺はバイトなので、仕方なくCOM使ってるけど
COMが便利だと思える場面は経験してない。
まあ、あえて言えばASPしか使えない奴がプログラマーと名乗ってる組織で
仕事する時は便利だな(w
0311デフォルトの名無しさん
NGNGお前はDQN。
0312デフォルトの名無しさん
NGNGじゃぁ、今使っているCOMの機能をすべてsocketで実装してください。
まぁ君が今使っている機能ぐらいなら作れるだろうな、
どうせ関数呼び出し程度しか使ってないだろうから。
それに、バイト君は暇だからいいけど、プログラマはそんな
低レベルな実装を時間をかけてわざわざやらないのだよ。
0313デフォルトの名無しさん
NGNGsocketでは無くCOMにして良かった例
・COMならsocketで書かなくてならない面倒くさい処理を書かなくてすむ
socketで出来ない処理があるかって言うとそれを探すのは難しい。
しかし、問題はそこじゃないんだよ。
問題は今作っているものにどっちがふさわしいかってこと。
C++でやれることは全てアセンブラでも実現可能だろ。
しかしアセンブラを使用することは少ない。その理由と同じさ。
0314デフォルトの名無しさん
NGNGもしかして、COMを使わないで似たようなことやるには
自前でプロセス間通信して〜って話ですか?
0315デフォルトの名無しさん
NGNG涙が出ます
0316デフォルトの名無しさん
NGNG上げてくれる方法が、いまやいろいろ(COM/CORBA/RMIなど)あるっつうのに、
未だにsocketでなんでもやろうとする奴は、究極の車輪再発明野郎だとおもう。
しかもそういう奴は、どういうわけかそのことにプライドを持っている。なんでだ?
0317デフォルトの名無しさん
NGNGネットワーク層やデータリンク層に手を入れられるからでしょ。
0318デフォルトの名無しさん
NGNGCOMじゃなくてDCOMだろ
0319デフォルトの名無しさん
NGNG総称っつーことで
0320デフォルトの名無しさん
NGNG0321デフォルトの名無しさん
NGNGそんな必要があることは、あまりないと思うが…
セキュリティ関係でプレゼンテーション層を変更する必要があることは
多いけど、こういった機構を使っていても、それは可能だしね。
0322デフォルトの名無しさん
NGNG環境変数よりはマシだと思う。っていうかCLASSPATH逝ってよし。
0324デフォルトの名無しさん
NGNGはぁ?
GUIDはむしろ歓迎だろ。
本当にUniversal Uniqueだとしたら
0325デフォルトの名無しさん
NGNG0326鯛焼きクン
NGNG合意がなければ何も作れない。その決め事をフレームワークって
いうかどうかは別としても、おれはその意味をそう捉えている。
COMを使いましょうって決まったのなら、可能な限りその範囲内で
問題を解決しようっていうことだから、もしSocketで十分なものだと
判明しても、間違っているのは最初の合意(COMの採用)であって
COM自体の優劣の話じゃない。
0327デフォルトの名無しさん
NGNGソケットでやっても、COMでやってもかかる時間はそんな変わらんよ。
>しかしアセンブラを使用することは少ない。その理由と同じさ。
ネタ?(w
COMの位置付けが全然わかってないようで・・・・
COMとソケットの関係が,C++とアセンブラだってさ(w
>未だにsocketでなんでもやろうとする奴は、究極の車輪再発明野郎だとおもう。
なぜ?
俺はソケットの方が、短時間でできる例しか知らないから、
ソケットでやった方が優れていると主張してんだけど。
車輪の再発明とかほざく奴は、どういうわけかそのことにコンプレックスを持っている。なんでだ?
>上げてくれる方法が、いまやいろいろ(COM/CORBA/RMIなど)あるっつうのに、
そういう奴に限ってXMLは重いと言う罠
まあJavaだけ使うなら、RMI便利だけどね。
どーせ、おまえらIDLすらよくわかってないんだろ。
で、結局COM使って良かった例は
・ASPしか使えない奴がプログラマーと名乗ってる組織で仕事する時
だけなんだね。
0328デフォルトの名無しさん
NGNG> ソケットでやっても、COMでやってもかかる時間はそんな変わらんよ。
どんなことをやっているのか教えてください。
0329デフォルトの名無しさん
NGNG> ソケットでやっても、COMでやってもかかる時間はそんな変わらんよ。
「時間は変わらん」というだけなら誰でもできるよ。たとえそれがウソでも。
実例をあげなさい。
> COMの位置付けが全然わかってないようで・・・・
> COMとソケットの関係が,C++とアセンブラだってさ(w
あなたの意見は? COMの位置付けを説明してよ。 笑うだけなら誰でもできるからさ。
> 俺はソケットの方が、短時間でできる例しか知らないから、
> ソケットでやった方が優れていると主張してんだけど。
そりゃソケットの方が短時間でできるならソケットを使うよ。
じゃぁソケットで時間がかかるときはどうするの?
ソケットの方が、短時間でできる例しか知らないのね。
> 車輪の再発明とかほざく奴は、どういうわけかそのことにコンプレックスを持っている。なんでだ?
「そのこと」ってどこにかかっているの?
> そういう奴に限ってXMLは重いと言う罠
なんでいきなりXMLが出てくるの。だれもそんなこと言ってないでしょ。反論になってないよ。
> で、結局COM使って良かった例は
> ・ASPしか使えない奴がプログラマーと名乗ってる組織で仕事する時
なんでASPなの? ウソならだれでも言えるからさ、根拠を言いなって。
的外れな意見ばかりだね。もう少し日本語勉強して出直してきなさい。
0330デフォルトの名無しさん
NGNGそういうことだから、教えてくれって言ってるんだよ。
で、短時間でできる例がわかってると認識されてるわけだから、
実例挙げなくてもいいのか?
>なんでいきなりXMLが出てくるの。
逝ってよし
329はえらそうな事言ってる割には、知識乏しいみたいだね(w
実例挙げろ、とか根拠とかさ
結局おまえ何もわかってないだろ。
ASPとVBに訂正して欲しいか?
>的外れな意見ばかりだね。もう少し日本語勉強して出直してきなさい
ストレートに書かなきゃわからん奴は、
´_ゝ`<<ひっこんでろ!!
0331デフォルトの名無しさん
NGNGどうやって広告するんだよ。
固定か?/etc/serviceか?ロケータサービスか?
いずれにしてもおめでてーな。
■ このスレッドは過去ログ倉庫に格納されています