>>406 サクラエディタのマクロはWSHだったような気がする
416 :
デフォルトの名無しさん:2014/07/14(月) 15:28:36.63 ID:uZs3XM/U
IFileOperation でファイルのショートカットを作成することって出来ないの?
コピー・移動・リンク作成が直交的に作れたら美しいんだけど
EXCELをCOMアドインで操作していると、同じ処理をしているにも関わらず、
ある時は数秒で終わるのに、ある時は、何十秒も掛かったりと、挙動が
おかしいのですが、何か解決のヒントありますか?
419 :
デフォルトの名無しさん:2014/07/21(月) 07:49:19.08 ID:6nmHe42m
>>416のシェルを使ったショートカット作成の件だけど、
→作成先フォルダのIDropTarget取得
→ショートカットを作るファイルのIDataObjectをCF_HDROPとかCF_SHELLIDLISTとかの形式で作成
IFolderViewがある場合簡単。
→IDropTargetのDropその他を順番に呼び出す。その時effectをDROPEFFECT_LINKにしておく
みたいなウンコな方法か、ちまちま一個ずつ作るしかないの?
ちまちま一個だとUndoを一度にやってくれないし
もしかしてこのウンコの方法が正統な方法だったりする?
うん
COMによるOffice automationを調べていると
COM/ATLというような用語も見つかるのですが、COMとCOM/ATLというのは
異なる技術ですか?
私の理解では、C++でCOMやる場合は、CoInitializeExやCoUninitializeを使って
やる方式のことだと思っています。COM/ATLというのが分りません。
どなたか簡単に解説お願いします。
「active template library」で検索
423 :
デフォルトの名無しさん:2014/08/07(木) 17:34:11.54 ID:utSp7A7J
>>421 プログラムが大きくなるとコンパイルに時間がかかるから
共通部分と分けるじゃない? あれが静的ライブラリで lib
さらに共通であちこちのexeで使われるようなものは1度コンパイルしておいて
動的にメモリに読み込んで使えるようにすればいいじゃん これが動的ライブラリで dll
さらに動的ライブラリdllにもC++のオブジェクト構造のような関数以外のものも入れたいなぁ
さらに言語非依存にして、そこで参照回数などのオブジェクトのメモリ管理も加えたCOM技術で作ったdll
COMサーバーという
この外部オブジェクトライブラリを使うのに、CoInitializeExやCoUninitializeを使うのはCOMクライアント
COMクライアントは別にC++でなくてもJavaScriptでもVBでもC#でもPerlでもなんでもいい
COMサーバーは大別してインプロセスサーバー、アウトプロセスサーバーがあるけど
ぶっちゃけ一から書くのはメンドクサイ
そこでライブラリ作ろうか〜ということで出来たのがATL/WTL
わっかりやすーい
参照カウントなんてどこで増やしてんの?
426 :
デフォルトの名無しさん:2014/08/07(木) 20:30:34.00 ID:utSp7A7J
>>425 参照カウントはIUnkhownが担当してる
なぜ参照カウントが必要かというと使われなくなったオブジェクトを提供するために
dllをメモリに読み込んでいるわけだけど、つかわれなくなったら破棄するため
ちなみに何度も1個だけインターフェースを作ったり破棄したりする可能性のあるCOMは
dllの読み込みや破棄を連続で行わないためにClassFactoryを実装することが薦められている
COMは最初は言語非依存じゃなくて単に動的ライブラリdllにオブジェクト機能を持たせるだけだった
(インターフェイスの階層構造で、仮想ポインタの配列順で実現してた)
だから以前はヘッダが必要だった
つまりC++専用だった
IDispatchというインターフェイス名でを動的に関数ポインタを取得できるインターフェイスを作ることで
プログラム内にインターフェイス名を書くだけでよくなり言語非依存になった
従来の関数ポインタ順とは別にIDispatchを両方用意することをディアルインターフェースという
このあたりからOLEとか呼ばれるようになった
さらにこのインターフェイス名やGUIDはOS(というかレジストリ)に記録するものなので
Windowsアプリからはどこからでも利用できるはず・・・・
それならブラウザ内の埋め込みスクリプトからも利用できるようにしようということで ActiveX と名前を変え
ActiveXサーバーを作るものだから ATL(Active Template Library)なんだと思う
COMはレジストリ登録必須じゃなくて従来のdllと同じようにアプリケーションに閉じた形で使えたら
もう少し使いでがあったんだがなぁ。
>>427 dllをLoadLibraryして関数呼べばCOMオブジェクト作れるでしょ?
レジストリ登録はCoCreateInstanceでCOMオブジェクト作るなら必要ってだけで
自前でやる分には何の問題もない
なるほど、自分でDllGetClassObject呼んでやればいいのか。
もう使うことはないだろうが、参考になった。
>>423 細かい突っ込みだが WTL は COM と関係ないべ
433 :
デフォルトの名無しさん:2014/10/23(木) 13:56:20.92 ID:ISc0F2Qf
分散オブジェクトは距離に応じた最適な大きさ(機能)があって、
一律の仕組みにすることが最良ではなかった。
435 :
デフォルトの名無しさん:2014/12/06(土) 08:07:09.24 ID:1X8GhzUe
COMは.NETの登場で廃れると思ってたが結局10年経っても廃れなかったな、ネイティブコードの言語が健在だから
非同期処理には向いてないっぽい
DCOMの非同期版みたいなのをMSが考案してMSJかMSDNマガジンでそれを読んだが、全く流行らなかった。名前も思い出せないわ。
結局、MS Office は .NET では書かれないんだからな。そりゃCOMとOLEが残るわな。
OOOとかLibreOとかGoogleSpreadsheetとかで間に合うのに
なんでみんな有料のものを喜んで買うんだ
MS自体がデスクトップアプリで.NETなんか使わんと言ってるようなもんだからな
DLLとしてのCOM実装は実行オーバーベッドもないし、それでいてコンポーネントベースのオブジェクト指向を実現できるからな、シンプルでよく出来てる
流行り廃りではなく、ネイティブコードならいつまでも使い続けらる技術だよ
.NETには何の魅力も長所も感じない
動作が遅い、デフォで導入されてない.NETフレームワークのインストールも、OSに任せればインターネット接続が要るし、丸ごと再頒布するにはデカ杉
最近のOSには入ってるしインストールの手間はないだろ
Win8からは.NET fxはVer4.5しかインストールされてないよ、デフォでは
.NET3とか2のエンジンは、Windows Featureのon/offの所からから明示的に導入しないと、.NETランタイム不在と認識される
.NET4は3や2の代用にはならない
.NET fx2の再頒布モジュールは30~40MBでたいして大きくはないんだけど、それを製品に添付してインストールしようとすると、Win8はそれを利用しないんだよね
確かにインストールは開始するんだけど、持ち込んだ.NET fx2は古すぎて気に入らないのか、無視してネットからDLしようとする
かといってもっと新しい.NET fx2再頒布モジュールがある訳でもない
446 :
デフォルトの名無しさん:2014/12/13(土) 04:28:04.73 ID:jrsNMnhJ
何がんばっちゃってんのこいつ?
447 :
デフォルトの名無しさん:2014/12/13(土) 06:14:24.22 ID:KcZztYF+
.NETからDLL呼ぶためにはP/Invokeを手で書かないといけないけど、COMDLLならTLBからインタロップ自動生成してるから楽
まあ普通のDLLもIDLファイル作っとけばいいんだろうけど、普通やらないもんな
Inside COM(日本語版)って結構高く売れんのかね?
>>449 今更新規に学ぶ人なんか居ないから売れない
既に理解してる身としてはまだまだ使い道ある技術だけどね
>>449 読んだのはだいぶ前だけどそこそこ勉強にはなったな
COMの利点はC++で作ったDLLを他の言語から使えるって事かな
OSの基本機能はC++で実装する事がほとんどだろうからCOM自体は永久に無くならんだろうね
452 :
デフォルトの名無しさん:2015/01/03(土) 11:28:31.16 ID:duDbuP4G
ステマ乙
>>452 ステマって誰が儲かんだよw
ま、いい売り文句を言えたと理解しておこう
元々はC++のvtblを巧みに利用したインターフェース志向の技法で、DLLというコンポーネント分散によって言語依存が消えた
でBasic言語にC++のvtbl構造を模倣する仕組みを入れてCOMをネイティブにあつかえるようにしてVBAが出来た
てことなんだろうと思う
>>454 VBからCOMが使えるのは間違い無いが、VBから使う時は名前(文字列)によるメソッド検索をしてると
Inside COMに書いてあった気がする (QueryInterfaceだっけ?)
どっちにしても、言語に依存しないのはいい事だ
LinuxはC言語が唯一のインターフェースだから、そろそろ言語非依存のインターフェースが普及してほしいよ
候補は色々あるけど、どれも普及はしてないな
IDispatchだろ
>>456 すまん…スゲー昔の記憶だけ書き込んでた…
反省はしてない
>>456 だね、俗に言うレイトバインディング
VB4まではそれしか使えなかった
>>455 Win32だってC言語ベースのAPIだからね
DirectXとか一部だけでしょCOMなのは
C++の抽象クラスとvtblをつかったポリモーフィズム技法をDynamic Libraryに適用すればCOMもどきはできるんじゃないかな
WindowsでのCOM DLLみたいに、OSからの認識規則なんかを誰かが決めてやらないとダメだけど
ORBとかCORBAでしょ
XPCOMとかもあったけどLinuxでは結局どれも流行らなかったのかな
Linuxだと普通GPLでソース公開だから、そんなもの使わなくてもスタティックリンクでokってことなのかもな
>>449 Inside OLE(日本語版)がAmazonで良い値が付いてるな
売ろうかw
初期のOLEはCOMではなくDDEで動いてたんだっけ
OLEはアタマが付いていかなくて最後まで仕組みを理解できなかったな
463 :
デフォルトの名無しさん:2015/01/07(水) 09:04:35.98 ID:7s8hjn62
いまはwebAPI全盛だな
>>460 Linux上だと↓これだけあるかな
CORBA (Orbit2 GNOMEが使ってた)
XPCOM (Firefox)
UNO (OpenOffice.orgとその派生)
D-Bus
よく考えたらD-Busもコンポーネントモデルとも言えるしかなり普及してたよ
つう事でLinuxにはD-Busがあると言えるかな