COM の世界を斬る!
■ このスレッドは過去ログ倉庫に格納されています
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
■ このスレッドは過去ログ倉庫に格納されています