COM の世界を斬る!
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001IUnknown
NGNG0002デフォルトの名無しさん
NGNGやはりその回数だけ参照カウンタはインクリメントするものですか?
0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNGIOleObject, IDataObject, IPersistStorage などを使ってコードで書いた
ことがある人いますか?実際のところどのように実現するのか気になるので
知っている人がいたら教えてほしいです。参考サイトや参考書籍でも構いません。
よろしくお願いします。
0005>4
NGNG00064
NGNGすみませんが、参考書籍名など教えていただけないでしょうか。
自分ではそれなりに探したのですが店頭にある書籍には
出ていないもので、タイトルがわかれば注文するつもりです。
0007VB使い
NGNG00085>6
NGNGとりあえず図書館逝っときなさい。
0009デフォルト
NGNGなるのはわかるんだけどインプロセスサーバだったらクライアントの終了時
に解放されるような気がする。間違ってるかなぁ。
0010デフォルトの名無しさん
NGNG実行時バインディングしかできないんなら意味がないように
思えるんだけど。
0011デフォルトの名無しさん
NGNGFAQだな
(1) wshon.ocx の WshShortcut オブジェクトを使う
(2) shell32.dll の ShellLinkObject オブジェクトを使う
(3) IShellLink のタイプライブラリを参照設定してカスタムインターフェイスを使う
0012VB使い
NGNGコード紹介してくれませんか???
0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNGhttp://www.users.gr.jp/ml/archive/vb/
0015初心者
NGNG具体的にどういった不具合が発生しますか?
0016恥ずかしながらいままで知らなかった
NGNGorg 100h
のcomじゃないのね。。。<com
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG私にできるのは CComPtr を使って COMオブジェクトを利用することぐらい。
下のような話を読んでもイベントを捕まえる方法がさっぱり理解できません(泣
http://www.s34.co.jp/cpptechdoc/misc/comevent/#intro
こんな難しいモンを将来標準にされると辛すぎます。っつーのが私の感想です。
0019デフォルトの名無しさん
NGNGそういるもんじゃない。まあ難しいことはわからなくても使えるようにす
るためのもんだしな。この手の掲示板ではさすがにレベルが高すぎるんじゃないか?
おれも良くわかんねーし、つーか俺が馬鹿なだけか???
0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNGCOM初期化
CoInitialize(NULL);
って、普通はこまめには呼ばないって聞いたんですけど、
どういう時に呼べばいいのでしょ。
ご存知のかた教えてください。
(こむちょー初心者質問でスマソ)
0022デフォルトの名無しさん
NGNGプログラムの一番最初
0023デフォルトの名無しさん
NGNG良く使われてるテクとは思うが,俺は
class CComPermission
{
public:
CComPermission( void ){ ::CoInitialize( NULL ); }
~CComPermission( void ){ ::CoUninitialize(); }
};
みたいなクラス作って WinMain() のローカル変数として置いてる.
余談だが同じ要領で ::timeBeginPeriod() と ::timeEndPeriod()
も組にしてる.
0024デフォルトの名無しさん
NGNGとすると IShellLinkが使えないんだけど、
どうしようもないの?
コレでやらないとIWMWriterが使えないのよね。
0025デフォルトの名無しさん
NGNGCOMって結局のところはC言語のAPIのように呼び出しているのですよね?
C++はあくまでラッパーですよね?
0026デフォルトの名無しさん
NGNGどう答えて良いかわからないけど、
COMに言語の違いは関係ない。
COMオブジェクトからみれば、クライアントの記述言語が
Cだろうが、C++だろうが、Pythonだろうが、Rubyだろうが差異はない。
COMに対する理解が大きく間違っている(or 足りない)と思われる。
002726
NGNG002827
NGNG0029阿呆井
NGNG君の発言には痺れたぜ。君のラッパから音が出ることはないだろう。
003025
NGNGDCOMが基本的にOS透過だって事くらいは知ってる。
要はDLLの関数として直接Cから呼べるのかな、と思って聞いたの。
でも、確かに意味のない質問でした。-_-
0031デフォルトの名無しさん
NGNGスレッド、プロセスの終了前に呼び出しを忘れると、リソースの回収が遅れます。
>>21
そのメソッドは古いメソッドなので、CoInitializeExを使用してください。
実際には、CoInitializeはCoInitializeExをCOINT_APARTMENTTHREADEDを指定して
呼び出しています。
このメソッドは、スレッドに新しいアパートを割り当てるときに呼びます。
プロセス規模のMTAに入らない場合、つまり、STAの場合、各スレッドごとに
このメソッドを呼ぶ必要があります。
従って、CoInitializeはMTAではなくSTAへ飛び込むので、各スレッドごとに呼び出す
必要があります。
0032デフォルトの名無しさん
NGNG呼べない。
Cからだろうと、C++からだろうと、オブジェクトを生成して、vtableへのポインタを
とらないと、メソッドは呼べない。
0033け
NGNGあ、俺スクリプト作って持ってる。
趣味でPerlだけど(w
えい、コピペ。
use strict;
use OLE;
# -------------------- OLEオブジェクトの取得
my $Shell = OLE::new( 'Shell.Application', 'Quit' ); # Shell Automation Service
# -------------------- 設定値
my $Viewer = "EXPLORER.EXE"; # ファイラ
my $Arguments = "/e,/n,"; # ファイラのオプション
# -------------------- 対象フォルダ
my $Path = $Shell->NameSpace($ARGV[0])->Items->Item()->Path;
$Arguments = $Arguments . "\"$Path\"";
# -------------------- 作成先フォルダ
my $ShortcutPlace;
if (defined($ENV{'SHORTCUTFOLDER'})) {
$ShortcutPlace = $ENV{'SHORTCUTFOLDER'}; # ショートカットを作成するフォルダ
# ("C:\\Temp"などの形式でも可)
} else {
my $ssfSTARTMENU = 11; # SpecialFolder : スタートメニュー
$ShortcutPlace = $ssfSTARTMENU; # ショートカットを作成するフォルダ
}
my $Items = $Shell->NameSpace($ShortcutPlace)->Items;
$ShortcutPlace = $Items->Item()->Path;
# -------------------- ショートカット名
my $ShortcutName = $Path; # 対象フォルダ
$ShortcutName =~ s/[\\]*$//; # 後ろの\の除去
$ShortcutName =~ s/[^\\]*[\\]//g; # フォルダのパスの除去
$ShortcutName = "$ShortcutName.lnk";
my $ShortcutFileName = $ShortcutPlace . "\\" . $ShortcutName;
# -------------------- ショートカット作成
my $ShellLinkObject;
if (-e $ShortcutFileName) {
$ShellLinkObject = $Items->Item($ShortcutName)->GetLink;
print "Shortcut File:\n\"$ShortcutFileName\"\n\n";
print "Path\t\t : \"$ShellLinkObject->{'Path'}\"\n\t\t-> \"$Viewer\"\n\n";
print "Arguments\t : \"$ShellLinkObject->{'Arguments'}\"\n\t\t-> \"" . $Arguments . "\"\n\n";
print "Description\t : \"$ShellLinkObject->{'Description'}\"\n\t\t-> \"" . $Path . "\"\n\n";
print "WorkingDirectory : \"$ShellLinkObject->{'WorkingDirectory'}\"\n\t\t-> \"" . $Path . "\"\n\n";
print "OVERWRITE ? [yn] ";
my $Yn;
chop($Yn = <STDIN>);
if ($Yn ne "y") {
$ShellLinkObject->Release;
$Items->Release;
$Shell->Release;
exit;
}
} else {
# 何らかのファイルが無いとGetLinkが失敗
open(LF,">" . $ShortcutFileName);
close(LF);
$ShellLinkObject = $Items->Item($ShortcutName)->GetLink;
}
# -------------------- 設定
$ShellLinkObject->SetIconLocation( $Viewer, 0 );
$ShellLinkObject->{'Path'} = $Viewer;
$ShellLinkObject->{'Arguments'} = $Arguments;
$ShellLinkObject->{'Description'} = $Path;
$ShellLinkObject->{'WorkingDirectory'} = $Path;
# -------------------- セーブ
$ShellLinkObject->Save;
$Shell->RefreshMenu(); # 不要?
# -------------------- OLEオブジェクトの解放
$ShellLinkObject->Release;
$Items->Release;
$Shell->Release;
exit;
ついでに添削して。(w
0034デフォルトの名無しさん
NGNG根本的な部分を理解していないですね。
COMはCOMに対応している言語から呼び出すことができますが、それは、
OSのCOMサポートを通しているからです。WindowではDLLの機構をOSが
利用してCOMを構築しているので、DLLファイルにCOMオブジェクトが
格納されていますが、COM==DLLというわけではありません。
ですから、DLLから呼び出せるという時点でナンセンスです。EXEのCOM
だってあるじゃないですか。このくらいは、COMの初心者用の本で必ず
最初の数ページで説明されているので、そこを読むことをお勧めします。
0035け
NGNGhttp://www.activeware.com/
ね。
003629
NGNGを仕事で作ったりしているが、CORBAはさっぱりだ。
JAVA屋から見れば俺もアホだね。謝るよ。
0037デフォルトの名無しさん
NGNGいろんな言葉を次々にだしてくるから困る。
そのうえに説明が複雑怪奇、もっと簡単に説明してくれないのかな。
MSDNでCOMを検索しても、適当なものを見つけれない。
たぶん、物凄く新しいアイデアで製品を作ってるぞという、ハッタリ
をかましてるのだとおもう。
COMに開発言語からの独立とかいうあるけど、大抵の開発言語が他の
開発言語とリンクするための情報を、すぐに探しだせる状態で公開し
てたので、そんなに騒ぐことではなかったのだが、最近は、それを
見つけるのも苦労する。
ところでCOMの初心者用の本てどんなのありますか。
googleではCOMを検索してくれない困ったもんだ。
0038デフォルトの名無しさん
NGNG0039トリッキーの1
NGNGEssential COMの第1章は概念理解にとても便利です。
ATL プログラミング(だっけ?)でVisual C++のコンパイラサポートを覚えました。
Inside COMもいい本ですが、初心者には辛いでしょう。
こんな所でどうでしょうか?
便乗質問。
CORBAについていい本(もしくはサイト)ありませんか?
0040デフォルトの名無しさん
NGNGだれも「DLLから呼び出せるか」なんて聞いてません。
そのCOMの仲介をするコードがDLL中に入っているのか?
と聞いているのです。
でももうこの質問はどうでもいいです。
0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNGTypeLibのことを言ってるのかな?
いずれにしても、
>>30
根本的な部分を理解していないですね。
0043デフォルトの名無しさん
NGNG書籍はこの辺でどうよ。
http://www.amazon.co.jp/exec/obidos/search-handle-form/249-5193886-0877137
004443
NGNG「CORBA」で検索。
http://www.amazon.co.jp/
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGレッツゴ−以下のサイト。
http://www.microsoft.com/japan/developer/thisweek/combasics/combasics1.asp
0048デフォルトの名無しさん
NGNG0049デフォルトの名無しさん
NGNGdelphiやVBで読み込めるタイプライブラリってなんなの?
タイプライブラリ自体がなんなのか、、、
本来は何のために存在しているのか
0050デフォルトの名無しさん
NGNGバイナリレベルでクラスを流用するため。ヘッダファイルみたいなもん。
Iriaのタイプライブラリを使えば、小さなVBプログラムからでも
Iriaの強力なダウンロード機能を使える。
バイナリレベルで互換性があれば、個々のコンポーネントは
C++でとことんチューニングして、あとで、C#あたりでくっつける
ってことが簡単にできる。
COM無しでは、ソースがないとできないけど(.objとヘッダでできるかも)
COMなら、コンポーネントが収められたファイル(.exe、.dllなど)が
あれば、コンポーネントの流用ができる。
0051デフォルトの名無しさん
NGNGの情報が入っていて、OSが利用するものと思えば良いですか?
0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNGクラスの詳細な記述が含まれたリソースである
0054デフォルトの名無しさん
NGNGC?
0055デフォルトの名無しさん
NGNG拡張子.idlのファイルを作り、IDLコンパイラ(MIDL)でコンパイル
するとできます。Cの宣言だけでは情報が足りないのです。
0056け
NGNGすでにあるCOMオブジェクトから抽出するのは、MSのフリーウェアの
OLEViewが便利。
0057uuid
NGNGVBでコンテナ(フォーム)に貼り付ける方法はありますでしょうか?
CLSID を直接指定してHTMLのOBJECTタグでは表示されるが
VBのコントロールの追加には出てこないコンポーネントのことです。
0058uuid
NGNGIDL と midl
どういった点で差異がありますでしょうか?
005924
NGNG0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGATLのウイザードで最初に作られる.idlファイルを
真似て作ったものなのですがタイプライブラリが出来ません。
どうしたらよいのでしょうか。
VC&MIDL使用
MIDLの設定でMkTyplib互換のチェックをはずした状態(エラーになるので)
以下IDLファイル内容です。
import "oaidl.idl";
[
object,
uuid(適当なUUID),
helpstring("HogeHogeInterface"),
pointer_default(unique)
]
interface IHogeHoget : IClassFactory
{
};
[
uuid(適当なUUID),
helpstring("HogeHogeTyupLib")
]
library HogeHogeLib
{
importlib ("stdole32.tlb");
[
uuid(適当なUUID),
helpstring("HogeHogeClass")
]
coclass HogeHoge
{
[default] interface IHogeHoge;
};
};
006362
NGNGお騒がせしてすみません。
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNG_COM_SMARTPTR_TYPEDEF(ISMCcom , __uuidof(ISMCcom));
こんなスマートポインタを使って
CoInitialize(NULL);
ISMCcomPtr pSmc;
hResult = pSmc.CreateInstance("SMC.SMCcom");
で呼び出すわけです。が、CreateInstance("SMC.SMCcom");
の’SMC’の部分、どこで決定する文字列なんでしょうか?
ライブラリ名はSMCLibなんですが・・・。
0066デフォルトの名無しさん
NGNGレジストリのProgID見れ
0067デフォルトの名無しさん
NGNGやっとわかりました。Thanks.立て続けの質問で恐縮なのですが
これってレジストリエディタを使わなければ判明しない文字列ですか?
で、ProgIDの"SQLOLEDB"と"SQLOLEDB.1"って何の意味があって
.1が末尾に付与されてるですか?(無論どちらでも動作はします。)
0068デフォルトの名無しさん
NGNG当たらずとも遠からずだが、実際にはもうちょっと複雑。深入りしたければ、
Essential COM と Inside OLE 読みなよ。
0069デフォルトの名無しさん
NGNGOLEViewでもおっけー。
末尾の数字は、バージョン番号だね。
0070中級ぐらい?
NGNG売ってんのみかけたことねえぞ!神田探しまくったけどないし。
君らはいつどこで手に入れた?それとも図書館?会社?学校?
気になるよー!
0071デフォルトの名無しさん
NGNGKraig Brockschmidt (著), エー・ピー・ラボ (翻訳), 長尾 高弘 (翻訳)
単行本 - 1183 p / 改訂新 版 (1996/12/01)
アスキー ; ISBN: 4756116183 ; サイズ(cm): 26
0072デフォルトの名無しさん
NGNG.1(バージョン番号)がつかないのは version independent ProgID。
最新版を使いたいときは、これで参照する。
互換性がないかも〜、とかの理由でバージョン番号まで指定したい
ときには、バージョン付の ProgID を使う。
こうして、異なるバージョンの COM オブジェクトが単一のシステム
上で共存できる。
0073デフォルトの名無しさん
NGNG先月、秋葉の書泉ブックタワーで売ってるのを見かけたぞ。
0074中級ぐらいです
NGNGInside COM じゃなくて?
んじゃ、飛行機乗って行ってみっかな。
交通費が往復6万ぐらいしそうだ。
0075デフォルトの名無しさん
NGNGイヒヒ!おれ今日かっちゃた!
0076デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNGamazonでも品切れなのに......。
0078デフォルトの名無しさん
NGNGメッセージなのか?ワラ
0079デフォルトの名無しさん
NGNG0080名無しさん
NGNG氏ね。
0081デフォルトの名無しさん
NGNG関東近辺での発見情報求む
0082このスレ初書き込みの人
NGNG先週秋葉原の書泉ブックタワーは売り切れだったので
そのままLaox(?)の一階にある本屋に行ったら売ってたよ。
・・・
・・・
・・・
・・・
・・・・・・・・・・漏れが買ったから在庫あるか知らないけど。(^^;)
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNGくれ
0085デフォルトの名無しさん
NGNG良いよ
0087デフォルトの名無しさん
NGNGあんなのWindows上でしかやれないじゃん。
全てをCOMでやる時代は終わったけど、
まだまたCOMコンポーネントは作る必要が
あるね。
008881
NGNGいくらでした?
008982
NGNG値段は高いけど1000ページ以上(電話帳並)あるし妥当な価格だと思う。
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNGじゃなくてコピーして!!!
009281
NGNG持っているんでしょうね。
COMを勉強したい私にとってはうらやましい限りです。
0093名無しさん@お腹いっぱい
NGNG漏れにくれ!
0094デフォルトの名無しさん
NGNG仮に一頁をコピーするのに20円かかるとすると
1184*20=23680円かかるんですけど。
0095名無しさん@お腹いっぱい
NGNGしてして、広げて待ってるから〜♪
009681
NGNG配布しているところないですか?
>>94
仮に一頁をコピーするのに10秒かかるとすると
(ページめくってセットする時間含む)
1184*10/60=約200分かかるんですけど。
こっちのほうがやばくない?
0097デフォルトの名無しさん
NGNG昨日秋葉原Laox逝って来た。
InsideOLEあった。見本まであった。
買おうとおもーたけど、金なかった・・・涙
教会に行く。でもあそこまだまだ沢山ありそうなので、
遠くて行けそうもない人も問い合わせてみる価値ありそう。
店頭に一冊しかなかったけどまだまだあるよ多分。
LaoxがInsideOLEを隠してるの間違いなし(ワラ
今日青いシャツでInside・・・買ってるのがいたらそれ俺だから
よろしくv(゚9゚)
0098デフォルトの名無しさん
NGNGおれんとこは3年くらい前に買ったな〜。
1年くらい前は MSDN に収録されてたね〜。英語だけど。
009998
NGNGCOM そのものを勉強したいなら Inside COM とか
Inside DCOM あたりがよいのでは?
Inside OLE にも COM そのものの解説は載ってるけど、
ActiveXドキュメント、オートメーション、ActiveXコントロールといった
OLE 固有の技術にかなりのページを割いているので、ちょい無駄かも。
010098
NGNG今見てきたら、US の MSDN ライブラリのサイトでは
Inside OLE(英語)がまだ公開されてるみたい。
http://msdn.microsoft.com/library/default.asp
0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNG010582
NGNG秋葉原Laoxはまだまだ隠し持ってる説高いですね。
だって自分が買ったの、初版(InsideOLE2 -> InsideOLEの初版ね)でしたから・・・
大昔に大量に仕入れて大量に在庫抱えてるのかな(^^;)
0106名無しさん@お腹いっぱい
NGNG0107197
NGNGMFCオートメーションでイベントをクライアント側に返したい
時はどうすれば良いのでしょうか。よろしくお願いします。
0108デフォルトの名無しさん
NGNGOLEオートメーションのこと?
イベント?をクライアント側に返したい?
もうちょっと説明しないとわかんないなあ。
0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNG自分で書きます。
適当に OCX でイベントを持つものを一個作って、Fire したときの動作を
デバッガで追っかければ、どんなことしなきゃいけないのかだいたいわかると
思います。
0111107
NGNG勉強します。
しかしATLはこの機能を包んで提供してますが、MFCはないですね。
なんででしょう?
0112デフォルトの名無しさん
NGNG0113むずい
NGNGつくってんだけど、もーうんざり。
COMに詳しい人、どうやってマスターしたんですか?
経験談、苦労話、アドバイス等お願いします。
0114デフォルトの名無しさん
NGNGIConnectionPointContainer
IConnectionPoint
あたりの事?
0115デフォルトの名無しさん
NGNG氏氏氏氏氏氏氏氏氏氏氏氏氏。げろげろ。
0116デフォルトの名無しさん
NGNGソース読む
0117むずい
NGNGそうです。
特にクライアント側。
0118デフォルトの名無しさん
NGNG1.オブジェクトにIConnectionPointContainerをQueryInterfaceする。
2.IConnectionPointContainer::FindConnectionPoint(自分が持っている通知インタフェースのIIDまたはDIID, &IConnectionPointへのポインタ)
3.IConnectionPoint::Advise(自分が持っている通知インタフェース)
これで、通知されるようになります。
0119初心者A
NGNGCoCreateInstanceの引数にIID_IUnknownを指定してこのポインタから
指定インターフェイスを QueryInterface()するのと CoCreateInstance() の引数に
直接指定インターフェイスを指定するのでは異なりますか?
大抵の参考書では前者のようにIUnknown経由になるようですが直接指定した方が
早いとかそういうのありません?
0120デフォルトの名無しさん
NGNGだからこそ、CoCreateInstanceExでは一気に複数のインターフェイスを取れるようにしてあるんだ。
つーわけで、たいていの参考書はバカ。
0121デフォルトの名無しさん
NGNG0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNG最初から、例えばIPersistentStreamInit欲しいとかわかってたら、IUnknown使う必要なし。
(32bitアプリだとどちらもUnicodeへのポインタ)
そうだとしたら何故複数あるのでしょう。使い分けでもあるのでしょうか?
0125デフォルトの名無しさん
NGNGOLECHAR wch; // *付けんな
OPOLESTR pwsz; // ポインタだよ
元は、16BitOLEと32BitOLEのソース共用のための定義。
別に、LPWSTRつかおうが、wchar_t*つかおうが、ドーデも良い。
0126デフォルトの名無しさん
NGNGOracle 用文字列じゃなくて、LPOLESTRの書き間違いだ。
0127素人
NGNGSAFEARRAYCREATEで作成したSAFEARRAYって、SafwArrayDestroyで開放しなくても
メモリーリーク起こさないん?
0129素人
NGNGOS勝手に開放とかしてくれないんですか?
感謝
0130age
NGNG0131age
NGNG0132age
NGNGクライアント自体が終了すればメモリは解放されると思いますけど。
COMにはガーベッジコレクタみたいなものはありませんね。
ちょっと補足
SafeArrayDestroyは自身の破棄だけでなく配列内に確保されている
オブジェクトのReleaseもすべて行います(もちろんBSTRの解放も)。
必要に応じてSafeArrayDestroyData、SafeArrayDestroyDescriptor
を使い分けるのもよいでしょう。前者は要素データの解放のみ、
後者はデスクリプタの破棄のみ行います。
SafeArrayDestroy = SafaArrayDestroyData + SafeArrayDestroyDescriptor
といったところでしょうか。
0134素入
NGNGDISPATCH_PROPERTYPUTREFが良くわからないのですが
これはプロパティの設定時にオブジェクトの参照を代入するときに指定するのですか?
このときのバリアントはVTがVT_DISPATCHでいいですか?
それともVT_DISPATCH | VT_BYREFも必要ですか?
あるバリアントのプロパティでオブジェクトの参照を代入するときに
DISPATCH_PROPERTYPUTではインプロセスサーバは渡せたのですが
アウトプロセスサーバだとバリアントの内部形式変換が発生して
VT_BSTRで渡されてしまいました。だからアウトプロセスサーバの
オブジェクトの参照を渡すときには特殊な方法が必要なのかなと思って・・・
0135デフォルトの名無しさん
NGNG->late-bound language
最初スペルミスかと思ったら英語ではレイトバウンドというのね
どこからバインディングになったんでしょうね
知っている人がいたら教えてね
0136デフォルトの名無しさん
NGNG英語でもlate-bindingはlate-bindingだ。
late-binding == 実行時バインドする
late-bound == 実行時バインドされる
0137デフォルトの名無しさん
NGNGでも闇雲にVariantCopyInd使ってると、メモリーリークする?
0138135
NGNG辞書見ました。
私が英語に無知なだけでした。
御免。
0139デフォルトの名無しさん
NGNGそれはあるでしょうね。IDispatch::Invokeの実装内の引数処理とか
VT_BYREF立ててはいけない場合もあるから。
>でも闇雲にVariantCopyInd使ってると、メモリーリークする?
そんなことはないと思いますよ。VT_BYREFの処理方法が違うだけで
どちらも元のバリアントを解放(VariantClearと同処理)して新たに作るだけだからね。
オブジェクトの参照もクリア時にデクリメントされコピー生成時にインクリメントされます。
0140137
NGNG気にしてんのは、VT_BYREFなオブジェクト渡したほうの意図が読めないからなんだ。
BSTR bstr;
Variant v;
v.pbstr = &bstr;
v.vt = VT_BYREF|VT_BSTR;
foo->call(v); // foo は、v保存するならVariantCopyじゃなくてInd呼べ
SysFreeString(bstr);
てな感じなら、リークするはずないわけだけど、なんで呼び出し側はわざわざ
VT_BYREF立てて来てんだ? てのが呼ばれるこっちには理解できないからなわけ。
(もちろん、上のcallってのが[in,out]なら理解できるわけだけど、しょせん
[in]variantなわけだから)
0141石川五右衛門
NGNG何か問題でもあるのでしょうか?
0142デフォルトの名無しさん
NGNG0143デフォルトの名無しさん
NGNG0144デフォルトの名無しさん
NGNGCOMの利点はどんな言語からでも使えることだと思いますが,
Windows以外のプラットフォームでも実行(利用?)できるのでしょうか?
0145デフォルトの名無しさん
NGNG>Windows以外のプラットフォームでも実行
以前はそんな話もあったけど事実上無かったことになってるはず。
バイナリレベルでインターフェイスを統一するのは難しいし、肝心のマイクロ
ソフト自身もCOMのめんどくささにさじを投げて、インプリメントが楽そうな
SOAPで通信する.NETに方針転換したんでないかな。
0146デフォルトの名無しさん
NGNGオブジェクト側で参照カウントをロックしていてクライアントからは
明示的に解放することが出来ないという理解も可能ですか?
0147デフォルトの名無しさん
NGNGクライアントがReleaseによって行っているのは、オブジェクトの解放ではなく、
いまそのクライアントが持ってる "参照の解放" ではないかな。
あと、参照数は取得できなかったと思うけど。
0148デフォルトの名無しさん
NGNGCOMそのものの仕組みは単純なんだけど、まともに利用しようとするなら、
その周辺まで用意する必要があります。これがまた大変。
モジラには、XPCOMという名前で採用されてます。これですべてではないですが、
Windows以外での最も大きなCOM(+周辺)の実装だと思います。
プロセスやネットやをまたごうとすると、COMではきついです。
結局 .NET ではCOMは表にでてこなくなってしまいました。
無くなったわけではないですけど。むしろ覆い隠したというべきか・・・
0149デフォルトの名無しさん
NGNGWindows以外での最も大きなCOM(+周辺)の実装だと思います。
Bristol TechnologyがMSからソースライセンスを受けて各社Unixに
COMを移植していたと思うんですが。
>プロセスやネットやをまたごうとすると、COMではきついです。
プロセス間通信は別に問題ないのではないですか?
DCOMは確かに付け焼刃的印象がありますが、元々(L)RPCで通信を
行っていたのでCOM->DCOMの拡張はそれほど苦労していないのでは
ないかと思います。
>結局 .NET ではCOMは表にでてこなくなってしまいました。
>無くなったわけではないですけど。むしろ覆い隠したというべきか・・・
COMやCORBAのようなレイヤが「見えなく」なるのは正しい方向だと
思います。
0150デフォルトの名無しさん
NGNGオブジェクト側で参照カウントをロックしていてクライアントからは
明示的に解放することが出来ないという理解も可能ですか?
どのタイミングで実際の解放を行うかはオブジェクトが決定する
ので、クライアントから明示的に解放できない場合もあるし、
ExcelのApplicationオブジェクトのように、Release以外の方法で
解放する場合もあるでしょう。
0151デフォルトの名無しさん
NGNGもじらの XPCOM って普通の COM と同じようにコンポーネント
(やインターフェース)の指定に GUID やレジストリ使ってるん
でしょか? でも Win 以外の OS にもインプリメントしてん
だよね。ひょっとして COM を格納したファイルパスを直接指定
してる?
それと .NET でも「もはや GUID は使わない」とか言ってるよう
だけど、GUID 無しでどうやって COM を決定するんだろう。
代わりに Java のパッケージみたく URL ライクな指定になって
るんですかね?
0152デフォルトの名無しさん
NGNGGUIDは使ってるがレジストリは使ってない。Windows以外にはレジストリ
がないから、レジストリ相当のファイルをひとつ用意して代用してます。
そのファイルの操作にregxpcomってコマンド(など)を使う。
ドトネトは知らないのでパス。
0154152
NGNGレジストリと同程度にこわれやすいよ(笑
0155151
NGNGむぎゅ。
てことはやはりテキストファイルじゃないのね。
でもま、こわれても影響範囲が狭いから安心感が違うかも。
COM の開発してるとテスト用のエントリでいつの間にかレジストリが
ゴミ溜めと化すのが鬱になるんだけど、それがないだけでも好感持てる。
0156デフォルトの名無しさん
NGNGインプロセスサーバの場合は問題なく渡せるのですが
アウトプロセスサーバだとVT_EMPTYになってしまいます。
何か変換処理が必要なのでしょうか?
マーシャリング絡みだとは思うのですが、何をどうすればよいか
よくわからないんです。
0157デフォルトの名無しさん
NGNG見つけられるようにすりゃいいんじゃないの?
0158デフォルトの名無しさん
NGNGメソッドは IDispatchEx::InvokeEx() を使って呼び出します。
オブジェクトは二つのメソッドを持っており、あるプロパティを
操作する対になっています (propget, propput)。
プロパティは VT_DISPATCH の VARIANT です。
簡単に言うとオブジェクトの参照を設定/取得するプロパティです。
このときにクライアントからオブジェクトへプロパティをセット
しようとするとサーバ形態により失敗してしまいます。
渡そうとしているインターフェイスポインタは IDispatch で CoCreateInstance()
しています。故にオブジェクトのデフォルトインターフェイスです。
このオブジェクトの実装サーバがアウトプロセスの場合、
正常に渡すことが出来ません。インプロセスサーバだと問題なく
ポインタを渡せるのでマーシャリング絡みかなと思ったしだいです。
DispEx.h なんかを眺めていたら IDispatchEx_InvokeEx_Proxy や
IDispatchEx_InvokeEx_Stub なるものも出てきて InvokeEx の使い方が
間違っているのかなと思ったり。
0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNGここで聞いちゃいかん!
0161デフォルトの名無しさん
NGNG0162145
NGNG>結局 .NET ではCOMは表にでてこなくなってしまいました。
>無くなったわけではないですけど。むしろ覆い隠したというべきか・・・
COMが表に出なくなったと言うより.NETではCOMのサポートはおまけ的扱いで、
COMラッパを通してしか使えないんだからCLR環境から見れば単なるライブラリ
でしか無いでしょ?
そんで、RPC(広義)が全部SOAP経由になったらCOMの出る幕は無くなるんでな
いの?
そもそもCLRや下位のCLIにはCOMの存在は前提条件でなかったはず。
Windows環境ではたまたまベースレイヤがCOMだというだけで。
0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNG既存のシステムに部分的導入をしてもらうためには、COMサポートは必須かと。
そのへんをハキチガエないのがMSっぽいところかな。Sunと違って(藁)
0165デフォルトの名無しさん
NGNGEventSinkってどう実装すれば良いんでしょうか?
「新しいウィンドウを開く」のイベントを処理したいんですけど。
MSDN見ながら適当にやって、クライアント領域に
IEを貼り付けることは出来ました。
あと、MFCとかは使わないでC++でやってます。
このスレに既出のInsideOLEとかは本屋で探したけどありませんでした。
0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNG2、IEのコネクションポイント(DIID_WebBrowserEvent2?)
にそれをくっつける(Advise)
3、IEがInvokeとか読んでくる。
■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■■■■ ■■■■■■
■ ■■■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■■■■
■ ■ ■ ■ ■ ■
■ ■■■■■ ■ ■ ■
■ ■ ■ ■ ■ ■
0169デフォルトの名無しさん
NGNGhttp://www.e-itabashi.org/
0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNGだーかーらー、秋葉のLaoxだって。
おれなんていつも立ち読みしてすましてるw金ないもんで、、
0175デフォルトの名無しさん
NGNG.NETのせいで出版計画も頓挫したとか言わないで、
ちゃんと書き上げてくれ〜!
それともタイミングをXP以降に伸ばしたとかかな?
とにかく楽しみに待ってるよ。>Eddon
>>173
InsideOLEにはInsideCOM+に書いてないこととか載ってるのかな?
0176デフォルトの名無しさん
01/08/27 09:59ID:pvQjaL1c行ったんだけど見つからなかったんだよ!
COM関連は右の入り口から入って直ぐあたりだよね?
0177てんさいぷろぐらむぁ(偽) ◆8Fck5JHo
01/08/27 21:25ID:D2JQQVP6昨日秋葉原Laoxに別件で行ったけどありましたよー InsideOLE
見本と売り物と二つ。
プログラム言語のコーナー(?)の一番手前あたりの最上段です。
0178デフォルトの名無しさん
NGNG0179コム爺さん
NGNGCoTaskMemAlloc() で確保されたものなのでしょうか?
(確保するべきものなのでしょうか?)
0180コム婆さん
NGNGBSTR SysAllocString(OLECHAR FAR* sz);
BSTR SysAllocStringByteLen(char FAR* psz, unsigned int len);
BSTR SysAllocStringLen(OLECHAR FAR* pch, unsigned int cch);
のいずれか。
純粋に割り当てという事であればSysAllocStringByteLen(NULL, len)か
SysAllocStringLen(NULL, cch) lenとcchは違うからね。
普通は、SysAllocString("HogeHoge"L)だろ。
実態はタスクメモリアロケータかもしれんが、BSTR先頭の手前に確保したサイズが
入っていて、BSTR操作の際にサイズチェックが行えると思った。
0181デフォルトの名無しさん
NGNGエクスプローラーとかで右クリックした時に表示される
コンテキストメニューにメニューを追加するだけでも
未だに分からんもん
0182デフォルトの名無しさん
NGNG「膨大なライブラリから、適切なAPIを見つけだし、利用する」
「適切なサンプルをみつける」
が難しい、ということでは?
別に、COMだから難しいわけではないかと
0183デフォルトの名無しさん
NGNGそのインターフェイスが持つメソッドやら引数やらを知る方法はありませんか?
レジストリにも登録されておらず、Webにも書籍でもドキュメントが見当たらず、
IDispatchもITypeLibもQueryInterfaceできない、素のポインタを渡された場合です。
0184デフォルトの名無しさん
NGNG逆汗しろYO!
0185デフォルトの名無しさん
NGNG>>183は
"IDispatch ITypeLib" "が" "QueryInterface出来ない" という意味でわないかと。
つまりQueryInterface自体は使えるのでわないかと。
タイプライブラリが無いならどーしよーも無いような気がします。
タイプライブラリはdllやexe本体に含まれる場合が多いですが、
タイプライブラリだけ別に置く場合もあります。
もう一度レジストリを追って見るのが吉。
それでもだめならやっぱり逆汗しかないかも・・・?
0186コム爺さん
NGNGBSTRがどのようなデータ構造をしているかは勿論知っていますが
COM API の中には関数側で LPOLESTR を確保して
呼び出し側で CoTaskMemFree() で解放するようにと要求するものが
あります。 CoTaskMemFree() は IMalloc::Free() をラップしている
関数と思われるので 179 のように訊いた次第です。
0187IUnknown
NGNGまず疑問。正体不明のインターフェイスが何故レジストリに登録されていないか
わかるのでしょうか?登録されていないとわかるためにはインターフェイスIDを知らな
ければなりません。何か勘違いしているのかな?
IDispatch が実装されていなければディスパッチインターフェイスでもデュアルインター
フェイスでもないですからカスタムインターフェイス。ということはタイプライブラリは
まず無いでしょうね(ちなみに普通はいきなり QueryInterface で ITypeLib は取得でき
ませんよ。これらが実装されるオブジェクトは元のオブジェクトとは別物だからです。
専用のAPIを使うかIDispatch経由で取得しましょう)。
正直言って何の資料もなしにカスタムインターフェイスの仕様を知るのはほぼ不可能です。
オブジェクトは全てのインターフェイスを公開する必要はありませんし開発者だけが知り
うる隠しインターフェイスも結構あったりします。
では何も出来ないかというとそうでもありません。あまり期待してもらっては困るのですが
次に示す方法でオブジェクトの機能をある程度調べることが出来ます。
私は何らかのメソッドが返す未知のインターフェイスポインタを取得した場合には
オブジェクトがどのようなインターフェイスを公開しているか確認します。
まずレジストリの Interface キーにアクセスしてサブキーを列挙します。サブキー名は
IIDですからこれをIID構造体に変換して全て QueryInterface させます。インターフェイス
名はサブキーの値のデータになっていますから簡単に取得できるでしょう。
実装されていればポインタが返りますからインターフェイス名をチェックしておきましょう。
あと Release することを忘れずに。
これで少なくともどのようなインターフェイスが公開されているかを知ることが出来ます。
実装されているインターフェイス名に標準的なインターフェイス以外を発見したら
しめたものです。このインターフェイス名を手掛りに色々と調べれば何かわかるかもしれません。
COM / OLE のごく一般的なインターフェイスしか公開されていなければちょっと手は出ませんね。
0188183
NGNG>>184,185
>"IDispatch ITypeLib" "が" "QueryInterface出来ない" という意味でわないかと。
そういう事です。読みにくい文章で申し訳ありませんでした。
>>187
>まず疑問。正体不明のインターフェイスが何故レジストリに登録されていないか
>わかるのでしょうか?
今回の件では、コンテナとサーバの関係にあるふたつのCOMオブジェクトのサーバ側を実装すると、
コンテナ側からその不明なインターフェイスがQueryInterfaceされてくる次第です。
それで、IIDだけはわかる、という状態です。
教えてくださった手順ですが、実は>>183 の投稿の直前にまったくこの通りのことをしていました。
HKCR\Interface 内を探してみても、このIIDが見つからないので名前も不明でして、
手掛かりが得られなかったんです。
コンテナ側オブジェクト自体はMS製の既知のもの、というか早い話がエクスプローラなのですが、
そこからこそっと問題のインターフェイスがQueryInterfaceされている状態です。
COMSPYで調べてみると、至るところで出てくるんですが。なんで非公開なんだ??
vfptrあたりのメモリをダンプしてみて、メソッドが二つ存在するという程度までは調べがついたのですが、
これ以上は逆汗しない限りムリですかね、やっぱり。
リバースエンジニアリングにならない程度にがんばります(藁
0189使ってみました
NGNGあれってアプリケーションオブジェクトはフック出来ないんですか?
(Excel とかIEとか)リストに出てきません。
インプロセスサーバおんりーなのかなあ
0190IUnknown
NGNGサイトに書かれていることをちゃんと読みましたか?
「COMSPY currently only works for inproc (DLL, OCX) servers」
将来的には変更するそうですが、もう2年も経ってますからねえ。
私も前からアウトプロセスサーバもスパイして欲しいと思ってた口です。
0191デフォルトの名無しさん
NGNG場合、いつその領域は開放されるのでしょうか?
たとえば、以下のようなコードあって、Obj 内で SysAllocString していると
すると、ptr が初期化されるときに開放されるのでしょうか?
それとも CoUninitialize のときに開放されるのでしょうか?
for ( … ) {
try {
IObjPtr ptr( __uuidof( Obj ) );
……
} catch ( … ) {
}
}
CoUninitialize();
また、そういったことはどうすれば調べられるでしょうか?
0192189
NGNGわかりました。英語が弱いって言い訳にならないよね。
ところで別の質問です
SHGetMalloc と CoGetMalloc ってどう違うんですか?
0193デフォルトの名無しさん
NGNGYahoo!で検索かけても出てこないです。
0194デフォルトの名無しさん
NGNGどこだか忘れてしまいました。
どなたか知りませんか?
0195デフォルトの名無しさん
NGNGhttp://www.asahi-net.or.jp/~kv8s-yjm/another/yjamain.htm
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNGそこそこ、ありがと〜
0198デフォルトの名無しさん
NGNGhttp://www.microsoft.com/japan/developer/thisweek/combasics/combasics1.asp
http://www.microsoft.com/japan/developer/thisweek/combasics/combasics2.asp
http://www.microsoft.com/japan/developer/thisweek/combasics/combasics3.asp
0199193
NGNGありがとうございます。案外身近なところに・・・あるんだ。
0200デフォルトの名無しさん
NGNG言語はC++で。
0201デフォルトの名無しさん
NGNGISBN:4-7561-3066-6
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNGhttp://www.ascii.co.jp/books/detail/4-7561/4-7561-3166-2.html
0204age
NGNGこの前参照カウンタ勝手に増やしてメモリリーク
おこしやがった。
0205デフォルトの名無しさん
NGNG0206とあるスレの 488
NGNGこっちのほうが適切っぽいんで質問させてください。
COM初心者なんですけど
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppvOut)
{
....
}
を作ろうとするとREFCLSIDが定義されてないって怒られる。
どのファイルをインクルードすればいいのか教えてくださいまし。
0207_
NGNG殆どいらないものばかりのような気がするのですが、
気のせいでしょうか?
0209デフォルトの名無しさん
NGNGIDispatchとかは全くいらないな。
0210デフォルトの名無しさん
NGNGあと、共有プロパティマネージャはVBから使えるのかな?
0212デフォルトの名無しさん
NGNGDLLやEXEのようなバイナリファイルを1つのコンポーネントとして数えるの?
(HogeLib.dll=1コンポーネント?)
それともこういった中にある、実装クラス(コクラス)とそれを取り囲む
インターフェイスを1セットでコンポーネントというの?
(HogeLib.HogeHoge=1コンポーネント?)
よくわからなくなってきた。
0213IUnknown
NGNGいいと思います(スクリプトコンポーネントといった特殊なものも
ありますが)。コンポーネントは一つまたは複数のオブジェクト
(つまりCOMクラスにあたりますね)を実装しています。。
またクライアントとの通信という観点から見るとサーバという
言葉が使われ、コンポーネントを実行形態から分類した
表現になります。
0214212
NGNG「HogeLib.dll=1コンポーネント」「1コンポーネントにn個のCOMオブジェクト」
でいいんですね?(とりあえず)
で、ついでにさらに質問なんですが、CClassFactoryというのは、コンポーネント
単位で1つだけ実装されているものなんでしょうか?それともCOMオブジェクト単位
で1つずつ実装しているものなんですか?
OLEViewで自作COMの中を見てみると、IUnknownやIDispatchやISupportErrorInfo
はいるのに、IClassFactoryはどこにも見当たらないので・・・。
0215IUnknown
NGNG特殊なインターフェイスです。他のインターフェイスから
IUnknown::QueryInterface で取得する事はできません。
そのため OLEViewer でも見れないのです。ちなみに OLEViewでは
オブジェクトが実装するインターフェイス名の取得はレジストリの
Interfaceキーをスキャンして QueryInterface を呼び出している
だけです。
オブジェクトのインスタンスは CoGetClassObject で
IClassFactory を取得して IClassFactory::CreateInstance を
呼び出すと得られます。より一般的な CoCreateInstance はこの
処理をラップした関数です。ということで IClassFactory は
オブジェクト単位で実装する事になります。
細かい事はこれらの語句をキーワードにMSDNなどを眺めてみると
いいと思いますよ。
0216214
NGNGなるへそ。OLEViewは全部見れるワケではないと。
どうりでATLでCOM+コンポーネントを作った時に実装しているハズのIObjectControlが
OLEViewに表示されなかったはずだ。
それにしてもCOMは深い。今後レガシー技術になって廃れていってしまうのはもったいねーな。
.NETがCOM+レベルにまで成熟するのなんていったい何年後なんだろーな?
そういえばMSが「COMはMicrosoftの魂です。」なんて発言をしたのは、何年前の話だったっけか?
0217デフォルトの名無しさん
NGNG先日、業務で使うことになりましたが、サッパリです。
VBでサーバーとクライアント機能を実現したいと思っているのですが、
レジストリに登録する項目はタイプライブラリとサーバーのパスなんでしょうか?
0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNGありがとうございます。
早速、参考にしてやってみたいと思います。
0220デフォルトの名無しさん
NGNGありがとうございます。*.regファイルで登録ってのはダメなんでしょうか?
*.regを実行させて登録しているのですが、
それはregsvr32.exeの引数としてファイル名を指定して実行したのと同じこと
ではないのですか?
現状ではregファイルの内容で悩んでおります。CだとUIDとか必要なのに、
VBだと何が必要なのかと。
0221デフォルトの名無しさん
NGNG0222てんさいぷろぐらむぁ(偽) ◆8Fck5JHo
NGNGregsvr32.exeが何やってるかっつーと
対象のCOMが持っている登録機能を呼び出しているだけなのです。
DLL(インプロセスサーバ)ならエクスポートされた
DllRegisterServer(アンインストールにはDllUnregisterServer)を、
EXE(アウトプロセスサーバ)なら・・・忘れた、確かコマンドライン引数を渡している
のです。
この自己登録機能によってCOMは自分で適切なレジストリ設定を行うのです。
逆にいうと外からはそのCOMがどんな設定を必要としているのか分からないので
勝手にレジストリを書き込むのはまずいのです。
(大変キケンをともなうので素人にはオススメできない byごるご)
つーわけで
regsvr32.exeがやっているのと同じ事を実行してやりましょう。
エクスポートされた関数を呼んだりコマンドライン引数をつけてexeを実行したりしてやってください。
注意:
COMの自己登録機能は必須ではありません。(普通はつけるけど)
自己登録を実装するのはCOM作成者なのです。
・・・・って知りたい内容と合ってるかな?
でわ
0223218
NGNGCOM+の情報がレジストリだけでなくCOM+RegDBというものにも書き込まれるからです。
0224デフォルトの名無しさん
NGNG0225masa
NGNGCOMをW2K-ServerのCOM+に登録しましたが、クライアントのNT4上から
インスタンスを作成することができず、使えません。W2K-Proをクライアントに
した場合はOKです。多分COM+上のセキュリティの問題なのかなあ?
0227デフォルトの名無しさん
NGNGたしかNT4と2Kではセキュリティモデルが違うとかなんとかで
うまく行かないはず。
2K側のセキュリティモデルをNT4互換にすればいいのかな???
そもそもCOM+ってNT4で対応してたっけ?
0228papa
NGNG現在、VBにてActiveXのEXEを作ってマス。
引数として構造体があるのですが、コレがなかなか上手く渡りません。
固定長、可変長の文字列だとメモリを粉砕してるらしくって落ちたり落ちなかったり・・・
どなたかこの辺詳しい人おられませんか?
0229227
NGNGCOMインターフェースで期待している型と
COMの実装言語(受け取る相手はCなのかいな?)での型と
VBで渡したい型の間でバイト並びが違うと当然ダメだわねえ。
とりあえずそれぞれ何の型なのか教えて味噌。
0230papa
NGNGえっとですね。やりたい事はVBのEXE同士の構造体値渡しなんです。
ActiveXを使っての。
CとVBのBSTRとString、
long同士のように並びについても何とか分かってます。(ホントか?)
渡す引数がちゃんと対応してないとダメって事ですよね?
COMでVBのEXE同士を結びつけるのって普通しないのかなぁ・・・。
知恵をお貸しいただけるとありがたいです。
0231227(泥酔)
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か?ロケータサービスか?
いずれにしてもおめでてーな。
0332デフォルトの名無しさん
NGNGCOMだってそこらへんはしょぼいじゃん(w
0333デフォルトの名無しさん
NGNG0334デフォルトの名無しさん
NGNG君の話を聞いていると、Inner-Networkなのばっかりやん。
COMのInner-Process, Inner-Machineな部分は無視ですか(w
0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNGSOAPでやりとりするデータ形式という認識であってる?
結局ここで話しているのはsocket vs COMじゃなくSOAP vs COMなわけ?
SOAPよく知らないから変なこと言ってたらすまん。
0337デフォルトの名無しさん
NGNGあってない。SOAPとCOMは関係ない。この文脈のXMLってのは単にアフォが
勘違いしてるだけ。
0339デフォルトの名無しさん
NGNGXML InfoSetについて調べてみよう。SOAPは<>じゃないよ。
0340デフォルトの名無しさん
NGNGよくわからんが、分かった。XMLとSOAPについて調べる。ありがと。
0341デフォルトの名無しさん
NGNGごめん無視してた。
開発者側から見て、というつもりだったので
>>337
比喩がわからんおまえがアフォ
つーか、COMのリスクが分かってないのか?
0342デフォルトの名無しさん
NGNGおまえ、>327じゃねーの?どこが比ゆなんだ?比ゆってなんだかわかってないだろ?
0343DCOM使っている人いるの?
NGNGオブジェクトの参照カウントってどうなるんだ?
ちゃんとIUnknown::Release()されるの?
Releaseされないで放っておかれると、
オブジェクトユーザが死ぬたびにオブジェクトが
放置されるから、ちゃんとReleaseされるんだよね。(たぶん)
0344デフォルトの名無しさん
NGNGReleaseされる。DCOMは分散GC実装してるから。
0345デフォルトの名無しさん
NGNGたぶん、GCできるかどうかどうやって判断するんだ?
ってことだと思うが
0346デフォルトの名無しさん
NGNGPing。
0347デフォルトの名無しさん
NGNG嘘だろ?いくらマイクロソフトだからってそんなことは・・・
0348デフォルトの名無しさん
NGNG0349DCOM使っている人いるの?
NGNGそうそうおもいだした。
MSKBのQ171414にこれのメカニズムと停止方法が書いてある。
PINGを使って生存確認している。当然、誰がどのオブジェクトの
ポインタを持っているのか、AddRefしているかを管理しているわけだ(はずだ)
でオブジェクトユーザが異常死亡すると
その人がAddrefした分、Releaseされるわけだ。で合っているよね。
ということは
IConnectionPoint::Adviseしたオブジェクトが死んだ場合も
IConnectionPoint::Unadviseされるんだよね。
ほかにもIOleObject::AdviseやIDataObject::DAdviseもそうだよね。
それともAdviseしているオブジェクトのメソッドを呼んで
RPC_E_FAULTにでもなったら自分でUnadviseしなければならないの?
0350デフォルトの名無しさん
NGNGが生きているかどうか調べているんじゃなかったでしたけ?
あと、Proxy/StubでAddRefやReleaseも最初と最後しかネットワークに
送信しない様に最適化してるって話も聞いた事がある。
システムでウマーくやってくれてるんじゃないでしょか?
0351DCOM使っている人いるの?
NGNGQueryInterfaceの非効率さに気がついて、
MULTI_QI構造体を用意したくらいだから
0352デフォルトの名無しさん
NGNG0353デフォルトの名無しさん
NGNGそうですね。そっちの方が詳しく書いてある。
で、Adviseの件はどうなんでしょう?
だれか教えてください。自動的にUnadviseされるなんてやっぱり甘い?
自動的でなければ、せめて、死んだことが死んだ時点か
それに近いタイミングで通知されるような仕組みがあると楽なんだけど。
0354デフォルトの名無しさん
NGNG0355デフォルトの名無しさん
NGNG0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNG0358デフォルトの名無しさん
NGNGコンストラクタ/デストラクタ持ってる言語でも
うまく破棄されない場合があった気がする。
0359John ◆0z.4Is5E
NGNG酸
0360デフォルトの名無しさん
NGNG0361デフォルトの名無しさん
NGNGそれじゃ話が終わっちゃうじゃん
0362デフォルトの名無しさん
NGNG禿同
0363デフォルトの名無しさん
NGNG0364デフォルトの名無しさん
NGNG禿同
0365デフォルトの名無しさん
NGNGバグとも言い切れない
0366デフォルトの名無しさん
NGNG確保できた資源が、解放時にエラーになる?
それはどのシステムのどんな資源でしょうか?
0367デフォルトの名無しさん
NGNG禿同
0368デフォルトの名無しさん
NGNG参照カウンター
0369デフォルトの名無しさん
NGNG0370デフォルトの名無しさん
NGNGまぁた路線変更に迫られるのですが?
0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNG0373うぴゅ
NGNG0374デフォルトの名無しさん
NGNGMozillaのソース見たことないのか...
0375デフォルトの名無しさん
NGNG0376デフォルトの名無しさん
NGNGinner-processだけだし
http://www-106.ibm.com/developerworks/webservices/library/co-xpcom.html
0377デフォルトの名無しさん
NGNG0378デフォルトの名無しさん
NGNGヒープが壊れたときとか。
0379デフォルトの名無しさん
NGNGUnadviseされるわけがない。
理由:Proxy/Stubがそこまで考慮していないから。
0380デフォルトの名無しさん
NGNG>だれか教えてください。自動的にUnadviseされるなんてやっぱり甘い?
カメレスで済まないけど、Adviceつーても、
単に内部で参照カウントとインターフェースのポインタ
持ってるだけだということを考えませう。
クライアントが落ちてもサーバーが落ちても、
DCOMがRelease( )してくれるのなら
メモリリークはとりあえず発生しない。
0381380
NGNGUnadviceはもちろんやってくれないので、
接続のはがれたインターフェースポインタがいつまでも居座ることにはなる。
DCOMがどんな風にRelease( )するかによるけど、安全性の観点から見て、
多分落ちることはないのではないかと思う。
(使うと常にエラーを返すようになると思うが)
ほんとは、そのあたりでエラーを検出したらインターフェースを取り外すように
Proxy/Stubを吐いてくれると無駄が無くていいのだけど。
そこまではしてくれていない。
VC++のウィザードが作るコードは、大雑把にはvectorでインターフェースを複数
保持して、それらをお構いなしにコールしているだけだと思った。
(エラーが返るからまあいいじゃねーか、という考えなのかな?)
0382デフォルトの名無しさん
NGNGATLのIConnectionPointの実装だと(純粋なCOMというスレの趣旨だがサンプルということで)
Adviseしたオブジェクトのシンクインタフェースへのポインタを固定長の配列で保持している。
だからUnadviseし忘れたオブジェクトがいくつもあってもそのうち、保持しきれなくなる。
あとからAdviseしてきてもCONNECT_E_CANNOTCONNECTと返すほか無くなる。
人によってはIConnectionPointの実装を可変長配列やリストで管理していたりする。
そうなるとおそらくヒープにとるので、Unadviseされないとメモリリークになる。
よくありがちなのが、クライアントが死んでものだからしょうがなく再起動するを繰り返したりする場面。
クライアントが異常終了から再起動するたびに、どんどんメモリリークするかAdvise可能な回数が減る。
DCOMをつかってサーバーから接続しているクライアントに一斉にイベントを投げるようなシステムは気をつけたほうがいい。
こんな状況でもAdviseを受け付けられるようにメモリリーク覚悟でヒープからとるか
固定長の配列で、あふれるようなら拒否するかどっちが良いか悪いかわからんが問題があることは確かだ。
(俺としてはAdvise可能な回数は制限したほうがいいと思うけど)
というわけでイベント送出時にRPC_E_なんとかとなったら自分でUnadviseするのが無難だろ。
VBは自分でUnadviseなんかできないな。
VB屋さんが、DCOMで簡単にサーバークライアントシステムが組めるや、
ちょちょいのちょい。なんて調子で安易にDCOMを使って、
しまいにはどうしたらいいかわからなくなる。
これでもWindowsDNA(死語)の基幹テクノロジーなんだがね。
0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNG0385デフォルトの名無しさん
NGNGおいおい、リモート・ローカル等価性はどうなったんだ?
IConnectionPointはリモートで使ってはいけないから
リモートとローカルで等価ではないってことだな。
実はリモートに限らずローカルサーバーもやばいんじゃないか?ということで等価か。
とIConnectionPointひとつを重箱の隅を突くように取り上げて煽ってもしょうがないが
現実問題として、IConnectionPointに限らず、リモートオブジェクトから
インタフェースを渡されるような場面は気をつけたほうがいい。
渡してきた相手がこそっり死んでいるようなこともあるんで。
0386デフォルトの名無しさん
NGNGVBはUnadviseを勝手にやってくれたりはしないのかな?
0387デフォルトの名無しさん
NGNGそうではない。ここで問題になっている程度の、それなりにそれなりが要求される環境で、
しかもDCOMを使っている場合ってこと。
>>385
Effective COM読んでね。
9. Avoid connection points
0388デフォルトの名無しさん
NGNG0389デフォルトの名無しさん
NGNGVCでCOMつくってVBScriptから使おうと思ったんですが、
VBScriptに2つ以上の返り値を戻す方法がわかりません。
つまるところ、
Set Hoge = CreateObject("Hoge.Hoge")
Status = Hoge.Func(InVal, OutVal, OutVal2)
IF OutVal = "aaa" And OutVal2 = "bbb" Then
みたいな設計はできないんでしょうか?
0390デフォルトの名無しさん
NGNGできません。VBScriptの制限事項です。
0391389
NGNGがっくし。SAFEARRAYとVARRANTつかって配列で受け渡しするしかないか・・・
0392デフォルトの名無しさん
NGNGCOM側(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デフォルトの名無しさん
NGNG0394デフォルトの名無しさん
NGNG0395393
NGNGVBSならON ERRORで処理するんちゃうんか?
それともVBSはput時のエラーは無視する仕様なの?
0396ななし
NGNGVBからオートメーションで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環境は、VB6.0 SP5 + Excel8.0 SR-2 です。
Windows 98 / NT4.0 ws SP6
のどちらでも、
> (4) Dim .... As Object → Set .... = CreateObject ... で実行時バインド
が最速でした。
0398デフォルトの名無しさん
NGNG0399ななし
NGNG>>398
ソースが現在手元に残ってないのでアレですが、50000件のレコード(DAO.Recordset)を
セルに出力する時間を計測しました。
インスタンス化 → Nothing までの時間です。
無論、現実的には、二次元配列を使うなり、CopyFromRecordsetメソッドを使えば一発の
処理なのですが、メソッドやプロパティの参照回数を増やさないと明確な差が検出でき
ない?と考えたので、1件ずつループしてます。
0400デフォルトの名無しさん
NGNGケース毎にプログラム終了した?
exeにコンパイルして試した?
ケース毎にマシン再起動した?
0401デフォルトの名無しさん
NGNG(総時間) = (一件当たりの時間) * (件数) + (定数)
になるから
件数を変化させたときの時間の変化を見れば、
もう少し分かったと思うんだがなあ・・・
ソースコードがないんじゃあもう無理か。
ちなみにそれぞれの時間を覚えてない?
0402ななし
NGNG当然、IDEではなく、EXEでテストしてますし、プログラムも1回毎に立ち上げ
直しました。マシンのリブートまではしてませんが。(やるべきでした?)
それと、レスポンスの計測にTimer関数を使用したので、測定誤差はあるかも
しれません。でも、誤差が出るのは、(1)〜(4)までおなじ条件なので、(4)に
だけ有利に働くなんてことはないですよね?
0403ななし
NGNGソースがないのは、今、実家に帰ってるから(^-^;で、自分とこのマシンにはちゃんと
あります。(件数をもう少し増やせば、というのはちらっと思いました)
ちなみに、このベンチマークをやったのは、昨年の9月頃です。
実行時バインドの方が高速だなんて、気でも違ったかと思われそうで、技術系のMLやBBS
に上げるのを躊躇してました・・・。
0404デフォルトの名無しさん
NGNG>ちなみに、インプロセスサーバを参照してコンパイルしたEXEを該当するコンポーネントがレジスト
>されていない端末で起動するとプロセスが起動せずにクラッシュしますが、上記(1)〜(3)のEXEを
CreateObjectでコケてるんですな。
>Excelがインストールされていない端末で起動しても、エラーにならずに正常に起動してしまいます。(無論、オートメーション機能は動きませんが)
こっちは、めそっど、ぷろぱてぃの情報がコンパイル時に解決されますね。
0405デフォルトの名無しさん
NGNG厳密に言うなら、ディスクキャッシュなどの影響をなくすために、
同じテストを3回以上繰り返すべき。(1なら1を3回実行する)
これで生の処理時間に近づけるはず。
あと、プロパティやメソッドの実行レスポンスを調べたいのであれば、
計測開始時刻と計測終了時刻 を ループ開始直前とループ終了直後 に
置いたほうがいいね。
4にだけ有利に働く可能性としては
a:単に最後に実行して、全部のデータがディスクキャッシュに乗っていた
b:4のみ >>401 のいう定数部分が小さい(あるいは1〜3は定数部分が大きい)
などがあると思う。
ベンチマーク(理科でいうところの対照実験)の基本なので、
このへんを押えてないと厨房扱いされちゃうよ。
0406デフォルトの名無しさん
NGNGエクセルを操作するのでアウトプロセスでしかもDispatchインターフェイスのみ
でしょう。
どの方法でも測定誤差程度しか違わないのではないでしょうか。
0407ななし
NGNGありがとうございます。
> b:4のみ >>401 のいう定数部分が小さい(あるいは1〜3は定数部分が大きい)
> などがあると思う。
その可能性はありそうですが、Excelの場合、行数に65536という制限があるので、
ベンチマーク方法をもう少し工夫した方がいいのかもしれません。
私的に気になっているのは、メモリ上の操作ではなく、ファイル出力の
レスポンステストなので、複数回実行すると環境が汚れることによる影響
があるんじゃないかと・・・?
0408ななし
NGNGありがとうございます。
> エクセルを操作するのでアウトプロセスでしかもDispatchインターフェイスのみ
> でしょう。
インプロセスとアウトプロセスではバインド方法が違う、という理解でよろしいの
でしょうか?
使っている言語がVBオンリーな上、COMのメカニズムもあまり理解していないので、
このスレの話題についてくのはしんどいです・・・。(T_T)
0409デフォルトの名無しさん
NGNG0410409
NGNG対象のプロセスとインターフェースの型と、インターフェースへのポインタだけです。
CoCreateInstance()などで取得できるものではありません。
0411409
NGNG0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNGお勉強レベルのスレがあってもいいかもね
0415409
NGNGただ、スタックトレースを見ると、たとえばドラッグ&ドロップなんかは
rpcrt4.dllなどを介してcallされているし、何か抜け道なりがあるのかもしれないと思って聞きました。
ちなみに、フックをかけてcallをする方法は試してみたところ成功しました。
0416デフォルトの名無しさん
NGNGだから、マーシャリング、プロキシ/スタブ、スレッドモデルなんかに
ついてもっと勉強しろや。
他のプロセスにあるinProc COMサーバを(その、「ほかの
プロセス」を実行主体として)呼ぶのは、フックでもしないと無理。
そうでないなら、普通にCreateProcessから呼び出せば、
あとはole関連ライブラリが善処してくれる。
0417406
NGNGバインド方法とサーバのプロセス形態は直接は関係ないですよ。
バインド方法はVBのソースで型名でオブジェクトを扱うのか、
Objectで扱うのかの違いでしょ。
一般的にVBでいうところのバインドは、
参照を追加して型名で操作 == アーリーバインド
開発時に型情報等を解析する
サーバへのバージョン依存性は高くなるが
開発時にエラーチェックできる
またパフォーマンスはよい
object型で操作 == レイトバインド
実行時に型情報等を解析する
サーバへのバージョン依存性は低くなるが
実行時エラーになる可能性もある
またパフォーマンスはさがる
という事で >>396 でなぜレイトバインドが一番速かったのか
と疑問に思っているのではないでしょうか。
#ちなみにnewとCreateObjectはオブジェクトを作るときのみ
#違いがあるので受けた後の型しだいで上記と同じ。
バインド方法で著しくパフォーマンスがかわるのは
dualインターフェイスのインプロセスサーバを扱った
ときでしょう。アーリーバインドで開発時にIUnknown側の
メンバーを扱う様にコードが吐かれるのか、レイトバインド
で実行時にDispatchのInvoke経由でメンバーを扱うのかという。
たとえdualインターフェイスでもアパートメントに互換性が
あるインプロセスサーバ以外は直接サーバとは対話していない
ので注意が必要です。
しかし >>396 で検証した結果レイトバインドが速いというので
あれば、仮説ですがVBがDispatchのみのエクセルに対して
アーリーバインドするとエクセルを扱う仮想のエクセルオブジェクト
を作成しているとか、使用しないメンバー情報等も全て
取得してまうとか...そのぐらいでしょか。
結局エクセルを扱うときDispatchでInvokeするしかないわけだから
アーリーバインドする事でどのぐらいパフォーマンスに差がある
かといわれると「誤差ぐらい」と思われますが。
0418ななし
NGNG丁寧なコメント、ありがとうございます。m(_ _)m
残念ながら、私は勉強不足のようです。(VBユーザーは、COMを「使う」ことはあっても、
内部の仕組みは必ずしもしらなくても足りてしまう場合が多いので)
このスレの話題について行けるよう、いろいろ研究してみます。
ソフトウェアの動作原理や(隠蔽された)内部のふるまいに興味が大いにありますので。
0419D
NGNG0420デフォルトの名無しさん
NGNGたしか前者は入手困難じゃなかった?
0421D
NGNG速攻買いに行きました。ここまで高い本買ったのは初めてだったが
かなり勉強になるよ。入手出来なければ大きめの図書館で借りたりとかね。
家の近郊の図書館にはInside OLEはあった。まあ購入後知ったことだから
どうでもいいんだけどね。常に手元に無いと落ち着かないって言うのもあるし
損した気分にはならなかったね。今の学生さんならお金持ってるだろうし
そんなに負担ではないのでは?(いいかげんな推測ですが)
0422ななし
NGNGいちおう、ええ歳こいた社会人(0x20代)なので(にしては、厨房質問ですが(^-^;;;)、
本くらいは買えます。
「Inside COM+」ですね。
ありがとうございました。m(_ _)m
0423デフォルトの名無しさん
NGNG俺が立ち読みしてるので、絶対に買うな。お長居します。
0424ななし
NGNG現在、東京在住ではない(地方に飛ばされました(T_T)ので、買えません・・・。
0425デフォルトの名無しさん
NGNGこのインタフェース訳わからんです。
どう実装していいのかどう使っていいのか
何のためにいるのか、さぱーりわかりません。
ちなみにInsideOLE読みました。でもわかりません。
0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNG0428デフォルトの名無しさん
NGNG0429デフォルトの名無しさん
NGNG良く分からないは、レジストリから切り離されるって噂。
それと、64bitVBが出ないんなら、64bitCOM+が出ないって事?
0430デフォルトの名無しさん
NGNG・COMってなんですか?入門ページありますか?
・COMって今後はどうですか?
0431デフォルトの名無しさん
NGNGCOM プログラミングの基本
http://www.microsoft.com/japan/msdn/thisweek/combasics/combasics1.asp
0432デフォルトの名無しさん
NGNG読み込む方法を教えて下さい。(VC6またはBCC)
0433斬ってくれ!
NGNGそういうことじゃなくて?
0434Proxy
NGNGどのようなメリット、デメリットがありますか?
たとえば文字列において VBScript では BSTR、 JScript ではオブジェクト、
実行速度などで差が出てくるものなのでしょうか?
0435432
NGNG>ITypeLib や ITypeInfo
多分それです。知りませんでした。
これもQueryInterfaceやGetIDsOfNamesで取ってこれるんでしょうか。
0436デフォルトの名無しさん
NGNGやってみれば?
0437デフォルトの名無しさん
NGNG0438233
NGNGで検索しても日本のサイトはほとんど引っかかりませんね。
本の索引とかばっかりで。
タイプライブラリの参照で参考になりそうなWebサイトがありましたら
紹介してください。
0439432
NGNG0440デフォルトの名無しさん
NGNG0441IUnknown
NGNG私の場合、ほとんどの情報や技術は MSDN ライブラリと
専門書から学びました。まあ専門書は高いですし、簡単に
買えとは言えませんが、MSDN ライブラリはお持ちでないの?
持って無くても以下のサイトで見ることが出来ます。
msdn.microsoft.com/library/
ここで次のように階層を辿って下さい。
Component Development
Automation
SDK Documentation
Automation
Type Description Interfaes
あと厳しいようですが英語が読めないというのは論外です。
専門技術を身につけるには英語力は必須ですからね。
0442デフォルトの名無しさん
NGNG実行ユーザの権限が低いから
0443デフォルトの名無しさん
NGNGNT,W2K,XPだとレジストリにもセキュリティ属性というものがあるんよ。
0444デフォルトの名無しさん
NGNGやっぱりそうですか・・・
IISの匿名アクセスユーザをAdministratorとかに設定させるしかないのかな?
0445デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNGとおもってUsersのユーザにしたけどだめでした。
そしてなぜかAdministratorsにしてもだめでした。
コンピュータの管理者(XPなので・・・)にしてみたらできました。
へんですね。コンピュータの管理者も所詮所属グループがAdministatorsになってる
だけなのに・・・
0447デフォルトの名無しさん
NGNG0448デフォルトの名無しさん
NGNGありゃ?できました。
IIS画面で停止->COM+のIIS????をシャットダウン->IIS画面で起動
までやったんで大丈夫かと思ってたのに。
iisresetってさらに何かやってんですね。どうやら。
・・・けどやっぱりUsersだけだとだめでした。たぶん自分の見に行ってるレジストリの
権限が高いんですね。きっと。
0449デフォルトの名無しさん
NGNG組み込みたいのですが、うまい方法がわかりません。
Dllの仕組みの中にそういう機能ってありませんでしたっけ?
0450デフォルトの名無しさん
NGNG0451449
NGNGなにか期待と違う結果が・・・
C:\WINDOWS\System32\dllhost.exe
dllを呼び出した側のモジュール名が出てきました。?
0452デフォルトの名無しさん
NGNGDllMainで渡されるHINSTANCEを保存しておいて、それにGetModuleFileName()
0453449
NGNGありゃ?だめだ。というか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));
}
0454449
NGNG0455デフォルトの名無しさん
NGNG関係ないけど好きだった
0456デフォルトの名無しさん
NGNGエラー タイプ
(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じゃ受けられないんでしょうか?
0457デフォルトの名無しさん
NGNGしまった。受ける場所を間違え・・・
しかし今度はE_FAILしかかえってこんな・・・
0458デフォルトの名無しさん
NGNG多分ちゃんと登録されているオブジェクトのはずなのですが、
確かめる方法からわかりません。
0459デフォルトの名無しさん
NGNG何かがマズイ時
0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNGISupportErrorInfoとか調べてみてちょ
0462デフォルトの名無しさん
NGNG.NETからみたら過去の技術扱いでラッパーしかないですね。
0463デフォルトの名無しさん
NGNGIBindEventHandler インターフェースの
の、使い方(というか使われ方)を知ってる人いませんか?
解説書の書籍名でも結構です。情報をお待ちしております。
0464デフォルトの名無しさん
NGNG0465デフォルトの名無しさん
NGNG0466デフォルトの名無しさん
NGNGならばVB.NETになった今は不要。
0467463
NGNG簡単にレポートすると、WSHなんかに公開するオートメーションオブジェクトで、
IBindEventHandlerを使えばIConnectionPointとかを使わずに動的に
イベントハンドラを指定させたりできるというものでした。
どっかにドキュメント用意しとけよ!>M$
0468デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNGwindowsの既存のコンポーネントをガリガリ使うなら基礎知識として
知っておいたほうがいいかも。選択肢がいろいろ広がる。
まあこれからは.NETから使えるようになるだろうから、そこまでの
プライオリティがあるとは思えんがね。
0470デフォルトの名無しさん
NGNGCOMが最初に登場したのはOLE2ではなかったか?
インプレースアクティベーションを実現したかったから。
そのためにOLE WindowやData Objectがでてきて
COMというアイデアがでてきたと俺は解釈していた。(DDEはもう限界だ)
この流れにVBの話は1つもなしで、
今VBで自由に扱えるディスパッチインタフェースは
後になっての話でVB3で初めて使えるようになった。
さらに後になってインプレースアクティベートが発展して
OLEコントロールというしくみに発展する。
間違っていたらすまん。
0471デフォルトの名無しさん
NGNG0472デフォルトの名無しさん
NGNG0473デフォルトの名無しさん
NGNG「プロパティ⇒メソッド」は成り立つが「メソッド⇒プロパティ」は成り立たんだろ。
まったく同じみたいな書き方するなって。
0474デフォルトの名無しさん
NGNG472は「プロパティはメソッド」と書いてあるだけで「メソッドはプロパティ」とは
書いてませんが。
0475デフォルトの名無しさん
NGNG(*ppFuncDesc) ->invkindが、
INVOKE_PROPERTYGETかINVOKE_PROPERTYPUTかINVOKE_PROPERTYPUTREFなら
そのファンクションはプロパティ。
INVOKE_FUNCなら、そのファンクションはメソッド。
OK?
0476デフォルトの名無しさん
NGNGと書いてますが。
0477デフォルトの名無しさん
NGNGITypeInfoって、どうやって取得するの?
0478475
NGNGIDispatch::GetTypeinfoあたりからどうぞ。
結局、プロパティとメソッドはともに(必ずしもとは言えないけどたいていは)
IDispatchからInvokeできる関数ディスクリプタ。
その関数ディスクリプタがPROPGETやPROPPUT, PROPPUTREFとマークされているものを
とりあえず、プロパティと呼ぶ。とりあえずというのはオブジェクトが
プロパティと主張しているだけでコントローラがプロパティとして扱うかは
別だから。でも扱わないケースを見たこと無いけどね。
関数ディスクリプタがFUNC(やMETHOD)とマークされていればそれはメソッドとして
扱ってくれということ。プロパティと同じでオブジェクトの心、コントローラ知らず。
あと異なる点は、同じ関数ディスクリプタを異なる種類(Invoke Kindというらしい)
で呼び出すことができるという点。同じ関数ディスクリプタに対してPUTとGETができる。
(PUTREFなんてのもあるけどおいておいて)
たいていはPUTしたものはそのままGETできるし、PUTによってオブジェクトの状態(色とか)が変わったりする。
場合によってはオブジェクト自身がプロパティを勝手に変更したりするが
この場合はIPropertyNotifyでコントローラに通知したりすることができる。(うる覚え)
必ずしもPUT, GET両方ともサポートする必要は無し。どっちか片方なんてのはザラ。
読み取り専用プロパティなんていうのは、GETのみね。
今日のところはこの辺でカンベン。
眠くてなに言っているのか自分でもよくわかんなくなった。
おやすみ、またあとで。
0479デフォルトの名無しさん
NGNGありがとう。
0480IUnknown
NGNG同義に捉えてはいけないんだよね。それがいつも混乱の元になる。
472〜474のやり取りではそれが浮き彫りになってるね。
ひとつ気になったのはプロパティとメソッドの違いを問う人が、いきなり
475氏の説明を読んで理解できんのかな?って思う。「ありがとう」って
書いているし、要らぬお世話かな...。
0481477=479
NGNG>>ITypeInfoって、どうやって取得するの?
>IDispatch::GetTypeinfoあたりからどうぞ。
これに対しての「ありがとう」です。
後半はよくわかりませんでした。
わからないと言えば他にも。
各メソッド/プロパティで設定したり取得したVARIANT型の変数の
開放は誰が行うべきなのか?とか。
getで得たものは自分で開放すべきなのはなんとなくわかりますが・・
0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNG平たく言えば、オブジェクトがそれをプロパティと言えばプロパティ。
メソッドといえばメソッド。
プロパティは同じ関数をGET/PUTと違う種別で呼び出せる。
メソッドの呼び出す種別は一種類だけ。
ということです。眠くなくても何言っているのかわからんね。
>各メソッド/プロパティで設定したり取得したVARIANT型の変数の
>開放は誰が行うべきなのか?とか。
>getで得たものは自分で開放すべきなのはなんとなくわかりますが・・
質問の意図はおそらく、VARIANTそのものの開放ではなく
BSTR* VARIANT::pbstrValのようにポインタの先に値の実体が
あるようなVARTYPEで、そのポインタの先の領域はだれが開放するのか
ということだろう。getでもらうにしても、あらかじめ
VARIANT構造体を渡してそこに入れてもらうしかないし。
パラメータの受け渡しにかぎらず
VARIANTについては以下のような単純なルールを守っていれば問題ないかと。
1.VARIANT構造体の実体を宣言したら、それに対してVariantInit()すること。
例:VARIANT var; VariantInit(&var);
2.VARIANTに値を入れる場合は、前もってVariantClear()しておくこと。
VariantClearはVariantのvtにあわせて、中身の開放も行ってくれる。
例:VariantClear(&var); var.vt = VT_I4; var.lVal = 2222;
VariantCopy()を使う場合はコピー先にVariantClearが行われるので不要。
3.VARIANT構造体の実体を消す(あるいはauto変数で自動的に消えそうな)場合は
前もってVariantClear()しておく。でないとリークする。
最終的に開放の責任を負っているのはそのVARIANT型の変数を割り当てた人。(ルール3)
VARIANT型の割り当てだよ、pbstrのようなVARIANTの中身の割り当てでは無いよ。
もらった側に最終的な開放の「義務」はない。
ただ、Byref渡しがあるので開放してはいけないということではない。(ルール2)
もらったVARIANTの中身を別の値、はては別のvtにする場合もあるので
その場合は中身を開放する必要があるんで。
渡す場合でも渡される場合でも、このルールに従えばいいと思う。
長くてすまん。間違っていたらすまん。だれかフォローしてくれ。
0484IUnknown
NGNG言いかえるならば「同じ関数名」ですね。get_、put_ が呼び出している
関数は異なる関数です。
VARIANTについては
「初期化する前のVARIANTにVariantClear()を行ってはならない」
VariantClear() は渡されたVARIANTを意味のあるものとして解釈するため、
初期化前のでたらめなデータが入っているVARIANTに対して使うと
無意味な参照を開放しようとしたり何が起こるかわからない!
(VARTYPEの解釈次第)
「クリアされていないVARIANTにVariantInit() を行ってはならない」
VariantInit() は渡されたVARIANTを意味の無いものとして解釈するため
BSTR やオブジェクト等のデータを保持しているVARIANTに対して使うと
これらは開放されること無くメモリに残り続けることになる。
って具合ですかね。当たり前のことですけど。
0485ななしー
NGNG他のオブジェクトのインターフェースを返すとき
どうやって宣言してますか?
自分としては、IFooとかを返したほうが良いような気がするのですが、
いろんなサンプルでは、ほとんどIDispatchとかVARIANTで返してるので、
なんでだろう?と思いました。
0486479
NGNG大変為になりました。
0487475
NGNG>>484 フォローサンキューです。なのでフォロー返しです。
弁明すると、1つの関数 = 1つのDISPIDに対してという意味でして、、
get_, put_で関数が分かれているのはデュアルインタフェースで
組まれているインタフェースのケースですね。
(というか、今時IDispatchを実装するのにデュアルが普通でしょ?)
この場合はvtblの要素がget_, put_で二つに分かれているので
関数が二つ必要ということです。(当たり前のなりゆきですが)
名前が、プロパティhogeに対してget_hogeとput_hogeになるのは
midlがそういうヘッダファイルを生成するから。
>「初期化する前のVARIANTにVariantClear()を行ってはならない」
それ以前にVariantInit()されていないVARIANTはVARIANTで無い
ということでしょう。当然他のVariantXxxx()にも
VariantInitされていないVARIANTを渡してはいけない。
>>485
メソッドやプロパティという単語が出てきているから
IDispatch経由ということでいいでしょうか?
それなら、IFooのようなオリジナルインタフェースは
引数に指定できないから。
渡すにせよ、もらうにせよ
パラメータに指定できるインターフェースは
(VARIANTの中身を含めて)IDispatchかIUnknownしかない。
なので、IDispatchかIUnknownを受け取った側でQueryInterfaceして
本当にIFooかを確認すればいいかと。
ところでスレの趣旨からしてrawなCOMの場合の話でいいんだよね?
0488デフォルトの名無しさん
NGNGunixでいうraw/cockedの関係?
0489デフォルトの名無しさん
NGNG0490475
NGNGすんません。説明不足です。
IDispatchの話にはVB辺りを絡めて考えている人もいると思い、
「VBでのCOMではなく、>>1 に従って、生(raw)のCOMでいいんですよね?」
ということです。
0491デフォルトの名無しさん
NGNGlate binding以外にIDispatchの利点てありますか?
0492デフォルトの名無しさん
NGNGIDispatchExとか言ってみるテスト。
0493475
NGNG「IDispatchってなんで必要なんだろう?」
と疑問におもっていた。で、俺流の解釈は
1. インタプリターだとこういうほうが扱いやすいのか
と自分を納得させていましたが、
いまや、VBでさえ、IDispatchなんて関係なく
カスタムインタフェースを呼べる、実装できる。
(oleautomationの制限はあるけど)
2.中間コードも作らない純粋なインタープリターだと
カスタムインタフェースを「呼び出す」のはなんとかできても
カスタムインタフェースを「実装」するには難しいと思う。
あらかじめ、全メソッドがわかっていないとvtblを作ることができないので。
その点、IDispatchは、メソッド名を問われた時点で考えれば
いいからやりやすい。
VBは開発環境で実行してもこっそりコンパイルしてコードを作って
動かしているような感じがするので、純粋ともいえないと思う。
3.「何にも考えなくてもマーシャリングできる」
(でもlongにポインタなんか入れたらダメだけど)
とも思いつつも、
カスタムインタフェースでも
ほぼ、自動的にマーシャラを用意できる。
結局、利点は2かな?
0494デフォルトの名無しさん
NGNGインターフェイス。以上。VBがIUnknownを扱えるようになったのは
ずっと後の話。
0495IUnknown
NGNG確かに。
VBScript の Class ステートメントの定義から作られる
オブジェクトなんかは内部的には IDispatchEx 経由で
アクセスするからね。正直このステートメントの実装を
可能にするために IDispatchEx は出来たんだろうね。
(いやまあ、推測だけど...。)
0496475
NGNG>何を理由かこつけてんの?
いや、理由をかこつけているのではなく
IDispatchを使う利点をかこつけているのですが。
>IDispatchはVBのためにVBチームが作ったインターフェイス。
そうですか。うすうすは感じていましたが。知りませんでした。
>VBがIUnknownを扱えるようになったのはずっと後の話。
「いまや、VBでさえ、IDispatchなんて関係なく
カスタムインタフェースを呼べる、実装できる。」
の「いまや」でその辺を示していたんですが。
あまりハッキリして言っていませんでしたね。すみません。
私の記憶では、VBでのCOMサポートはVersion3で
IDispatchドライバになることができた。
Version4でIDispatchオブジェクトになれて
Version5で制限ながらIUnknownオブジェクトになれる。
でしたっけ? 実はVB3って使ったことないんですが
OLE2 SDKについていたDISPTESTとかいう
テスト用のオートメーションドライバが
VB3のサブセットということを聞いたことがあるので。
0497デフォルトの名無しさん
NGNG#define _WIN32_WINNT 0x0400
#define WINVER 0x400
#include <windows.h>
#include <tchar.h>
#include <comdef.h>
#include <objbase.h>
#undef DialogBoxW
#pragma comment ( lib, "Rpcrt4.lib" )
#import "xl5jp32.olb" \
rename("DialogBox", "DialogBoxForExcel") \
rename( "RGB", "RGBForExcel")
int foo()
{
CoInitializeEx(0, COINIT_MULTITHREADED);
Excel::_Application *pRawExcel = NULL;
VC6で上のコードをビルドすると、Excel::_Application の行で
C:\proj\src\libexcel\libexcel.cpp(18) : error C2039: '_Application' : 'Excel' のメンバではありません。
C:\proj\src\libexcel\libexcel.cpp(18) : error C2065: '_Application' : 定義されていない識別子です。
なかんじのエラーが出てしまいますが、何がまずいんでしょうか?
C++からexcelのセルがいじれてマクロが呼べればどのようなやり方でもいいんですけど、
そのへんから拾ってきたコードも、MSDNのサンプルもろくにビルドできずに困ってます。
0498デフォルトの名無しさん
NGNGc:\proj\src\libexcel\debug\excel9.tlh(1194) : error C2504: '_IMsoDispObj' : 定義されていない基本クラスが宣言されています。
みたいなエラーがたくさん出てきます。
はひゅー
0499デフォルトの名無しさん
NGNGCoInitializeEx(0, COINIT_MULTITHREADED);
Excel::_ApplicationPtr pRawExcel( __uuidof( Excel::Application ) );
これでいかないか?
タイプライブラリをインポートすると、生のインターフェイスの代わりに
スマートポインタ版インターフェイスが定義されるはず。
_com_ptr_t<>ってやつ。インターフェイス名にPtrと付く事に注意。
スマートポインタなんで普通NULLは入れないな。
0500デフォルトの名無しさん
NGNGオートメーションやアクテブXの存在理由がイマイチわからん。
使うこともないし。何の意味があるのこれ?
C++を使う上で、無意味ともとれる決まりごとが多くてかなわん。
VBとかで使う為に必要なんですよとかそんなの理由になるのか?
.NETの本にCOMが難しいのは、本来OSが受け持つサービスを
自前で用意しなければならないからだとか書いてあったが正しくその通り。
0501デフォルトの名無しさん
NGNG> VBとかで使う為に必要なんですよ
.NETもそういう決まりごとでがんじがらめになってるけど、
コードを書く側にとって見えなくなってる。それがCOMとの違い。
COMは負担が大きすぎた。
0502497
NGNGありがとーん
あの後、MS09.olbとかVB6EXT.olbとかいること発見したんで、EXCEL9.olbを
使うように戻しました。
#import "C:\Program Files\Microsoft Office\Office\MSO9.DLL" \
rename("DocumentProperties", "DocumentPropertiesXL")
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
#import "C:\Program Files\Microsoft Office\Office\EXCEL9.OLB" \
rename("DialogBox", "DialogBoxXL") \
rename("RGB", "RBGXL") \
rename("DocumentProperties", \
"DocumentPropertiesXL") \
no_dual_interfaces \
exclude("IFont","IPicture")
int foo()
{
CoInitializeEx(0, COINIT_MULTITHREADED);
Excel::_ApplicationPtr pRawExcel( __uuidof( Excel::Application ) );
pRawExcel->Quit();
return 0;
}
でもやぱーり、
c:\proj\src\libexcel\debug\excel9.tli(3731) : error C2511: 'PutOnDoubleClick' : オーバーロードされたメンバ関数が '<Unknown>' にありません。
なんてのが出てきてお手上げ状態です。
web上にも完全なコードやOLB間の依存関係の情報があまりないところを見ると、
#importではみんなうまくいかなくてあきらめちゃってるんじゃないかと思う次第であります。
0503499
NGNG折れも試しに作ってみたが、一応コンパイルは通ったよ。
動くかどうかは試してないけど。
普通にATL COM AppWizard でexeサーバー作ってる。
// Test.cpp : CTest のインプリメンテーション
#include "stdafx.h"
#include "EXCEL9_TEST.h"
#include "Test.h"
#import "E:\Program Files\Microsoft Office\Office\MSO9.DLL"
#import "E:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
#import "E:\Program Files\Microsoft Office\Office\EXCEL9.OLB" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL")
/////////////////////////////////////////////////////////////////////////////
// CTest
STDMETHODIMP CTest::a()
{
CoInitializeEx(0, COINIT_MULTITHREADED);
Excel::_ApplicationPtr pRawExcel( __uuidof( Excel::Application ) );
pRawExcel->Quit();
::CoUninitialize();
return S_OK;
}
0504497
NGNGウワーン
#includeを付けたりはずしたらりしてたらビルドできるようになったよー
手順はこうです
>>497をふつうのWin32 Console exeで作成
↓
いろいろいじるがパーイ
↓
2chに泣きつく
↓
>>503を読んで、ATL COM AppWizardでexeサーバを作ってコンパイル
↓
Σ(゚д゚lll)ガーン動くよ
↓
#includeしてるヘッダが関係してるかと思って>>497に#include <atlcom.h>とか
#define STRICTとかいれてみる
↓
Σ(゚д゚lll)ガーンコンパイル通るよ
↓
元の>>497に戻してビルド
↓
Σ(゚д゚lll)ガーンコンパイル通るよ
という次第です。
コンパイラが作成する tlhとかが壊れてたのかなーと思ってみたりして。
0505497
NGNGところで、excel 97/98/2000/2002を同じようにC++側から操作したい場合、
ソースは一個で何とかなるんでしょうか?
それぞれのofficeのバージョンごとにolbとか取り込まなきゃいかんのでしょうか?
0506499
NGNG折れはアマゲープログラマなんで
EXCELのことは全然わからんのですよ。( ´Д⊂
ただやっぱ、COMなんだから
EXCEL97〜EXCEL2002が
同じCLSIDを持つコーポネントを利用しているのなら
最新のOLD1つを対象に組むだけで良いんのではないかな?
0507497
NGNG__uuidof( Excel::Application )
のところがポイントですかね。
Excel97で持っているUUIDを渡すべきかな?
場つなぎ的なサンプルしかないのでこれも試行錯誤するしかないですね。
0508デフォルトの名無しさん
NGNGが、97〜2002で全く挙動が一緒だという保証はないと思うが。
0509497
NGNG"Excel.Application" みたいなのがバージョンなしのProgIDなんでしょうか。
やりたいことはセルの値の取得と設定、マクロの起動くらいなので
バージョンには依存しないと思われます。
最新のOLD+バージョン無しProgIDの線で攻めてみます。
0510499
NGNG調べまくってわかりました。
EXCEL95がxl5jp32.olb、
EXCEL97がEXCEL8.olb、
ELECEL2000がEXCEL9.olbなんですね。
それで折れが調べた限り
xl5jp32.olbとEXCEL9.olbは
コーポネント上の互換性は無いみたいです。
インターフェイスやそのメソッドとかは
なんとなく似てるんですが。
自分のWin2000ではxl5jp32.olbのインターフェイスを呼ぶと
何故か失敗するので確かめることはできなかったんですけど。
EXCEL8.olbは手元に無いのでわかりませんでした。
0511497
NGNG0512デフォルトの名無しさん
NGNGBCCからも使いたいっぺ。
0513デフォルトの名無しさん
NGNG当然だが、C++からは直でタイプライブラリは読めないので
C++のソースファイルへの変換が必要。
#importディレクティブは、OLBファイルから
TLHとTHIというC++のヘッダとソースを作り出す。
それに加え、OLBファイルからツールを使ってIDLファイルを作成し、
IDLファイルからMIDLコンパイラを使ってC++ヘッダをコンパイルする方法もある。
上記二つのどっちかのC++ソースを、何らかの方法でゲットしてBCCで使えるかどうか
試す。
又は、COMの機能を使って動的にタイプライブラリを読み出す事も可能。
LoadTypeLibEx()でITypeLibインターフェイスを取得する方法。
0514デフォルトの名無しさん
NGNGCLSIDFromProgID( "Excel.Application" )ではだめでしょうか?
だめなら、全てIDispatch経由でアクセスするしかないでしょうか...
0515499
NGNG497?
ならすいません。ウソこいてました。
EXCEL9.olbはxl5jp32.olbの上位互換性を持ってるようです。
xl5jp32.olbで公開されているインターフェイスは
dispinterfaceだけしかありません。
EXCEL9.olbはそれに加えdual interfaceとinterfaceを公開しているようです。
しかし、xl5jp32.olbで公開されている
dispinterface _Globalとdispinterface Applicationの
このふたつは何故かEXCEL9.olbには無いです。それ以外の
dispinterfaceは定義されているようです。
自分はEXCELにはあまり詳しくないんで
わからないんですが無くてもいいんですかね?
まあ結論としては、インポートするOLDはEXCEL9.olbで1つでOK。
ただし、xl5jp32.olbへのアクセスはIDispatch経由以外ないと、
こうなると思います。
0516499
NGNG>こうなると思います。
xl5jp32.olbと互換性を持たせるなら、IDispatch経由以外ないと
の間違いです。
0517514
NGNG古いexcel等は確かおっしゃるとおりdispinterfaceしか定義されていなかった
と記憶しています。
そこで >>497 さんは #import を使っているみたいですから、#import すれば
Dispatch経由でアクセスしてくれるラッパが自動的にできないかなーと思ったしだいです。
今手元に環境が無いのでおぼろげな記憶だけですが..
だめならやっぱり >>514 に書いたとおり、
せめて excel のクラスIDぐらいはバージョン非依存で取得して、
あとは自分で IDispatch 経由でアクセスするしかないかと..
0518497
NGNGありがとーございましし。
>xl5jp32.olbと互換性を持たせるなら、IDispatch経由以外ないと
コードレベルでの互換をとるなら、という意味ととってよいでしょうか。
OLBは今ある最新のものを使うとして、それがofficeのバージョンに
依存するかどうか、が一番の焦点だったのですが、問題なさそうですね。
とりあえず、バージョン非互換のクラスID+OLBのインポートで
テストしてみます。
2chで初めて人に感謝しました。
0519sage
NGNGDelphi6 PersonalでCOMが作れるか調べていたのですが、
Personalにはウィザードがないようです。ベタに作る手は
あると思うのですが、Googleでもあまり情報がなく。
VC++は歯が立たないので、ほかの言語でCOM作って遊ぼうと
している次第で。WSC、VB6、.Net(C#)は実践済み。
0520デフォルトの名無しさん
NGNG0521デフォルトの名無しさん
NGNGWSC(わんだーすわんからー?)/C# がCOMと関係あるとは思えない
0522519
NGNG>>520
Cの経験がないのです。ニセモノです私(恥)
>>521
ASP/スクリプト環境で使うことを考えていたのです。
作ったものが呼べるとわかればあとは何とかなると思っています。
WSCはWindows Script Componentです。あまり流行ってませんが。
スクリプトのかたまりをCOMとして呼べる代物。
C#/.netはinterop経由でアセンブリをCOMとして呼べます。
VBならActiveX DLLでCOMのこと何も知らずに作れるので、
気楽なものかと思っていたのですが。このスレ読む限り
非常にレベル高そうですね。
ここまで書いてCOMの意味を誤解している気がしてきました。
0523デフォルトの名無しさん
NGNG知識として知っておくのはいいかもしれんが、自分でやることはないだろうなあ。
DelphiでのやりかたはDelphi関連のスレで聞いた方がいいとおもう。
なんらかのサポートがあったと思うがよく知らない。
0524519
NGNG0525デフォルトの名無しさん
NGNGやるならオートメーションは意図的に省いて
それ以外のアーキテキチャを勉強を勉強すべき。
マーシャリングとかそこらへん。
俺は確信に至った。
IDispatchやIDispatchExなんてのは
明らかに死に行く技術だ。存在価値ゼロ。
0526ななし
NGNGそこまで読み切れる判断力がうらやましい。(決して皮肉とかじゃないですよ)
VBがやっとな俺の頭脳では、高度な技術の是非までは残念ながら判定できない。(泣
0527sage
NGNGなんとかうまいことC++からExcelを操作することができるようになりましし。
重ね重ねお礼を申し上げます。
0528ななし
NGNG0529デフォルトの名無しさん
NGNG君はまず日本語を勉強すべき。
0531デフォルトの名無しさん
NGNG0532デフォルトの名無しさん
NGNGこういうのってIDispatchのおかげじゃないの?
0533デフォルトの名無しさん
NGNGWeb制作板はscriptの話ばっかりで参考にならなくて。
0534デフォルトの名無しさん
NGNGこんなスレもあるよ。
http://pc.2ch.net/test/read.cgi/tech/982930049/l50
0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNGしにくいかもしれないですけどVBとVCで作ったCOMの比較とEJBを比較するとどの
程度の速度差になるのでしょうか?やはりATLなどでVCのCOMがあまりはやらない
のはVBなどでも満足いく速度だから?
0538デフォルトの名無しさん
NGNG>VBとVCで作ったCOMの比較とEJBを比較するとどの程度の速度差になるのでしょうか?
何の速度差か知らないけど多分、
VC>>>>>VB=>EJB
でしょう。
>やはりATLなどでVCのCOMがあまりはやらないのはVBなどでも満足いく速度だから?
なにが「やはり」なのかはおいといて、
エンドユーザー/開発者から見た場合、COMはVBの為に作られたんだから、
そもそもVCで流行るはずが無いのは当然の結果かと。
VCだけで使うんなら、ただのDLLでもなんでもいいし。
VCでのCOMは「作る」よりも「しかたなく使う」が圧倒的。
速度については、VBは元々遅いから、それで満足する様なやつらからは
文句はでないってだけだと思う。速いマシンに換えるとかね。
それで満足しないやつらは他の手段を模索するでしょう。
0539COMビギナ
NGNGタイプライブラリにenumで定義した定数シンボルを、
XMLで記述されたクライアントから参照することは可能でしょうか?
よろしくお願いいたします。
0540COMビギナ
NGNGちょっと誤解を招きそうな表現なので書き直します。
enum定義を含むタイプライブラリを、XMLで利用する際に、
その定義されたシンボルを参照することは可能でしょうか?
よろしくです。
0541デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNGクライアントにコネクションポイント実装させるのもなあ。
しかし本気でこの型制限にはいらつくよ。何も出来やしねえじゃねえか。
0544デフォルトの名無しさん
NGNG0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNGいるのですが、私も文字列の配列をCOM<->VC++クラ
イアント間でやり取りする方法に悩んでいます。
どなたか以下の状況で実装されているソースをご存知
ありませんか?
(1)VC++クライアント側に配列のインスタンスがある。
これはCOleSafeArray
(2)配列はBSTRの一次元構造
(3)COM側で、受け取った配列の参照に対して操作を加える
よろしくお願いします。
0547543
NGNGピュアなCやC++の環境で使いたい場合どうすんの?
それだとCOMクライアント専用になっちゃうじゃん。
あと質問。
IDLでメンバのオーバーロードを定義すると怒るんだけど。
これって仕様?
だとしたら本当に糞だなCOMって。
0548デフォルトの名無しさん
NGNGCOMなんてもうないだろ。
今はEXEだよ。
0549デフォルトの名無しさん
NGNGそれなら、別にIUnknownから継承をうけて、実装を
いれたとしても、pureなC++でも使えると思うが。
0550名前:デフォルトの名無しさん
NGNG意味不明。ネタにしても自殺を勧めたくなるほどつまらん。
0551543
NGNGIUnknownから継承を受けるには
IUnknownの実装を入れなければならないと思うけど。
Release()とかダミーで実装させるの?
0552デフォルトの名無しさん
NGNG0554デフォルトの名無しさん
NGNGでも、COMクライアント専用(この語もなんだか意味不明っぽいが)
というわけではないだろ。
0555デフォルトの名無しさん
NGNGFreeのBCCでExcelの定数を認識させたいんですが、
さっぱりです。Invokeとかはなんとなくつくれるんですが。
Excelのタイプライブラリの参照例みたいなコードどこかに無いでしょうか
0556デフォルトの名無しさん
NGNGお前、結局何が不服なんだ?
まぁ過渡期ってのは間違いないだろうな。といってもあるものすべて過渡期と言えるが。
安心しろ。いろんな欠点は.NETで解消されてるだろうから。
0557543
NGNG俺は、CやC++用のライブラリをCOMで作りたい。
COMの基本的な概念、インターフェイスとか参照カウントなどは
良いと思うのでそれは導入したい。
しかし、マーシャリングやオートメション、スプリクト言語対応
といった機能は別に使わないのでいらない。
だから、そういったものに付随する制限まで課せられるのは
イヤだなと。
それに、C++で使う為のライブラリをC++で作ってるのに、
訳のわからない理由でC++の機能が使えなくなるのは
なんだか納得がいかない。
だったら使うなと言わないで欲しい。
代わりになるものがあるなら別だが。
生のC++や.NETでは代わりにはならない。
0558デフォルトの名無しさん
NGNGMS社某のお言葉。
0.1%の比率に過ぎないないコンポーネントビルダーは、
99.9%のVBプログラマ向けに、彼らの頭脳では製造不可能な
ものを構築するために存在するんだそうだ。
COMのさまざまな制限はVBあるいはVBA/VBSとの接点による
ものであり、核心部分はC++で記述、フロントをVB/ASP等で
安く作らせるための構図であると。
0559ななし
NGNGホンネなんだろうけど・・・正直過ぎ。(苦笑)
0560デフォルトの名無しさん
NGNGいまさら言ってるお前って・・・
0562デフォルトの名無しさん
NGNGActiveIMM(ActiveX)のCOMサーバをCoIntilaizeEx(NULL,COINIT_MULTITHREADED)で初期化した
スレッド(MTA)で使おうとすると[REGDB_E_IIDNOTREG]なるエラーが出てインターフェイスが
取得できません。
レジストリでそのCLSIDを見ると[ThreadingModel]は[Apartment]でした。
MSのサポート技術情報を見る限りMTA所属のスレッドでも、[Apartment]で登録されている
COMサーバはプロキシ経由で使えそうなのですが、なにか必要な手続きがあるのでしょうか?
ちなみにCoIntilaize()(STA)で初期化したときは正常に取得できます。
0563デフォルトの名無しさん
NGNG0564デフォルトの名無しさん
NGNGガーン、おれは残り99.9%の中のその他大勢だったのか・・・
0.1%の中にはいるにはどうすればいいんだ・・・(鬱
0565デフォルトの名無しさん
NGNG0.1%なんて世紀末におけるサウザーぐらいな奴と思われ。
フハハハーとか言って、余興でジジイ殺しちゃうような。
0566デフォルトの名無しさん
NGNGただしオブジェクトはバイナリレベルで提供と。
0567ななし
NGNG0568デフォルトの名無しさん
NGNGメインSTAで作成したインターフェイスポインタを別のMTAなスレッドで
マーシャリングせずに使ったら、普通に使えてしまったんだがこれって
このまま使っても問題でないんだろうか?
その逆で、MTAなスレッドで取得したインターフェイスポインタをメインSTAで
使用しても同じように問題なく使えました。
ちなみにマーシャリングしようとするとエラーが出て、マーシャリングが
できないんで、そのまま使ってみたんだけど…。
う〜ん、COMは良く分からん(;´д⊂
0569デフォルトの名無しさん
NGNG保護してなくて、かつ同時に複数のMTAからさわるなら、やめといたが無難。
MTAの生ポインタをSTAが使うのは、別に構わない。
0570デフォルトの名無しさん
NGNGインターフェイスポインタをどうやって渡したのかによるね。
インターフェイスのメソッドパラメータで渡してるなら、COMが勝手に
マーシャリングしてくれるから問題なし。問題なのはグローバル変数とかで
共有している場合だけ。
0571568
NGNG>>569
「アパートメント境界を越えての使用はマーシャリングする必要がある」
って各所に書かれてるんだけど、それは気にしなくてもいいの?
普通のコードと同じ扱いで、そのコードがスレッドセーフ(ThreadingModel=both)なら
そのまま使えて、そうでなければ(ThreadingModel=Apartment)クリティカルセクション
とかで保護すればいいだけ?
>>570
グローバル変数で共有してます…。
そもそも、何故マーシャリングできないのかが不明なんですよね。
マーシャリングするには[HKEY_CLASSES_ROOT\Interface]あたりのレジストリ
に何か登録されてないと駄目とかあります?
0572デフォルトの名無しさん
NGNGそれならマーシャリングが必要。マーシャリングするには、マーシャリング用のコードが必要。
TLBがあるならユニバーサルマーシャラを使う。IDLがあるならMIDLでマーシャリングコードを作れる。
ちなみに、CriticalSectionを使うとかいう問題ではないのでご注意。
0573568
NGNGってことは、マーシャリングできないのはマーシャリングコードが無いからか。
ちなみに元発言のMTAなCOMコンポーネントはDirectPlayなんでtlbもidlもないです。
STAの方はidlならあったんだけど、こっちもMS提供な代物なのでいじってもしょうがないしな。
idlがあるからそれを継承してマーシャリング機能だけ追加したものを作るってのは可能?
一番手っ取り早い解決方法は、パフォーマンスを犠牲にして全スレッドをSTAで
やればいいんだろうけど、なんか悔しいし…。
>ちなみに、CriticalSectionを使うとかいう問題ではないのでご注意。
アパートメント境界を越えたアクセスは何かしらの方法でマーシャリングは必須。
ただ、マーシャリングした結果が生ポインタの場合もある。
と言う認識でいいのかな?
0574デフォルトの名無しさん
NGNGThat's correct.
0575569
NGNG使ったりする。当然、作成したスレッドで動く必要がある。マーシャリングすると、
Windowsメッセージ経由でリクエストされるから、DefWndProcからの呼び出しとなる
ってことは、そのSTAで動くから問題なし。だから、569はちょっと乱暴で、572が正しい。
でも、ユーティリティクラス(引数同志の演算とか。ハッシュ計算するとかさ)をVBで作っちゃった
ような場合(だからSTA)で、TLS使ってないことがわかりきってれば、別にマーシャリング
しなくたって構わないわけ(だが、透過性を無視してる=COMの原理破壊)。
その他、MTAでCoCreateInstanceするとブルブルとか、いろいろあって、おもしろい。
0576569
NGNGあと、STAだからパフォーマンス犠牲というのは必ずしも正しくはない。並行動作
に意味がないのであれば、STAはひたすら同一スレッドのスタックを使いながら
突っ走るから、実は高速な動作が1番期待可能。(アウトプロセスサーバがSTAだと
リクエスト1個づつしか処理できないから、パフォーマンスは低くなるけど)
0577568
NGNGまず訂正。前発言の>>571は>>572でした…。
>>573
全部「That's correct.」と解釈してもいいんだろうか…。
説明が無いだけにちょっと不安(^^;
>>569さん
COMの手順に則る限りはマーシャリングは必要なんですね。
「そうでなければ自己責任で…」って感じでしょうか。(^^;
もう一つのパフォーマンス犠牲の話ですが、今回はDiretPlay使っているので
たぶんパフォーマンス落ちます。測っては無いので、どれぐらい落ちるかは不明ですが。
それに、DirectPlayがスレッドを乱立してる感じなんで並行動作してるでしょうし。
う〜ん、どうにも解決手段が見つからない。こう言う時こそMSDNのインシデント使うべきか…。
0579569
NGNGSTA側ってなに? バイナリの内側の処理を勘案してMTAから使っても平気とか考えるって
のがCOM違反なだけで、使って問題なければ別にOKなわけだから、そっちでごまかすって
手もあるよね。
STAをMTA(のランダムなスレッド)から生アクセスする問題は、次の点
1.レースコンディション(そりゃそうでしょ?)
2.HWNDの取り扱い(これ違うスレッドから呼ぶとエラー食らうWin32APIもあるから当然)
3.規約違反(気にすればってことで)
4.TLS(スレッドローカルストレージ)使われてるとクラッシュ
#1.については、STAで作ってるんだからクリティカルセクション保護は当然してない。
これらに問題なければ3.に抵触するってだけの話。
0580569
NGNGということもあるから、基本はマーシャリング必須。しかし、5.についても実は
雰囲気でわかったりもするし(そもそもデバッガで動かせばロードしたDLLがわかる
から、把握できるし。
0581568
NGNGSTAなコンポーネントはActiveIMMっていうGlobalIMEを使うのに必要な
ActiveXコンポーネントです。
で、
>STAをMTA(のランダムなスレッド)から生アクセス
してみたんだけど、駄目でした。クラッシュはしなかったけど、どうにも
メッセージ処理が上手く言ってないっぽい。
[OnDefWindowProc()]←こんなメソッドもあるんでかなり怪しいし。
あと、クラッシュはしなかったんでTLSは使ってなさそう。ってな感じかな。
こっちはもうちょっと探ってみるけど…。
という事で、解決策は
・STA一本で行く
・何とか完全分離してみる
・マーシャリングコードを自分で用意してみる(できるのか?)
・MSDNのサポートで聞いてみる(「できません」と答えてきそう…)
・その他、あれば募集中w
ってな所?
0582569
NGNG問題点は、SendMessageしてSTAで処理が完了するまで待たされることにあるから、
STAで動いてる側に対してPostMessageで処理を行えと通知する。(ようするに、自分で
非同期COM呼び出しをするってこと)そもそも、STA側のインターフェイスポインタを
マーシャリングできないわけだから、いずれにしても自分でやるしかないし。
つまり、ActiveMMを貼り付け?てるウィンドウのHWNDをグローバルに可視状態にして、
MTAはそこめがけてPostMessage(WM_APP、wParam, lParam)してやるわけ。
応答が必要な場合は、Eventで待つか、グローバル変数に状態を入れてポールするしか
ないけど(SendMessageで応答を待つのも悪くはないが)。
注意点は、wParamやlParamに自動変数のポインタを渡すのは禁物って(あたりまえだけど)
ことぐらい。
0583569
NGNG上のは中途半端だからもう少し付け加えると、COMにマーシャリングさせられないわけだから、
STA側のウィンドウハンドラで、WM_APPを受け取ったら、wParamとかから、ActiveMMの適切
なメソッドを呼び出してやる(=自分でプロクシ/スタブをやってやる)という意味です。
0585デフォルトの名無しさん
NGNG0586568
NGNGDirectPlayにもActiveIMMにもマーシャリングコードが用意されてないらしいのですよ。
なんで、CoMarshalInterface()を使ってもマーシャリングできないのです。
それで、>>581の解決策のうち手動マーシャリングという話になったのですよ。
まぁ実際使ってるのは
CoMarshalInterThreadInterfaceInStream()
↑こっちですけど、中身は一緒ですし。
ちなみに返ってくるエラーはREGDB_E_IIDNOTREG(0x80040155L)です。
このエラーはMSDNに具体的な内容が記述されていないので、
「マーシャリングコードがないからマーシャリングできないらしい」
と言う不確かな結論になっているのですよ。
0587569
NGNGして、HRESULT確かめてみるってのが、最初にすべきことだったかも。
ところで、ActiveIMMってのはどこの製品? なぜ、typelibマーシャリングを禁止
してるんだろ? (MFCのDLLで作ったのかな?)
0588568
NGNG>>569さん
QueryInterface()やってみました。結果はE_NOINTERFACE(0x8004002)。
idlではIUnknownを継承してたのでやっぱりと言う感じ…。
それと、idlに「tlbは全く使用しません」ってなことも書いてありました。
ちなみにActiveIMMはMSの製品(のはず)で、Win9x系での多言語入力をサポートする
ActiveXコンポーネント。所定のSDK入れればWin2kでもコンパイルだけなら出来ます。
う〜む、これ作った人がIUnknownから継承させたのが全ての元凶?(-_-;
0589569
NGNGたとえば、適当なOCXあたりに、QI(IID_IDispatch), QI(IID_ITypeInfo, QI(IID_IStream)
とか、やってけば、そこそこヒットします。
HRESULT QI(IID& iid, void** pp)
{
if (IsEqualIID(iid, IID_IUnknwon) { *pp = this; return S_OK; }
if (IsEqualIID(iid, IID_IStream) { *pp = m_stm; return S_OK; }
....
みたく実装するから。ミソは上のm_stmはQIに対して自分のthisではなく、こっちのthisを
返すこと。ワケワカな書き方だけど、まあそんな感じ。
0590569
NGNGで、見るからに、MessagePumpどうしたとか、スレッドべったりだから、これはすっぱりMTAからの利用は
あきらめて、ホストしているSTAに対してメッセージ投げてSTAで処理させるしかないっす。582の方法。
0591568
NGNGふむふむ、要はCOMサーバ内に目的のインターフェイスが実装されてて
それをQIで返してくれれば、継承しようがしまいが問題ないと言うことですね。
もちろん、IUnknownは必須でしょうけど。
で、やっぱり手動マーシャリングしかないのですね。うむ、それで頑張ろう。
いろいろ聞いたついでにもう一つ聞いておきたいんですが、STA側からMTA側の
インターフェイスをグローバルで共有して扱う場合は、規約違反とパフォーマンス
ペナルティがあるだけで特に問題ない?
実際にコードを走らせた時は問題なく動いてるけど、どうなんでしょう?
0592569
NGNGスレッドに結びつかないってことなんだから。じゃあなぜ、BothとFreeに分かれてるか
といえば、STAでCoCreateInstanceしたときに、どこに作られるかって点がひとつ。
(Bothは呼び出したSTAに作られるけどFreeは「どこか」に作られる)
ちなみに、Inside COM日本語版309ページに「つまり、フリースレッドのコンポーネント
は、同じプロセス内のアパートメントスレッドに対してポインタを直接渡せるのである」
って書ききってるよ、今、初めてそのへん読んだけど。いや、実はなぜ、STA->MTAに
マーシャリングが必要かそっちがわからん……
0593569
NGNGオブジェクトを(デュアルCPUで)使うとしたって、MTAでレースコンディションに
対するクリティカルセクションでひっかかるとかはあるにしても、両方のSTAは、
単にcallで自分のとこのスタックを走ってくだけだから。(生ポインタだから、プロクシ
を通さない、つまりC++での関数呼び出しと変わらないわけ)
0594568
NGNGん?BothはSTAでもMTAでもどっちでも利用可能ってことじゃないんですか?
実際は作成したスレッドが所属する方に入って、STAならCOMの機構により順番に
処理されてMTAならリアルタイムに処理される。
そこで、普通にスレッドセーフに作ればBothでいけるんだけど、STAに使われる
メッセージポンプを壊すような作りにしてるとか、STAで使うのがまずい場合だけ
Freeになると
http://support.microsoft.com/default.aspx?scid=%2Fisapi%2Fgomscom%2Easp%3Ftarget%3D%2Fjapan%2Fsupport%2Fkb%2Farticles%2Fjp150%2F7%2F77%2Easp&LN=JA#
↑ここらへん読んでそう思ってました。
STAからMTAなインターフェイスを使う時にマーシャリングする理由は
カスタムマーシャリングを考慮してるからじゃないんでしょうか?
普通は必要ないけれども、カスタムマーシャリングをする時としない時とを
場合わけするとややこしいから、とりあえずしとけ。みたいな
0595569
NGNGあっ、そうか。それはすごく納得。
>メッセージポンプを壊すような作りにしてるとか
確かに引用ページにもそう書いてあるけど、これは意味不明。
でも、その後にある、STAクライアントが自分のインターフェイスポインタをコールバック
用に渡すシナリオについては、確かにマーシャリングが必要だから、生ポインタを使う
呼び出しがまずいってのもわかった。
thanks.
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNGCOleClientItem* pItem = new COleClientItem( pDocument );
pItem->CreateFromFile("TEST.XLS");
上記の方法で作成されたOLEアイテムから TEST.XLS を抽出して
保存する方法が分かりません、どうやればいいのでしょうか?
0598デフォルトの名無しさん
NGNGCOM公開後は仕様変更しちゃだめ
機能追加は実装の追加で補い旧実装はそのまま放置
COMには「バージョン管理はしない」などという
お約束事があったかと思うが
皆様はお考えを頂戴したく仕る
0599デフォルトの名無しさん
NGNGDirectX3位の時、バージョン上げたら実行結果が異なることがあったと思う。
新バージョンは機能追加ではなく新しいインターフェイスで公開すればいい
0600デフォルトの名無しさん
NGNGこのCOMがインプロセスでもローカルサーバでもかまわないが
閉じた世界でのFixupであれば599の言うのも正論であると思う
がDCOMリモートに配置された分散オブジェクトで
たとえば第一次リリースしたDCOMを多数の
部門で共有していた場合などは勝手に仕様変えて動作が変わると
困るのでは?
COMを設計する上で
仕様上の規約なのかどうかをはっきりさせたいのですが
皆様のご意見をお願いします
0601デフォルトの名無しさん
NGNG超訳)インターフェイスはイミュータブルに決まってんだろ。IIDを割り当てて公開しちまったら、何ひとつたりとも変えんじゃねぇ。ゴルァ。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncomg/html/msdn_therules.asp
とは言ったって、使ってるのが自分だけとかだったら、思う存分変えても誰も困らないのもこれ自明。
0602デフォルトの名無しさん
NGNG配布用にDll(Un)RegisterServerを呼ぶ(アン)インストーラをわざわざ別プログラムで
用意したのですが、なんだか面倒です。
一般的にはどのような形態で配布されるのでしょうか?
0603デフォルトの名無しさん
NGNGご回答ありがとうございます
そうですよね確か
だから基本設計の時にじっくりと拡張したときの事まで
考えてつくらないと恥ずかしいものができてしまうとか
ありですよね
慎重に設計せねば・・(事故レス)
0604デフォルトの名無しさん
NGNGなぜ?
第1段階
interface IFoo : IDispatch { // まあdualインターフェイスでいいや。
HREUSLT method1();
};
coclass {
[default] interface IFoo;
};
第2段階
interface IFooEx : IFoo {
HRESULT methodEx();
}
coclass {
[default] interface IFooEx;
interface IFoo;
};
第3段階
interface IFooExEx : IFooEx {
HRESULT methodExEx();
}
coclass {
[default] interface IFooExEx;
interface IFooEx;
interface IFoo;
};
で、いいじゃん。<よかねぇよ。でも、この手はありだから。
0605デフォルトの名無しさん
NGNGケースバイケースということで
基本的には method1()を公開したら
method1()の内部動作を修正するのは
はまずいです。内部動作仕様の変更は×です
methodEx... methodExExと新規メソッドとして
機能を追加するなら○です
ようは問題があった古いバージョンも残しておかなくては
ならないが正式なCOMの仕様だと思いますが・・
・バージョン管理を行わない(バイナリレベルの互換性保障)
ちなみにidlで内部バージョンを定義はできますが
ソースは古山さんの「DCOMガイドブック」オーム社です
もちろん個人レベルのローカルPC内の仕様変更は誰にも
影響はでませんからありということで
0606デフォルトの名無しさん
NGNG配布んときはselfregフラグ立てて(リソースのバージョン情報だったかな)
インストーラにレジストさせてるよ漏れは
そうでなければ客にレジストをやらせる方法もある(爆)
dll, exe, ocxでも対外はsystem32にぶっこむのパターンが多いと
思う これもインストーラまかせ
0607602
NGNGselfregというのは知りませんでした。
インストーラというのはやはり別プログラムですよね?
本当にただのdllひとつだけなので、例えばinfファイルなどでなんとか
ならないものかと思いました。
0608デフォルトの名無しさん
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る、とありましたけど、どなたかいい参考書ご存知ありませんか?よろしくおながいし
ます。
0709デフォルトの名無しさん
NGNG超マルチうざい
0710デフォルトの名無しさん
NGNGごめんね。でも、情報を得るには仕方がない・・・・・
0711デフォルトの名無しさん
NGNGハァ?
0712デフォルトの名無しさん
NGNG氏ね。
0713デフォルトの名無しさん
NGNG何いってんの?
中学生?
0714デフォルトの名無しさん
NGNG0715デフォルトの名無しさん
NGNG厳密には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で見比べてみるとよくわかるよ。
0717デフォルトの名無しさん
NGNG>>710です。なんか、思い出しました。2年前にそんなことしてました。なつかしや〜。
結局、一番単純な古典的DLLを作って、VBAから呼ぶ路線にしたいと思います。
VBAからWin32APIを使うために必要は知識を網羅した(?)参考書も、他スレで教えてもらいました。
一番単純な古典的DLLで作ったほうが、Solarisなんかに計算エンジンを移すときに、楽そう。
それにしても、やっぱりみなさん詳しいですね。ぼくは、ホントアマチュアだから。
これからも時々お邪魔します。
(^ー^)ノ ヨロシク オネガイシマス
0718bloom
NGNGhttp://www.agemasukudasai.com/bloom/
0719COM初心者
NGNG右クリックし、詳細設定タブを開くとデバッグという項目があってデバッ
ガ内で実行するというチェックボックスとデバッガパスという入力フィー
ルドがあります。これはどのように使うのでしょうか?これを使ってCOM+
のデバッグがもっと的確にできるようになるといいのですが。
0720デフォルトの名無しさん
NGNG>Internet Explorerのイベントを処理する (検討中)
のところが知りたいんだけど
どっか参考資料ない?
0722720
NGNG見たけど使ってないぞ
0725722
NGNGすいません。
0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNG→同じ
違う
?
0729デフォルトの名無しさん
NGNG?
0730COM初心者
NGNG0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNG0733名無し@沢村
NGNG0734デフォルトの名無しさん
NGNG関数化すればいいやん
ただそれだけのことを何で?
0735デフォルトの名無しさん
NGNGいかん、容易に釣られてもた
鬱だ氏のう
0736IP記録実験
NGNGhttp://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セキュリティガードに…」
というコピペを流行らせる会 会長↓
0738デフォルトの名無しさん
NGNG0739デフォルトの名無しさん
NGNG鯖のほうで制限しない限り。
0740デフォルトの名無しさん
NGNGネタですよね?
0741デフォルトの名無しさん
NGNG逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。
二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm
ようするに上告しても今の制度では100%無駄。 これで完全終了ってことか。
0742デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 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ご愁傷様。
0745デフォルトの名無しさん
NGNGトリップだってさ
全然ボツ。
0746デフォルトの名無しさん
NGNG掲示板の一番下が「2ちゃんねる20030107a」
ってなってる板じゃなかったかな?
0747デフォルトの名無しさん
NGNG漏れが恐いのは、今後の他の裁判だ。
まだいくつか残ってるんでしょ?
0748デフォルトの名無しさん
NGNG0749デフォルトの名無しさん
NGNG誤爆じゃなくて、ここの前スレのコピペだと思われ。
0750デフォルトの名無しさん
NGNG0751デフォルトの名無しさん
NGNG鷺の質問・雑談スレに移動して下さいね。
0752デフォルトの名無しさん
NGNGシミュレート
0753デフォルトの名無しさん
NGNGメルマガまってるよ。
0754デフォルトの名無しさん
NGNG0755デフォルトの名無しさん
NGNG0756デフォルトの名無しさん
NGNG0757デフォルトの名無しさん
NGNG雑談、学問、技術系な板には関係ないな。
0758デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNG0761デフォルトの名無しさん
NGNG実際カラダ張ってるのはひろゆきなわけだからな……。
動機はよくわからないが。
0762デフォルトの名無しさん
NGNG0763デフォルトの名無しさん
NGNGネタ帳見ながらやるのやめてくれ、一応カネ貰ってんだろ
0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNGやはり「書き込むことに責任あることを認識しろ」かと。
つーか、まもなく6億〜
0766デフォルトの名無しさん
NGNG0767デフォルトの名無しさん
NGNGどこか詳しい解説ページ等はございますでしょうか?
0768デフォルトの名無しさん
NGNG0769デフォルトの名無しさん
NGNG特定の鯖に依存しないP2Pは理想的でありんす。
あれがWebのあるべき姿でありましょう。
0770デフォルトの名無しさん
NGNGニュース速報板だからね。
0771デフォルトの名無しさん
NGNG削除依頼を内容証明以外の方法で行っても有効ですが、条理が根拠ではありません。
意思表示の一般原則であり自明のことです。
免責の対象にはならないから安心してください。
0772デフォルトの名無しさん
NGNGがんばってください
0773山崎渉
NGNG0774デフォルトの名無しさん
NGNG0775山崎渉
NGNG0776デフォルトの名無しさん
NGNG0777山崎渉
NGNG0778デフォルトの名無しさん
NGNGまだCOMを学ぶ価値はありますか.
.NETとどう関わりあっているのでしょうか.
0779デフォルトの名無しさん
NGNG価値が有るか無いかで言えば無いと思う。現在の.NETでは
一応、COMへのインターフェイスを用意されていて過去の資産を
利用出来るようにしているけど、あくまでも一時的な処置であり、
MSの思惑としては今までCOMでやってきた事も全て、.NETで行いたい
とかんがえているはずだから。
0780デフォルトの名無しさん
NGNGでも、とりあえず出来る出来ないで言えば、できた方がいいのでは。
Webシステム等のクライアント部品として、ActiveX使う事もあるでしょ?
#...ま、必ず覚える必要があるって訳でも無いが。
0781デフォルトの名無しさん
NGNG暇つぶしにはなるだろうけど、必要に駆られないと身にならんと思う
0782778
NGNGCOMも横目で眺めつつ.NETの勉強してみます.
0783デフォルトの名無しさん
NGNG------
LPITEMLISTを解放するために手順が必要になってしまいます。
まずIMallocっていうインターフェースを持って来なくっちゃならない。
名前から想像できる通り、IMalloc ってのは COM ベースのメモリ
アロケータ(メモリの確保/解放を実行する)のようなもので結構
いろんなところで登場してくる。 まさか API ひとつだけですんじゃ
うようなもののために COM 使うとは思わなかったけど、要求され
てるんでしょうがない。
http://www.bd.wakwak.com/~opapa/VC/API/SHBrowseForFolder.htm
-------
この辺のプログラミングを理解するには、どんな本が
適切でしょうか? Win32 API側で確保したメモリを
アプリ側で解放するらしいのですが、説明を読んでも
やり方が今一つわからずに使えません。
コモンコントロールなんかのWinプログラミングの基礎本
(by ハーバードシルト)と、柏原さんの「MFCによる
Winプログラミングの基礎知識」は読みました。
>>68は、おいらが読むのに適切でしょうか?
抽象的な概念だけじゃなく、実際のコード書きに
直接役立ちますか?
0784名無し@沢村
NGNGヌヒよ、今日は特別に便利なAPIを教えてやろう。
それはCoTaskMemFree()だ。
0785デフォルトの名無しさん
NGNGOLEのアロケータ(CoTaskMemFree)とシェルのアロケータが今後も一致するという保証は無い
0786名無し@沢村
NGNGMSDNのCoTaskMemAlloc()の説明には、
Allocates a block of task memory in the same way that IMalloc::Alloc does.
て書いていますが、それでもだめですか? どうか、教えて下されー。
0787デフォルトの名無しさん
NGNGの実装が同じである保証がどこにある?
0788名無し@沢村
NGNGVC7付属のshlobj.hには下記のような説明があるのですが、それでもだめですか?
教えて下されー。
// Notes:
// In next version of Windowso release, SHGetMalloc will be replaced by
// the following macro.
//
// #define SHGetMalloc(ppmem) CoGetMalloc(MEMCTX_TASK, ppmem)
0789デフォルトの名無しさん
NGNGVC6のshlobj.hでもPSDKOct2002のshlobj.hでもそう書いてある
沢村様に論破された漢として語り継がれそうだ
0790デフォルトの名無しさん
NGNGありがとうございます。
CFolderDialog::~CFolderDialog()
{
CoTaskMemFree(lpItemIDList);
}
という風にデストラクタに実装してみました。
デバッカで追ってみたのですが、CoTaskMemFree実行
直後はlpItemIDListも、その参照先も特に変化ないのですが、
こんなもんなんですかね?
きちんと解放されたかどうか確認する方法はありますか?
0791名無し@沢村
NGNGそれはCOMより新しいのか?
COMでやっとアプリがつくれるようになった俺としては、そういうのが出てくると非常に困る!
NETで検索してみたが出てくる件数が多すぎてわからなかった…
ヌヒ等よ、教えてはくださらぬか?
0792デフォルトの名無しさん
NGNGおれもつい半年前にやっとのことでCOM開発できるようになったんだが、
.NETをやってみて衝撃を受けたよ。
もうCOMなんてやっててもニーズがない。
はっきりそう分かった。
.NETならCOMの10倍は楽にCOMより使いやすいコンポーネントが作れる。
時代の流れだと思って.NETの勉強をした方がいいと思う。
ショックはでかいと思うけどね、、おれがそうだったように。。。
でもCOMの知識があるとないとでは差は大きいから無駄ではない。
COMを知らない香具師はどれだけ.NETの功績か大きいか絶対わかんないだろうな。
0793名無し@沢村
NGNGNETの解説したページがあれば教えてはくださらぬか?
>.NETならCOMの10倍は楽にCOMより使いやすいコンポーネントが作れる。
性能もCOMよりいいのか?ならCOMは意味ないじゃん!!
NETって意味が広すぎて検索しても出てくる件数が多すぎてわからぬのよ…
ヌヒよ、教えてはくださらぬか?
0794デフォルトの名無しさん
NGNGこっから辿ってソース嫁。これ最強。
0795デフォルトの名無しさん
NGNG0796デフォルトの名無しさん
NGNG見捨てることになる罠。
0797デフォルトの名無しさん
NGNG0798デフォルトの名無しさん
NGNGActiveX 使いたくて、.NET憶えたえた後にいまさら COM 何ぞ勉強中なんだけど。
0799デフォルトの名無しさん
NGNG基本的な事(しかも厳密にはCOMの質問ではない)かもしれませんが、
質問があります。
BSTRな文字列を使用する場合はにSysAllocStringを使用しますが、
こいつをSysFreeStringするのは誰がやらなければいけないのでしょうか?
たとえば、
コンポーネントのメソッドに
HogeA(BSTR strHoge)
があった場合、コンポーネント内部でSysFreeStringを行う必要があるのでしょうか?
また、コンポーネントのメソッドに
HogeB(BSTR* strHoge)
があった場合、(値を返す場合)SysFreeStringが行うのでしょうか?
また、IConnectionPointなイベントで、HogeAのようなイベントがあった場合、
イベントを受け取ったクライアント側でSysFreeStringを行うのでしょうか?
すいません、ご教授願います。
0800デフォルトの名無しさん
NGNGHogeA(BSTR host);
呼び出し側が解放
HogeB(BSTR* hoge);
返送するなら、呼ばれた側が解放、確保。呼び出し側で解放
0801800
NGNG[out]BSTR* hoge
なら、呼ばれた側は解放せずに確保
[in,out]BSTR* hoge
なら、解放してから確保。
0802799
NGNGレスありがとうございます。
大変参考になりました、これで安心して作成できます。
しかし皆さんMSDNの解説ソースをよく発見できますねぇ(失礼な言い方ですが変な意味じゃないです)
自分なんかは膨大な情報量ですぐにソースが発見できません。
やっぱり英語力とかでしょうか・・・・
ありがとうございました。
0803デフォルトの名無しさん
NGNGThe problem was, when Microsoft added support for IClassFactory2, they added the QueryInterface for IClassFactory2 after the existing code that queried for IClassFactory.
・・・
0804デフォルトの名無しさん
NGNG0805デフォルトの名無しさん
NGNG0806デフォルトの名無しさん
NGNG0807デフォルトの名無しさん
NGNGBC++5.5 でCOM関連のプログラミングってできますか?
0808デフォルトの名無しさん
NGNG音楽ギフト券の全プレあり
http://camellia16.fc2web.com/ongakudb.html
0809
NGNGWin32 API質問スレからこちらを紹介されました。
COM で QI して得たポインタが サスペンド/ハイバネーションを行なうと、無効になる
ことがあります。色々調べたら 6分通信がされなかったらポインタを無効にする仕様だ
そうですが、うまい回避策(workaround)を知っていたら教えて下さい。
ちなみに QI したポインタを全部覚えておいて、レジュームメッセージを受けとって、
Release() -> QI しても、先にポインタを使われることがあって、だめみたい。
(´・ω・`)
0810デフォルトの名無しさん
NGNG誘導されてきた場合、その旨伝えたほうが良いらしいよ
とりあえず
WM_POWERBROADCAST / PBT_APMSUSPEND
などでサスペンドを検知して対処するとか
ああ、向うでもこっちでも伝えましたよ?
それから、メッセージで処理すると
> ちなみに QI したポインタを全部覚えておいて、レジュームメッセージを受けとって、
> Release() -> QI しても、先にポインタを使われることがあって、だめみたい。
と書いた通り。もちろん、サスペンドする直前に Release() しちゃっても、レジューム
する時に、レジュームハンドラの処理以前にポインタに触られると落ちます。
で、困ってます。
0812デフォルトの名無しさん
NGNG方法ってないですか?
インストーラだとサイズがでかくなるし、手動だと初心者は門前払いになって
しまうし、なによりめんどくさい思いをさせてしまう。
0813デフォルトの名無しさん
NGNGアウトプロセスサーバにして、起動するだけで登録するようにする。
削除は-uオプションにでもすればいいんじゃない。
0814デフォルトの名無しさん
NGNGinprocDLLをCPLにしてコントロールパネルでインストール/アンインストール可能にする
0815デフォルトの名無しさん
NGNG(何のためのCOMや、、、)
0816813
NGNGそれは、毎回exeを起動するたびにRegisterServerするってことですか?
確かにそれは良さそうなんだけど、なんか不安感が拭えないですね。
重くなりそうだし、レジストリ毎回書き換えることになりませんかね?
でも、やっぱり、それしか方法は無いのかな・・・
0817812
NGNG0818デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNGレジストリに書き込むタイミングぐらい、自分の好きなようにすればええやん。
0820デフォルトの名無しさん
NGNGんなこと無いよ。事実MFCのEXE系COMサーバは、そうやってるし。(逆に、/regserver
は自力でやらにゃならんかった。VC4の頃の話だけどな)
0821デフォルトの名無しさん
NGNGまた登録が必要ですか?
0822デフォルトの名無しさん
NGNGコピーしても元のファイルを参照しに行くだけで問題はないです。
もちろんコピー先のファイルは何も意味はもちませんが。
移動したのであれば再登録が必要です。
0823デフォルトの名無しさん
NGNGなるほど。
では、パスを変えて再登録した場合、二重に登録されますか?
それとも、上書きされてしまうのですか?
0824デフォルトの名無しさん
NGNG自分で試してみろよ
GUID が同じものが別々登録されたとすると COM の概念から言ってどうなると思いますか?
と答えておきます。
0826デフォルトの名無しさん
NGNGなるほど。やってみたら、上書きされるみたいですね。
>>825
上書きされないとバイナリが一つに絞れないということでしょうか。
ありがとうございました。
0827nanasi
NGNG| フサでーす
\ ______
V
∧ ∧∩ ∩∧,,∧
( ^д^)/ 目 ヽ(・ω・`)
⊂ | || ミ ⊃
〜| | .|| ミ ミ〜
∪ ∪ || ∪ ∪
/|
/ ̄ ̄  ̄ ̄ ̄ ̄
| ・・・・・・( ´・ω・)。
\_______
0828デフォルトの名無しさん
NGNGこうやってnewしたインスタンスってどうやったらdelete出来ますか?
0829デフォルトの名無しさん
NGNGUNICODEでなく、SJISです。これだとうまくいきません。
VARIANT vParam;
vParam.vt = VT_LPSTR;
vParam.pcVal = pcValue;
_ParameterPtr pPrm = __getParameterPtr(ParamName);
if (pPrm == NULL) {
pPrm = FCmd->CreateParameter(
ParamName,
adChar,
adParamInput,
iLen,
vParam);
0830デフォルトの名無しさん
NGNGアスキーですか。ウニコードですか
0831デフォルトの名無しさん
NGNG0832デフォルトの名無しさん
NGNGそれをSJISに変えるにはどうしますか?
0833デフォルトの名無しさん
NGNG0834デフォルトの名無しさん
NGNG0835デフォルトの名無しさん
NGNGどなたか知りませんか。
0836デフォルトの名無しさん
NGNGイベントを受け取りたいんですが、
どこかにわかりやすく紹介されているサイトないですかね。
イベントが受信できず、はまっとります。
0837デフォルトの名無しさん
NGNGBCB使う。
VCLの中でメッセージハンドラが受けてて見やすい。
0838836
NGNGCBuilderでつか?
すんません、もってないんですよ・・・・・・
VisualStudio.Netしか・・・・。
しかも、IdispachされてないCOMなので、オートメーションは
つかえないんでつ・・・・
0839デフォルトの名無しさん
NGNGCOMを作る側と使う側とわけわかになる、まさにCOMの弊害。
BCBにしてCOMを捨てるべき
0840836
NGNGしかし、VCLって情報が少ない??ですね。
どんなクラスがあるのか知りたくても、ほとんど情報がない。
英語ならあるのかな・・・・
自分が欲しい機能がないのに試しに購入するのも
バカらしいので、調べてみまつ。
ま、平行して.netで開発を続けるわけですが・・・・
0841デフォルトの名無しさん
NGNG.NETよりはコンポーネント多いよ。
ソース付のフリーのコンポが無限にある。
0842デフォルトの名無しさん
NGNGATLがやってることを解析しる!
ちなみにATLだとこんなのあり
ttp://www.s34.co.jp/cpptechdoc/misc/comevent/
0843デフォルトの名無しさん
NGNGうざい
0844デフォルトの名無しさん
NGNGいまいち、COMがわかりません 教えてください!!!
0845デフォルトの名無しさん
NGNGと理解すればいいでしょう。正確にはUnicodeに限らずバイナリ
データを入れても構いません。サイズ情報を持っているので
Nullも入れることが出来るからです。
0846デフォルトの名無しさん
NGNG0847デフォルトの名無しさん
NGNGNULLとは書いてないだろ。
Null文字のことだよ、ボケが。
0848デフォルトの名無しさん
NGNG0849デフォルトの名無しさん
NGNGやっぱりいまいちだと思う
0850デフォルトの名無しさん
NGNG大変だろうな。
0851デフォルトの名無しさん
NGNGウデ利きのプログラマなら、処理性能(スループット)だけなら何とか
なるかもしれないが、生産性はお話にならない予感・・・。(-_-;
0852デフォルトの名無しさん
NGNG分からんぞ。良い感じのインターフェースを持ったクラスに仕上げてくれるかもしれん。
0853デフォルトの名無しさん
NGNGDDEやSendMessageやkeybd_eventなどか?
たとえ腕利きでもまともな性能を出せるとは思えないが
0854デフォルトの名無しさん
NGNG0855デフォルトの名無しさん
NGNG質問です。
VBで、アーリーバインド ←→ レイトバインド
のコードの相互変換をしたいのですが、例えば、
Set objHoge = CreateObject("Hoge.Instance")
というコードをアーリーバインドに書き換える場合、"Hoge.Instance"の
文字列から、参照すべきライブラリのフルパス、ファイル名、型名
(Dim Hoge As Library.Type)を調べる方法はありますか?
また、その反対に、アーリーバインドで
Dim Hoge As Library.Type
と宣言しているコードを
Dim Hoge As Object
に書き直す場合、
CreateObject(Arg)
の文字列を調べるにはどうすればよいのでしょうか?
0856IUnknown
NGNGレジストリエディタで 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 などのツールをつかうことでもう少し効率的に情報を
取得することもできるでしょう。
0857デフォルトの名無しさん
NGNGありがとうございます。(結果報告は後ほど・・・)
0858デフォルトの名無しさん
NGNGソース->COM用ソース->コンパイラ->COM生成
という感じで実行時型生成できそうな気がするんだけど
どうなのでしょうか?
0859デフォルトの名無しさん
NGNG遅くなりましたが、お蔭様で無事に解決できますた。m(_ _)m
0860山崎渉
NGNG0861デフォルトの名無しさん
NGNGEssential COM を読み始めたんですが、
Visual C++でコンパイルしたDLLが、他のコンパイラで
利用できないってのはホントなんですか?
DLLって使ったこと無いから、よく分からないんですが。
0862デフォルトの名無しさん
NGNGほかのコンパイラでは利用できない」、って話だろ。
そのとおり。
0863山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0864山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0865まりも
NGNG作った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から呼び出した場合
インターフェイスの関数名がでません。(メンバ一覧にのっていません)
うまく説明できてないところがありますが、どなたかご存知な
方おしえてもらえないでしょうか?よろしくお願いします。
0866デフォルトの名無しさん
NGNGえっ? IDispatch インターフェイス?
0867デフォルトの名無しさん
NGNGそれに別のActiveXコントロールって貼り付けられますか?
一体どうやればいいのでしょうか。
貼り付けたらダイアログが出てこなくなってしまうんです。
0868867
NGNGちなみにMFCです。
カスタムコントロールやActiveXを貼り付けるとダイアログが消失します。
0869デフォルトの名無しさん
NGNGttp://www.tomosan.org/dev/vs/activex.html
コレで作ったダイアログにActiveXコントロールを貼ると
ダイアログが消えてしまいます。
0870山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0871867
NGNGもうActiveXなんて廃れてるよな。
COMなんて今さら勉強したくないのに。
会社辞めてやる!
0872デフォルトの名無しさん
NGNGそれを探せないなら辞めたほうがいいんじゃないかな。
0873デフォルトの名無しさん
NGNG0874デフォルトの名無しさん
NGNG“電波少年的”異色FM番組 3局共同制作「OLEっち」
0876デフォルトの名無しさん
NGNGIDLを
typedef struct _a{
int a;
int b;
} a;
interface [ 略
GetData(a *pVal);
みたいに書いて、クライアントでは
a data;
interface->GetData(&a);
とかしてIDLで定義した構造体をやりとりしたいんです。
MIDLでは標準のインターフェイスじゃないみたいな警告がでるんですけどね。
データが数100個あるから、インターフェイス作って
プロパティをそれだけ書くのはめんどいというかためらわれるんです。
やっぱりきちんとインターフェイス作った方がいいですか?
0877デフォルトの名無しさん
NGNG0878若葉
NGNG何を勉強したら良いでしょうか。または参考になるサイト、お勧めの書籍などございましたら、
教えてください。
0880若葉
NGNGありがとうございます。とても参考になりました。
また長年悩み続けてきたものが解決されました。
ほんっと感謝してます。
0881デフォルトの名無しさん
NGNGなので、こんなんだったら簡単という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);
という感じ。
0882デフォルトの名無しさん
NGNG0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNG簡易COM的な仕様のDLLを作るのは、COMでレジストリを
汚すのがいやな場合なんかには有効なテクかもね。
0885デフォルトの名無しさん
NGNG特にHKEY_CURRENT_USER\Softwareに書き込むだけで騒ぐ奴はどうしようもない馬鹿。
0886デフォルトの名無しさん
NGNG0887デフォルトの名無しさん
NGNG0888デフォルトの名無しさん
NGNGあるんでしょうか??
教えてくださいーーー。
0889デフォルトの名無しさん
NGNG0890デフォルトの名無しさん
NGNGMFCで作成された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.
とはあっても、実際にはまだ必要な手続きが足りないのでしょうか・・・。
0891デフォルトの名無しさん
NGNG☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
★☆
☆★ 送料激安!! 送料激安!! 送料激安!!
★☆ http://www.get-dvd.com
☆★ 激安アダルトDVDショップ
★☆ お買い得セール1枚500円〜980円!急げ!
☆★ インターネット初!「きたぐに割引」
★☆ 北海道・東北の皆様は送料も激安!
☆★ http://www.get-dvd.com
★☆ スピード発送!
☆★ http://www.get-dvd.com
★☆ 商品が豊富!
☆★ http://www.get-dvd.com
★☆
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
0892デフォルトの名無しさん
NGNGComspy
0893デフォルトの名無しさん
NGNGサンクスです。明日試してみます。zzz・・・。
0894デフォルトの名無しさん
NGNGforeach (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でしか戻ってきません。
なにか足りない点がありましたらご教示ください。
(具体的なコードが必要でしたらその都度晒します)
0895山崎 渉
NGNG0896tim
NGNGシステムアドインとして登録(HKEY_LOCAL_MACHINE に書き込み)せずに、
システム上の全てのユーザーで使用できるようにしたいのですが、
誰かご存知の方いらっしゃいますでしょうか?
http://support.microsoft.com/default.aspx?scid=kb;ja;290868
MSサポート↑では、HKEY_USERS\.DEFAULT・・・・に書き込むことで可能だと書いてあるのですが、
うまくいきません。
実装したいことは、「COMアドイン」ダイアログで、ユーザーが必要に応じて
アドインを有効にしたり無効にしたり出来るようにしたいのですが・・・・。
よろしくお願いします。
0897山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0898デフォルトの名無しさん
NGNG0899デフォルトの名無しさん
NGNG0900デフォルトの名無しさん
NGNG0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNG又使われているとしたらどのような形なのでしょうか
0903デフォルトの名無しさん
NGNGもう含んでいない。ただレガシーな機能として相互利用はできるが。。。
0904デフォルトの名無しさん
NGNGと見たような気がするのですが、どんなもんでございましょう。。。
0905デフォルトの名無しさん
NGNG0906デフォルトの名無しさん
NGNGひょっとして絶版?
0907デフォルトの名無しさん
NGNG分が見えなくて当然。WindowsのMS提供コードの多くはCOM出現以来
それに拘束されており、.NETの低レベル部分も例外ではない筈。
0908デフォルトの名無しさん
NGNG0909デフォルトの名無しさん
NGNG.NET ってそんなに便利?
COM勉強はじめたけど、IDLだったかを
一々書かないといけないのがマンドクセ。
0910デフォルトの名無しさん
NGNG0911デフォルトの名無しさん
NGNGthx
0912デフォルトの名無しさん
NGNGATLの属性付きプログラミングを使えば?
0913デフォルトの名無しさん
NGNGそれかもしれない
>> 906
そうみたい。Inside COM+は
おいらが注文した時は最後で、日焼けした物が一冊しかなくそれで良いかと
問い合わせが来たので増刷する予定を聞いたら増刷する予定はないといわ
れた。少し割り引けと返事したらダメと言われシブシブ買った。
>> 907
おぉー すごい
>> 912
「属性付き」というのはよく解らないけどATLでCOMを作るのは簡単そう? みたい。
ただ、クラスメイとそのメンバ関数を記述すればいいみたい?
0914デフォルトの名無しさん
NGNGそこまで簡単じゃないけど、あれが難しいというのなら COM が行う処理の
中身の方が書けないんじゃないかな、ってレベル。
0915デフォルトの名無しさん
NGNGいただけませんか?
0916デフォルトの名無しさん
NGNG同様にして埋め込まれた別のActiveXからメソッドを呼び出したり
プロパティーをセットしたりというのは可能でしょうか?
よろしくお願いします。
0917デフォルトの名無しさん
NGNG0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNGORG 100H
↓次よろ
0921デフォルトの名無しさん
NGNG0923デフォルトの名無しさん
NGNGとりあえず首吊って市ね
0924デフォルトの名無しさん
NGNG追加しようとしているのですが死にそうです。
とりあえず
BEGIN_DUAL_INTERFACE_PART(MyDualInterface, IMyDualInterface)
というのを追加してみたのですが、
error C2504: 'IMyDualInterface' : 定義されていない基本クラスが宣言されています。
といわれてしまいます。ODLファイルにインターフェースを追加するだけじゃ
だめなんでしょうか?
サンプルのACDual.hはなにかに自動生成されてるようですが自分のプロジェクトには
それらしきものは見当たらないし。。。
0925デフォルトの名無しさん
NGNG何て言うか取りあえずなんかインクルードしなきゃいけないんじゃないの?
素人だけど。
0926デフォルトの名無しさん
NGNG0927デフォルトの名無しさん
NGNGこまんどぷろんぷとからmidlコマンドをつかって作成できました。
どうやら作成されるヘッダファイルの名前と同じファイルが既にあったため作成されてなかったみたいです。
出力ヘッダファイル名を変えたら作成されました。
0928デフォルトの名無しさん
NGNGCoInitializeEx(NULL, COINIT_MULTITHREADED);
とすると、ファイルを開くコモンダイアログで、
マイコンピュータを選択したときに何も表示されなくなってしまいました。
(ふつう、ドライブとかの一覧が出ますよね)
COINIT_APARTMENTTHREADED なら問題ないのですが…。
STAが作成されるか、MTAが作成されるかの違いだと思うのですが、
これでコモンダイアログの挙動まで変わってしまうのでしょうか。
ぐぐと格闘したのですが、、、ダメでした。
0929名無し@沢村
NGNGいいかCOMは人間が考え出したものだ。だからザコよ、おまいが斬らなくてもCOMの世界はすべてが明らかになっている。
いいかすでに明らかになっているものをいまさら斬ってどうするよ?
いいか斬る価値があるのは、神が考え出したものだ。
だからDNAの世界を斬るというのなら、価値があるよ。
だがCOMの世界を斬っても何の価値もないぞ!!ザコよ!!
0930デフォルトの名無しさん
NGNG沢ちゃんだ〜♪
0931デフォルトの名無しさん
NGNGとかいうレベルまでわかるツールない?ないだろうな。
Spy+は問題外。TracePlusもDrCOMには勝てないという結論。
0932928
NGNG自己解決したかも?
でも、ビミョーに違うんだけどなあ。
http://support.microsoft.com/default.aspx?scid=kb;en-us;287087
0933デフォルトの名無しさん
NGNGAPIフックと同じように、COMの関数呼び出しにフックかけたいのですが、
関数のアドレスがわからないとどうしようもないので…。
0934デフォルトの名無しさん
NGNGQueryInterface
0935デフォルトの名無しさん
NGNG別の言い方すると、インターフェイスを介して関数を呼び出したいわけではなくて、
関数の呼び出しを監視するために関数のアドレスそのものが欲しいのです。
舌足らずで申し訳ないっす。
APIの場合は関数のアドレスはインポートセクションのアドレステーブルにあるので
フックは簡単だったのですけど…。
0936デフォルトの名無しさん
NGNGvtable
0937デフォルトの名無しさん
NGNG単純にGetProcAddrしたらいい話じゃなくて?
もっと静的な話?オフセットを定数で持ちたいとか。
0938デフォルトの名無しさん
NGNGCOMにどうやってGetProcAddresを使うんだ?
0939デフォルトの名無しさん
NGNG脊髄反射カコワルイ
0940デフォルトの名無しさん
NGNGはぁ?
0941デフォルトの名無しさん
NGNG0942デフォルトの名無しさん
NGNGAPIが呼ばれる前に自分の関数を呼び出してもらうために(つまりAPIフック)
インポートセクションのAPI関数のアドレステーブルを自分の関数の
アドレスで上書きするんです。ほんと、舌足らずで申し訳ないですw
>>936
vtable書き換えればいいような気がするんですが、
インターフェイスを介してvtableにアクセスできるのですか?
そしてvtableの仕組みってどうなってるんでしょ。どうやって関数名の参照の
解決してるのかご存知ですか?
0943デフォルトの名無しさん
NGNGデバッガでもつくる気かよw
0944デフォルトの名無しさん
NGNGあのさ、あおりでも攻撃でもないんだけど、vtable の仕組みがわかんない人に
COM のインタフェイスのフックの仕方なんて説明できると思う?
このスレで C++ の基礎について説明求めるのって非常識だし非効率っぽくない?
C++ 勉強してから、Universal (Anonymous) Delegator とか調べてみるといいよ。
0945デフォルトの名無しさん
NGNGつかの間の優越感ですね。
0946デフォルトの名無しさん
NGNGアクリゲージョンを使って継承っぽいことをすればよい。
0947デフォルトの名無しさん
NGNGいくらC++のお勉強したところで、COMのvtableには辿り着かないよ
0948デフォルトの名無しさん
NGNGC++ の勉強をしないでもたどり着けるとでも言いたげな書き込みに見える・・・
とにかく 942 のやりたいことなら APIhook + universal delegator で簡単にできる。
(別に universal じゃなくてもいいけど)。漏れはキミより頭いいよ、ってだけでなんらの
情報の無いカキコは・・・2ch の花なのでいいのか orz
0949デフォルトの名無しさん
NGNG0950942
NGNG0951デフォルトの名無しさん
NGNG>>942ではないですがメモらせて頂きました。
0952デフォルトの名無しさん
NGNG0953デフォルトの名無しさん
NGNGそんな名前の恋人もいました。
0954デフォルトの名無しさん
NGNG0955デフォルトの名無しさん
NGNG0956デフォルトの名無しさん
NGNG0957デフォルトの名無しさん
NGNG楽しかった。
チンコ
0958デフォルトの名無しさん
NGNGどこかに書いてありましたっけ?
0959デフォルトの名無しさん
NGNGインプロセスサーバかどうか、とか。
0960デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1044457085/
こっちのスレもよろしく。
0961958
NGNG今取り組んでるのはインプロセスサーバです。
英文なら資料あるのかなぁ…
0962デフォルトの名無しさん
NGNGって話を載せたんだけど、そのときに参考になるリンクとか
いくつか書いたから読んでみては?
0963デフォルトの名無しさん
NGNGこのすれももうすぐ終了になりますね。
長い間ありがとうございます。
もうあうこともないとおもいますがお体に気をつけてください。
0964デフォルトの名無しさん
NGNGアウトプロセスサーバはDllRegisterServerを使うわけないと思います。
dllではないのですから。
0965デフォルトの名無しさん
NGNG.netのコンポーネント化らくすぎ。
COMはC++とかだと言語との違いがありすぎてかくのが面倒。
0966デフォルトの名無しさん
NGNGそれでもしぶとく C/C++ + COM は生きのこっていくんだろうなぁ。
OSごと C# なんかで書けるようになるとは思えないし。
とはいえ、C の中でインラインアセンブラを使うような
感覚になるんだろうな。C# から COM を使うのって。
0967デフォルトの名無しさん
NGNGこんなものに依存してはいけない。COMはCOMでわが道を行け。
0968デフォルトの名無しさん
NGNG0969デフォルトの名無しさん
NGNGスペースで間を空けるな糞が、>>は引用符じぇねぇ参照符だ。
何おしゃれさん気取りしてんだか。
0970デフォルトの名無しさん
NGNG去年のカキコにカッカするなよ (クールワラ
0971デフォルトの名無しさん
NGNGVS .NET 2003 で ATL 使うと激しく簡単に非マネージドの COM 書けるよ。
イベントもインタフェイスに型書いて、raise するとこで __raise 一行で発火できるし。
C# 側ではプロジェクトを参照するだけでラッパクラス作ってくれて using できるし。
凝った UI とかいらなければ .NET framework で大体なんでも出来るんで、
あんまり生 COM は必要なくなってるのは確かだけど・・・
0972デフォルトの名無しさん
NGNG使い道あるけどね。
0973デフォルトの名無しさん
NGNG負け組み合併?
0974デフォルトの名無しさん
NGNG開発が進めば進むほど、ExcelVBAからCOMを呼び出すのが
どんどん遅くなりました。
レジストリが原因だと思うんだけど、具体的にどんなツールでどんなことをすれば
速くなるんだろう。
えらい人教えて。
0975デフォルトの名無しさん
NGNG他のところで聞いてみます。
ありがとうございました。
0976デフォルトの名無しさん
NGNG0977デフォルトの名無しさん
NGNG[object, uuid(ry]
interface ICatDog : IDog { // 基底を複数持つのは違反
HRESULT Meobark(void);
}
の「基底を複数」ってどのへんが複数なのかわかります?
0978デフォルトの名無しさん
NGNG0979デフォルトの名無しさん
NGNGもれも単一継承しかしてないように見える。
interface ICatDog : ICat, IDog {~ ならわかるけど。
0980977
NGNG前置きのソースが半ページくらい割いて載ってるんですけども、
写し間違いとかやらかすとまた大変なんで写すのはやめました。
そっちを見てもやっぱり多重継承には見えないんすよね。
errataも見たけど出てないんでここはこういうもんだと思ってスルーします。
0981デフォルトの名無しさん
NGNG単にミスプリじゃない?
p68の中ほどに「実装では可能」と
class CatDog : public ICat, public iDog {
なんていう例が出てるから
interface ICatDog : ICat, IDog { // 基底を複数持つのは違反
としたかったのではないかと想像してみる。
0982デフォルトの名無しさん
NGNGその本知らないけど、「基底を複数持つのは違反(なので単一継承にする)」という
意味なのでは?
0983デフォルトの名無しさん
NGNGIDLとC++がごっちゃになってませんか?まったく別の言語ですよ。
0985デフォルトの名無しさん
NGNGっていうか、このスレを少し遡って読むだけでも状況は分かるよね。
0986デフォルトの名無しさん
NGNGWindowScriptComponentみたいに、同じフォルダにあるだけでいきなり
使えるようになるには、どうしたらいいのかしらん。
レス数が950を超えています。1000を超えると書き込みができなくなります。