【OLE】オートメーション総合スレ【ActiveX】
1 :
デフォルトの名無しさん :
2006/01/21(土) 00:32:19 オートメーションって情報少ないからみんなで情報交換しよ><
腹減った
VARIANT v; v.vt = VT_VARIANT | VT_BYREF; v.pvarVal = &v;
4 :
デフォルトの名無しさん :2006/01/21(土) 21:41:06
話題きぼんぬ。
5 :
デフォルトの名無しさん :2006/01/22(日) 01:04:40
VARIANTでVT_NULLつくるときって、↓でいいのかな? これ以外にすることってある? VARIANT vNull; vNull.vt = VT_NULL;
6 :
デフォルトの名無しさん :2006/01/22(日) 01:12:57
懐かしいな…
何に使ったらいいんだ
誘導されたので・・・ VC6にて、ActiveXでWebページ内で動くプログラムを作ってます。 リソースエディタでFORMVIEWのダイアログを作り、ClassWizard にて CFormView派生のクラスを作成。 CSampleCtl (プロジェクトをSampleとして作った場合のActiveX Controlのクラス) にて、 OnCreate で フォームビューのクラスを Create しているのですが、失敗してしまってます。(Create で 0 が返る) 失敗するのは、コントロールウィザードから TreeView(Microsoft TreeView Control) などをフォームに貼り付けた場合で、 スタティックテキストやエディットボックスのみのフォームでは失敗せず、ブラウザでの表示も確認しています。 TreeViewやListViewを使いたいのですが、どうすればいいのでしょうか。 プロジェクトは、プロジェクトウィザードのMFCActiveXコントロールから作成しています。
9 :
デフォルトの名無しさん :2006/01/22(日) 20:33:20
OLE Drag&Dropもここでいいんかな?
>>8 ActiveXのコントロール数とコントロールの種類は正しく設定した?
12 :
9 :2006/01/22(日) 21:23:24
OLEドラッグアンドドロップに付いての質問です。 特定のファイルタイプのみを受け付けたい場合はどのように実装するんでしょう? DragEnterの中で何かすれば良いと思うのですがイマイチ分からず。
13 :
デフォルトの名無しさん :2006/01/23(月) 01:00:25
教えてください C++BuilderでActieFormを作りました しかし、10月25日のウィンドウアップデート移行 動作しなくなりました。 もちろんベリサイン認証は取ってあります 同じ経験した方いませんか?
>>8 InitCommonControls は?
>>10 コントロール数: 1
ランタイムライセンス: なし
ヘルプファイル: なし
可視状態のときにアクティブにする(default)
バージョン情報ボックスあり
コントロールをどのウィンドウのサブクラスに→(none)
基本デフォルトの状態そのままで作ってます。
なんか勘違いしてますか?
>>14 ありがとうございます。
InitCommonControls, InitCommonControlsExともに使ってみましたが、効果ありませんでした。
ListViewのみをフォームに入れた状態で InitCommonControlsEx で ICC_LISTVIEW_CLASSES を指定し、TRUEが変えるのも確認しましたが・・・
17 :
8 :2006/01/24(火) 13:30:37
VC6のリソースエディタでフォームビュー作ってコンポーネントの追加からListView貼り付けでやってましたが、 リソースファイル使わずにフォームのOnCreateでCListViewを作るようにしたら成功しました。 ので、リソースエディタを使ったListView/TreeViewの作成はしないほうがいいということ・・・? とりあえず暫くはリソースエディタを使わない方法でやってみます。
ActiveXでさ、ポップアップブロックとかもできるぐらいだから 簡単なタブブラウザみたいなのもできないかなと思うのだけど?
いくらでもあるし、それらはIEコンポーネント使ってるよ
21 :
デフォルトの名無しさん :2006/02/02(木) 00:23:11
ブラウザの中でタブコントロールを作成してさらにブラウザコンポーネント配置か。。。 なんか意味あるのか意味ないのかわからんな。
8です。 今さらなんですが、 COleControl のサブクラスの OnCreate でフォームビューを作成する事が既にActiveXコントロールの考えから外れてるんでしょうか? 実行すると必ず Warning: Creating a pane with no CDocument. が出てくるので・・・ OnInitialUpdateやそれに代わるものが見当たらないんで、このまま警告無視していくか、フォームでなくウィンドウにすべきか迷ってます。
>>22 多分間違ってる。
コントロールを1つ1つ定義していくのが正しい(?)やり方なんじゃないかと思う。
今 ActiveX SDK付いてる本ご存知ないですか? サイトからは手に入らないです
>>24 今はとりあえずPratformSDKを試してみたら?
>>23 遅れたがレスサンクス
なるべく早い段階でWindowsUpdateのようなウィンドウで動くプログラムに切り替えるよ
27 :
デフォルトの名無しさん :2006/02/08(水) 01:42:32
Hello ? =)
28 :
デフォルトの名無しさん :2006/02/17(金) 00:08:57
ちょっとスレ違いになるかもしれませんが質問です。 JavascriptからActiveX(OCX)のメソッド呼び出し時にArrayオブジェクトを渡したいんですが できるんでしょうか? もしできるのならやり方を教えてください。 呼び出し例) ・javascript var array = new Array(); object.method(array); // objectがActiveXオブジェクト ・ActiveX void HOGE::method(/* どんな型にするのか? */ array){ ・・・ /* 処理 */ }
>>29 VARIANTで受け取りSafeArrayで取り出そうとしましたがjavascriptエラーになりました。。
(メソッドのパラメータがおかしいとか何とか)
VCで作ったActivexのDLLをWebで配布出来るように.NET Frameworkの ツールを使ってcabファイルにしました。デジタル証明書もテスト用 の物を使って作成しました。が、実際にサーバーに置いてみてインストールを しようとしても×マークが表示されてしまいます。マシンの中を検索 したらdllが見つからず、インストールすらされていません。 この場合どの段階でミスがあるのでしょうか。 インストールに失敗する条件等ご存知の方いましたら教えて頂けないでしょうか。
32 :
デフォルトの名無しさん :2006/02/18(土) 10:59:05
>>31 そりゃインストーラ作成に失敗してるんじゃないの?
だれか32bitとx64のocxをcabにまとめて、x64のIEでも 問題ないようにした人いる?
34 :
31 :2006/02/20(月) 12:14:59
>>32 ありがとうございます。infファイルの記述がおかしいのかなと思い、
infファイルを右クリック、インストールをすると目的のディレクトリに
ファイルがコピーされました。という事はhtmlだと思い、CLASSID等を
見直し、再作成を行いましたが、やはり問題解決には至りませんでした。
そして上記方法で分かった事が一つあります。infファイルから直接
インストールした後では、cabからのインストールは必要が無いので
codebaseを除いたhtmlでも実行できるはずだと思い、htmlを開いてみると
インストールしたファイルが消えてしまうのです。
開発したマシンではそのような動作はせず、他のマシンで行った時のみ
発生しました。この症状から何か原因わかりますでしょうか。
inf晒しきぼん
36 :
31 :2006/02/22(水) 17:17:54
37 :
31 :2006/02/24(金) 18:23:17
自己解決(?)しました。 infファイルは間違えていませんでしたが、プログラムでもレジストリに 登録するようにしないといけないのですね・・MSDNのサンプル見て分かりました。 配布関係の資料探してもVBのものばかりでなかなかVCのサイトって無いものですね。 また質問の繰り返しで申し訳ないのですが、実行させるHTMLの中にPARAMを使って 引数みたいな物を渡せますよね。そのPARAMで設定した <PARAM NAME="foo" value="bar">のような値をプログラム中で取得するには どうすればよいのでしょうか。プロパティというそれっぽいものがありますが いまいち理解が出来ず苦戦しています。苦戦ばっかりしてますが、どなたか ご教授頂けないでしょうか。
void CXxxCtrl::DoPropExchange(CPropExchange* pPX) { ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor)); COleControl::DoPropExchange(pPX); PX_String( pPX, _T( "foo" ), bar ); } IObjectSafetyについては自分でね
>>37 ActiveXなら公開プロパティ作って、Javascriptとかで設定したほうが
簡単じゃないのか?
40 :
デフォルトの名無しさん :2006/03/02(木) 16:42:15
Windows2000sp4+VC6sp6でダイアログボックスにフラッシュ(swf)ファイルを 表示(再生)するアプリを作ろうとしています。 色々調べてFlash8.ocxを使えばいいと言うのは分かったのですが プロジェクト→プロジェクトへ追加→コンポーネントおよびコントロールで コンポーネントおよびコントロールギャラリを開いて Registered ActiveX Controlsフォルダをクリックし、 Macromedia Flash Factory Objectをクリックすると 「ファイル C:\WINNT\system32\Macromed\Flash\Flash8.ocx は存在しません。」 とメッセージが表示されてしまいます。 フラッシュを再インストールしてみましたが状況は変わりませんでした。 解決方法がわかる方いらっしゃいましたら教えてください。 よろしくお願いします。
>>40 Shockwave flashオブジェクトを使う。
>>31 さんの質問に便乗して質問します。
同様にVC++6.0で作成したActiveX(ocx)のcabファイルを作成してサーバにおいたところ、
・ビルドしたマシン→ダウンロードOK(Download Program Filesにファイルあり)
・それ以外→ダウンロード失敗
(Download Program Filesにファイルなし。
Temporary Internet Filesに?CodeDownloadErrorLog〜ファイルができる)
となるのは、どのような原因かヒントをいただけますでしょうか?
ランタイムライセンスのあたりかと考えているのですが…
ちなみにCodeDownloadErrorLog〜の中を見ると、エラーは
Code Download Error: (hr = 8007007e) 指定されたモジュールが見つかりません。
(中略)
ERR: Setup Failed Error Code: (hr) = 8007007e, installing: hoge.ocx to (null) destination code(0)
となっています。
HTMLでローカルディレクトリ指定してるとか
さすがにそれはなかったですが
45 :
デフォルトの名無しさん :2006/03/06(月) 18:45:43
>>41 40です。
なるほど、ショックウェーブを選択するのですね。
うまく貼り付けることに成功しました。
ありがとうございます。
46 :
デフォルトの名無しさん :2006/03/09(木) 07:50:17
Internet Explorer上からOLEで作成したExcelのイベントをフックしたいのですけど、やりかたがわかりません。 できませんでしょうか? Excelを作成して、JScriptからExcelのDOMを操作してセルの値の読み書きをする所まではできました。 が、Excel上での、BeforeSave等のイベントをトリガとしてJScriptの関数を実行したいのですができません。 擬似的に、setIntervalで1秒おき等にExcel上でのイベントに追随する事はできているのですが、 本当のイベントをフックすることができないのです。
47 :
http://www.vector.co.jp/soft/win95/util/se072729.html :2006/03/18(土) 21:47:22
TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか? そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
なんの誤爆だよ。
49 :
デフォルトの名無しさん :2006/03/26(日) 09:24:19
ActiveXコントロールを1から作成したいのですが、 全然資料がありません。 有用な資料(URL),書籍があったら是非教えてください よろしくおねがいします
>>49 言語とか処理系とか書かないとわからん。
そこらへんから選択中なのか?
>>49 VC++使ってるならとりあえずウィザードで雛形作ってみて動作を確認しながら
ってのが理解の近道なのかもしれん。
ほかの処理系は知らん。
52 :
デフォルトの名無しさん :2006/04/09(日) 22:39:36
はじめまして。ぽこぶびと申します。 現在、VisualStudio2003のC++を使って COM、ActiveXコンポーネントを開発しておりますが いくつか疑問があるので質問させてください。 C++での開発はぜんぜん問題ないのですが、 VisualStudio2003でVB、C#でも C++のようにActiveX、COMコンポーネントの開発は 可能なのでしょうか? もし、可能なのでしたら、新規プロジェクトを作成するときに どのような手順で選択していったらスケルトンコードが作成されるので しょうか? どうかよろしくお願いいたします。
なぜ時代に逆行する
>>52 純粋なCOMコンポーネントは作れないが、.NETのクラスをCOMに公開することはできる。
regasm.exe というのを調べてみるといい。
>>46 と同じような話しなんだけれど、ActiveXオブジェクトのイベントってどこで起こっていて、どこに納められているのかわからない。
拾うだけならHTAっぽいアプローチで
<object id="hoge" classid="〜〜"></object>
<script for="hoge" event="on〜〜(foo)">
foo = 1 ? A : B;
</script>
とか出来るけれど、なんだかキモいので出来るだけJScriptだけでなんとかしたい。
var hoge = new ActiveXObject('progid〜〜');
だとどうやって取ればいいのだろう。
56 :
デフォルトの名無しさん :2006/04/15(土) 10:02:04
>>52 と似たような質問なのですが、
たとえば JScript の中で new ActiveXObject などとして
Outlook を操作したり出来ますよね。
あれと同じようなことを .NET アプリケーション
(C++/CLI もしくは C# で作成を予定) で作成した
アプリケーションでも実現できるのでしょうか?
>>54 がそれに相当するのでしょうか?
>>56 CLRからCOMの呼び出しはこの辺を使う。 Aximp.exe, Tlbimp.exe
普通はIDEで参照の追加-COMで自動生成してくれる。
VB.NETの場合はVB6との互換のためCreateObject関数もサポートしている。
58 :
デフォルトの名無しさん :2006/04/15(土) 18:42:14
>>57 その逆で、Windows Scripting Host などから
ActiveX コンポーネントを使うようなやりかたで、
.NET なアプリケーションも使うことが出来るものなんでしょうか?
つまり、従来のCOM技術におけるオートメーションと同様のこと
.NET なアプリケーション(CLR上で動くアプリケーション)でも
実現することが出来るんでしょうか?
>>46 BeforeSaveがイベントなら普通に捕まえればいいだけじゃないのか
>>58 それなら
>>54 で出来る。多少制限はあるけどオートメーションレベルのことならほぼ問題なく動く。
>>60 ありがとうございます。
果敢に情報収集しつつ精進します。
これができないと、たとえば Office が .NET Framework
ベースに移行したとき、外からオートメーションで
いじれないなんてことになるよなぁ、さすがにそんな
馬鹿な仕組みにはなっているまい、とおもってたんですが、
自分で試すにしても何から手を付けていいものか途方に
くれてました(で、結局ネイティブで作り続ける日々)。
62 :
デフォルトの名無しさん :2006/04/16(日) 14:12:09
COMはもうレガシーだからVistaや.NETなOfficeでは不要だろ
>>63 だからこそ COM で出来ていたことが
出来ないってのはこまるなぁ、って思う。
レガシーってことはそれよりも優れた方法があるってことでは
>>65 まぁ理想的にはそうなのかもしれん。
すべてのアプリケーションが CLR で動くなら。
ただ、そうじゃないアプリを切り捨てるのはたぶん無理そう。
なので多少のオーバーヘッドの増加には目をつぶるから
互換性確保してくれればな、って思う。
>たとえば Office が .NET Framework ベースに移行したとき、 こうならないとアナウンスされてまつ。 M$は優れたドトネトを使わないから大丈夫。
68 :
62 :2006/04/18(火) 23:00:15
>>67 Office12(2007)って、.NETベースじゃないんですか?
リボンとか妙に(変に)凝ってるので、てっきり.NETベースだと思ってたんですが。
69 :
デフォルトの名無しさん :2006/04/25(火) 23:19:14
C#からWordを操作したいと思っていろいろ試してます。 Rangeオブジェクトを使って find.Execute()して 文字列を検索したのですが、 見つけた文字列のページ番号や行番号を得る方法がわかりません。 どうすれば良いでしょうか?
70 :
デフォルトの名無しさん :2006/04/26(水) 00:21:51
71 :
デフォルトの名無しさん :2006/04/27(木) 18:13:47
>>71 単にC#でCOMコンポーネントを作ってるだけにも見えるし、
SQLServer2005のようにCLRのホスティングをしてるようにも見える。
さすがに全部.NETベースというのはありえないように思うが。
さすがエバンゲリオン役立たず
74 :
71 :2006/05/01(月) 18:32:36
C++で、ActiveXプログラミングを基礎から勉強するのに最適な本ってある?
今はDDEの時代だ
77 :
デフォルトの名無しさん :2006/05/13(土) 06:41:34
VBScriptのGetObject()で.htmファイルを指定すると、HTMLDocumentオブジェクトが取得できます。 .xlsファイルを指定すると、Workbookオブジェクトが取得できます。 ここでレジストリをいじって関連付けを破壊すると、.htmファイルはオブジェクトが取得できなくなるのですが、.xlsファイルは取得できます。 これは.xlsファイルがOLE対応の特定のフォーマットを備えていて、中にCLSIDとかが書いてあるせいだと思うのですが、このようなファイルは何と言うのでしょうか? そしてそのフォーマット、あるいはファイルの作成法はMSDNライブラリのどこに書いてあるのでしょうか?
>>77 エクセルのファイルは「構造化ストレージ」になっている。
>75 DonBoxの"Essential COM"が一番良いと思います。 COM技術のイロハのイが学べます。 問題は、見た目の厚さに対して高い事。 まぁ、通読した後、高価の意味も理解できるけど。
80 :
デフォルトの名無しさん :2006/05/14(日) 00:20:03
81 :
デフォルトの名無しさん :2006/05/14(日) 00:42:38
そろそろ寝るか。。。
82 :
デフォルトの名無しさん :2006/05/14(日) 05:01:35
このスレが気になって全然寝られなかった。。。
83 :
デフォルトの名無しさん :2006/05/14(日) 06:59:29
VBAのコントロールにFlexGridが使えるようになってるんですが、 ADOでデータを取り込めますか?
84 :
75 :2006/05/14(日) 08:20:38
>>79 あれから調べて「ATL COMプログラミング」という本を買いました。
これもなかなか良いです。
Essential COMとどっちを買うか迷ったんですが、
ATL COMプログラミングの方にはIE拡張の話が載っていたので。
Essential COMにもあったかもしれませんが。
Essential COMは良書だけど、図版とかが少なくてどちらかというと 玄人向けだから良いんじゃないすかね。 てか、COMでフリースレッド何たらとか使ってる人ってどれくらいいるんだろ?
86 :
83 :2006/05/14(日) 21:09:23
Excelマクロフォームに、MSFlexGridコントロールのMSFlexGrid1と、 CommandButton1を貼り付け、 実行し、CommandButton1を押すと・・・ Private Sub CommandButton1_Click() Dim con As New ADODB.Connection,RS As New ADODB.Recordset Dim str As String,str2 As String str = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.Path & ";" & _ "Extended Properties=TEXT;" con.ConnectionString = str con.Open str2 = "Select * From Test.csv" RS.Open str2, con '実行時ココでエラー Set MSFlexGrid1.DataSource = RS RS.Close CN.Close End Sub 実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。 とでます。どうすればエラーを取り除くことができますか?
87 :
86 :2006/05/14(日) 21:11:29
書き忘れたのですが、Test.csvはこのExcelブックと同じディレクトリにあります。
>RS.Open str2, con '実行時ココでエラー と書きましたが、これは誤りで、 次の行の Set MSFlexGrid1.DataSource = RS '実行時ココでエラー となります。
89 :
デフォルトの名無しさん :2006/05/20(土) 05:54:11
Scripting.FileSystemObjectのTextStreamと同じものを作っているのですが、ReadLineの実装法が今一つわかりません。 fgets()を使う場合、すでにデータのサイズがわかっていないと読み込めません。 まさか、fread()やReadFile()で1バイトずつ(マルチバイトのテキストの場合)読み込んで'\r'や'\n'かどうか調べているのでしょうか? もし、HeapAlloc()やVirtualAlloc()等のメモリ取得関数に「残り全部を取得(予約)」というオプションがあれば、fgets()でできると思うのですが、そんなオプションないですよね? MFCやATLはよくわからないのですが、MFCやATLだったら簡単にできるでしょうか?
C++のstd::getline使ったらだめか?
91 :
デフォルトの名無しさん :2006/05/20(土) 16:00:21
市販のActiveX(OCX)をインポートして VC6でラップして市販のOCXと同じAPIを作ろうと思うけど、 (ようはラッパってやつですが。) そうすると、インスタンス作成時、 CoCreateInstanceでIIDとCLSIDがわからない。 MFC ACtiveXプロジェクトで作ってるのがわるいんだろうか? アト、ラッパでのActiveXイベントの伝達の仕方もわからん。。。 なんか、いい方法はありませんか?
市販のActiveX(OCX)をそのまま使う
93 :
デフォルトの名無しさん :2006/05/21(日) 00:03:29
>>89 1バイトずつ判断する。
読み込み自体は1バイトずつである必要はないけど。
>>91 レジストリエディタを検索すればCLSIDはわかるよ。
ActiveXイベントのラッピングは無理だと思うな
シンクしてファイアー!とかは? ATLの場合の話だけど。
あぁ、シンク忘れてた。 それならできるね。
96 :
91 :2006/05/21(日) 09:51:22
シンクしてファイアーはできた。 #import ディレクティブ使って直接OCX指定したけど、 やっぱりIIDがわからない。CLSIDは取得できたよ。
>>96 __uuidof (IHoge)で得られない?
FirefoxのMacromedia Flashって、ActiveXではないのかな? 機能拡張じゃなく、ああいうプラグイン?を作るのってどうするんだろう。 スレ違いかもしれんが。
XPCOMだっけ?
あるスレッドAでCoCreateInstance()等でインターフェースポインタを得たとします。これを別のスレッドBでそのまま使える保証はあるのでしょうか? 特にAが終了してしまった後など・・・ 保証が無いならば、使えるかどうか確認する方法、及び使えるようにする手続きはあるのでしょうか?
>>96 #importできるならタイプライブラリにIIDも書いてあるんじゃないの? OLEVIEWは?
OleInitialize(0);
>>90 getlineできました! どうもありがとうございます。C++標準ライブラリがわかってなかった・・・
でもこれってどうやってメモリ確保してるんだろ?
>>93 >読み込み自体は1バイトずつである必要はない
ですね・・・でもバッファをリンクドリストにしてみたら、何かえらくややこしくなってしまった。realloc()だとコピー起きるっぽいし・・・
struct _BUFITEM{
BUFITEM *next;
char buf[0x200];
} BUFITEM;
ReadAllはgetlineで終端子を'\0'に設定したらできました。
今悩んでいるのが、LineとColumnプロパティ・・・
これもC++標準ライブラリにありますか? C++のヘッダって何が何だかさっぱりわからない・・・ MSDNライブラリも何か標準ライブラリ関係はおざなりだし・・・
結局1文字ずつチェックしないといけないのだろうか・・・?
>>104 LineとColumnは流石にC++に相当するものは無いから、
何回改行文字が読まれたか、その後何文字読み込まれたかを自分で記録するしかないと思う。
ちなみにリンクリストはC++にstd::listがある。
106 :
ひみつの検疫さん :2025/01/15(水) 23:04:36 ID:MarkedRes
汚染を除去しました。
どうやら<OBJECT>タグは、CoCreateInstance(CLSCTX_ALL)をやっているらしい。レジストリ中でInprocHandler32の方がLocalServerより先に現れるからInprocHandler32があると動かないみたい。 new ActiveXObject()はCLSCTX_SERVERだから問題は起きない。まあオレのIE6.0+Excel2000以外では違うかもしれないけど。 で、46の環境でもオレと似たようなものだとしたら、46はタグは使っていないで、new ActiveXObject("Excel.Application")とかしているのではないか、と思われ。 それで、上のように無理矢理レジストリを書き換えるなどして<OBJECT>タグを使ったとしても、Excel.Applicationには実はある2つの問題があって結局イベント接続はできない。 詳しくは省略するが、簡単に言うとVBAだけを対象に作られていてアクティブスクリプトには対応していないのだ。 で、スクリプトだけでイベント接続できないのか、という事だが、これも無理なんではないかと思われ。 WSHの場合、わざわざWScript.ConnectObject()/WScript.CreateObject(,,)/WScript.GetObject(,,)というのをスクリプトホストが提供しているくらいなので、JScript.dllやVBScript.dllなどのスクリプトエンジンにはイベント接続の機能が無い。 なのでIEの場合は、IEからそのようなオブジェクトを提供してもらわなければならないわけだが、そういうものは見当たらないように思う。
>>94 >>95 >>96 「シンクしてファイアー」って何? ATLよく知らないんだけど・・・
多分、イベントを代理で受け取って、同じ名前のイベントを発行する、って意味だと思うんだけど、合言葉っぽくなってるのはなぜ?
有名なセリフなの?
109 :
94 :2006/06/04(日) 19:37:30
>>108 ごめん、前の会社の上司がふざけてよく「ファイアー!」って言ってたんで、
オイラもちょっと使ってみたくなって…。
ATLのイベント取得マクロがXXX_SINK_MAP、イベント発行(生成コード)関数が
Fire_XXXとなるので、シンクしてファイアーでも何となく通じるのかも…。
You’re fired って言われたんだろ
111 :
109 :2006/06/05(月) 21:47:39
>>110 "君は首だ!"なんて言われてないっすよ。
なんか、ATL好きの人だった…。質問する度に
ATLのすばらしさを説かれてた…。
最近、.NETやらVistaやらで、COM作ってたベンダーって
どうなってくんだろう?
.netとかが主流になっていくだけで、COM事態は消えないでしょ。 いまだに16bitAPI残してるMicrosoftがそう簡単にCOM捨てるわけないよ。
113 :
111 :2006/06/06(火) 23:19:36
>>112 でも、Vistaに味をしめて、MSが強硬路線取ったりしたらちょっと怖い。
いっそVistaが不発に終わってくれればと思ったりも…。
ExcelのオートメーションをMFC(VC6)でやってます プログラミングC++.NETvol2のP112のオートメーションで WorkBooks.Addの引数に1(workbooks.Add(COleVariant((short)1)))を渡して新しいワークブックを作成していますが WorkBooks.Addの引数でVBAで渡せる他の値( xlWBATChart、xlWBATExcel4IntlMacroSheet、xlWBATExcel4MacroSheet、xlWBATWorksheet) を渡すにはどのような値を渡せばよいのでしょうか? 本で紹介されている値1(COleVariant((short)1))は動作を見るとxlWBATWorksheetのようですがVBAでの定義を見ると Const xlWBATWorksheet = -4167 (&HFFFFEFB9) となっておりなぜ1なのかよく解りません・・・
正常動作するほうを信じる
>>114 普通にワークシートを作成するだけなら引数指定なしでいいと思う。
117 :
114 :2006/06/09(金) 19:57:52
>>115 なぜ1になるのかはよく解りませんがエラーが発生する理由はわかりました
想定外のワークシートが生成されたため、受信できないメッセージの受信に対し
例外が発生していました。値をいろいろ変更してみるといろいろな種類の
ワークシートを作ることが出来ました。
とりあえず
>正常動作するほうを信じる
でいこうと思います
>>116 >普通にワークシートを作成するだけなら引数指定なしでいいと思う。
VBAでは引数指定なしでも良いですが、MFC(C++)で呼ぶ場合、引数は要るのではないでしょうか
ウイザードが吐いたコードには引数指定がありますし、そのウイザードのコードを変更して
引数無しverを作って試した場合、ワークブックが作成されませんでした
どうもありがとうございました
>>117 引数無しにしたいときは、
COleVariant vNull; vNull.vt = VT_EMPTY; なんてのを
作って渡しておけば良いよ。
>>55 スクリプトだけで何とかするコンポーネントを作ってみた。
SCON001.LZH:IEやHTAなどでWScript.ConnetObject()と同じ機能を実現
ttp://winscript.s41.xrea.com/upload/source/No_0006.lzh みんながExcelを持っているとは限らないし、IE関連オブジェクトを使ってみた。
サンプルでは例えばIE提供のdocumentオブジェクトにスクリプトだけで接続している。と言っても、関数オブジェクトをプロパティに代入するのとは違うよ。
他に適当なオブジェクトが思いつかなかったので、他のサンプルではIEからIEを呼び出す、というヘンな事になったりしてるけど。
まあIEからだけじゃなくて、HTAでも実行してみて頂。その方がセキュリティ設定が面倒でないし。
あと意味ないけどWSHからも使用できる。多分どんなスクリプトホストからでも使用可能なんじゃないかと思うけど。
ちなみにIE相手にこれを使うにはコンポがもう一つ必要。IEがクラス情報をサポートしてないのでこれを修正する。documentは必要なし。
WWCI002.LZH:WScript.ConnectObjectできないオブジェクトをConnectObject可能に
ttp://winscript.s41.xrea.com/upload/source/No_0004.lzh で、問題のExcelなんだけどこれにはさらにもう一つコンポが必要なんだよね・・・今準備中。
そうそう、セキュリティ設定に「マイコンピュータゾーン」を出現させるのは以下。まあHTA使えばいいんだけど。「ダイアログ表示」ならまだしも「有効」だとアブナイし。
>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0
>および、
>HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0
>キーの、"Flags"というDWORD値を"1"にします。
なお、みんな、チラ裏っぽいけどゴメンしてね。
>>118 IDispatch::Invokeの仕様からすると、VT_EMPTYとdispparams.cArgs = 0とは違うように思うんだけど?? VT_ERRORはその後に何か来る場合だけだし・・・
IEの上でxls,pdfを開くとExcelやAdobeReaderがActiveXコントロールとして開きますよね。 あんな風に独自のActiveXをIE上で開きたいんですが実現方法がわかりません。 ActiveXコントロールはHTMLにobjectタグを使って貼り付けられますが、 ExcelやAdobeReaderはそうやって実現しているようじゃなさそうです。 IWebBrowser.Documentで、IHTMLDocumentではなく、ExcelやAdobeReaderのインタフェースが返ってくるようなので。 Documentプロパティの中の人を自分の作ったインタフェースに置き換えるのはどうやるんでしょう?
>>121 そういうのはインプレースアクティベーションと言うらしいから、
それでググってみたらどう?
>>120 >IDispatch::Invokeの仕様からすると、VT_EMPTYとdispparams.cArgs = 0とは違うように思うんだけど?
パラメータがどう省略可能なのかは先方の実装次第なのは確かなのだけれども、
伝統的な VB のような、パラメータの途中のいくつかを省略可能な言語での
利用を考慮したオブジェクトなら VT_EMPTY で当該パラメータなしとなりますよ。
WIN板WSHスレの神、Mはいまだに「オートメーションオブジェクト」はアプリの手動操作の代わりをするオブジェクトの事を指すと思ってるみたい。
例えばInternetExplorerオブジェクトはオートメーションだが、documentオブジェクトはそうじゃない、みたいなこと以前書いてたけど、まだ直ってないみたい。
神の連載記事
↓
チェック式 WSH入門 <BR>
―― 演習方式で身につけるWSH超入門 ――
第1回 WSHを始めよう
ttp://www.atmarkit.co.jp/fwin2k/tutor/cformwsh01/cformwsh01_01.html >>114 >ExcelのオートメーションをMFC(VC6)でやってます
で、この書き込みを見るとうっすら同じような誤解を感じるのだが・・・気のせいか?
126 :
114 :2006/06/13(火) 00:51:02
114です >>ExcelのオートメーションをMFC(VC6)でやってます >で、この書き込みを見るとうっすら同じような誤解を感じるのだが・・・気のせいか? 実はまだよく解ってないんですよ WSHも名前だけは聞いたことあるけど使ったことないし この前MFCの勉強を始めたところだし・・・ ちょうど読んでる本のオートメーションの章を読んでる所だったので 「ExcelのオートメーションをMFC(VC6)でやってます」 って書き方になりました でも頭の中のイメージでは 「アプリの手動操作の代わりもできるオブジェクト(インターフェース?)」 ですね。確かに
127 :
121 :2006/06/15(木) 22:38:00
>>122 あれからいろいろ調べてAcitve Documentのサンプルも試してみた。
htmlの中にembededされたActiveDocumentを開くのではなく、
Active DocumentをBHOからプログラムで開きたいのだが、
どうすれば良いのかわからない・・・
>>12 たぶんもうできたろうけど、作ってみた。単にマウスカーソルが進入可と禁止とに変わるだけだけど。
RJCT001.LZH:OLEドラッグ&ドロップサンプル(C++):特定の拡張子以外を拒否
http://winscript.s41.xrea.com/upload/source/No_0009.lzh しかし何だよコレ・・・
Win2000を使ってるんだけど、日本語がファイル名に混じっていると、CFSTR_FILENAMEAで正常にファイル名が取得できない。特に拡張子が消える。
おかげで9x対応にするために長くなってしまった。95、98、2000・・・XPはどうだか知らんけど、MSの日本語部隊には給料貰う資格ないと思う。
なおコードへの突っ込み歓迎・・・(^^;)
129 :
デフォルトの名無しさん :2006/06/18(日) 15:32:40
いまさらだけどさ、 スクリプトで利用できるコンポーネントを作ってもさ、 レジストリいじらなちゃなんないからユーザーとしては なるべく入れたくないよな。 スクリプトで dll を指定できるとかレジストリより先に 同じフォルダの dll を先に見てくれるとか、そういうなにか (もっと穴のない手段があればそれで)ないのかね。 マジでインストールしたくない。ほんとなんとかならんのかな。 だいたいインターフェース不変で実装のバージョンの変更を 安全に行うみたいなの(意味をくみとっておくれ)って 上手く機能してるのかな。 個人的にかもしんないけど、スクリプトとかからオブジェクトとして 簡単に使用できるインストール不要の動的ライブラリがほしい。 どうなのそういうの
>>129 M$もXPでSxS(サイドバイサイド)を持ち出してきたところまでは
よかったと思うんだけど、.NETへの方向転換で、COMをレジストリなしに
使う技術に関してはおざなりになってるような…。
SleipnirプラグインやWindowsゲームプログラミング本では、COMライクな
バイナリ実装を行っているようですな。
>>121 おお。オレもそれすっごく興味ある。できたら教えて下さい。
ファイルの拡張子関連付けのレジストリ設定ってあるじゃん? あれって2段階になってて例えば.htmの場合、これがhtmlfileを参照してる。
でここにHTMLDocumentオブジェクトのCLSIDが書いてあるんだよね。
だから独自のドキュメントファイル拡張子を作って、それの対応レジストリにCLSIDを書いておけば、IEがそのドキュメントを読み込もうとした時にサーバーが呼び出されてオブジェクトが生成されると思うんだよね。
そうしたらIEがオブジェクトに対してIOleObjectとかIOleControlとかIOleDocumentとかをQueryInterface()してくると思うから、それに対応できれば.xlsや.pdfと同じような事ができるんだと思う。ちなみにワード文書(.doc)とかもできるみたい。
>>123 いつもIDispatchを生の状態で実装したDLLサーバーをスクリプトから動かしてくるんだけれど、スクリプトエンジンは、途中省略の場合VT_ERRORを入れてくる。
VBでもC++でも(この場合コントローラって事ね)IDispatch::Invokeを使うのであればこれは同じようにしなければならない。(カスタムインターフェースを使えば違う)
cArgs=0の場合は基本的にrgvarg=NULLなのでパラメータはこの世に存在しない。
VBやMFCのディスパッチマップとかを使ってコンポーネント(サーバー)を製作している場合の話を言っているのかな、と思うけど、
その場合は、メソッド処理ルーチンから見ればcArgsなんて存在しないし、パラメータに何かは入ってなきゃいけないから、デフォルトがない場合バリアントのパラメータはVT_EMPTYだと思う。あればその値。
だけどコントローラがInvokeを使っている場合にはVT_EMPTYを入れてるのはコントローラではなくてコンポーネント内部のディスパッチマップハンドラだからね?
で114は引き数なしでもやってみた、って言ってるからメソッドに引き数無しのオーバーロードが存在するんでしょう。
であれば、「VBAで引き数無し」と同じ事をやる場合、114がやったように引き数なしでコールするのが正しいんじゃないか、と思うんだが。
おまいら長文すぎ
>>114 Excelのカスタムインターフェースを直に呼んでみた。(ヘッダがいいかげんだけど気にしないで(^^;))
XLASMP1.LZH:Excelのカスタムインターフェースを利用するサンプル(C++)
http://winscript.s41.xrea.com/upload/source/No_0011.lzh Addメソッドのプロトタイプはこんな感じ。
STDMETHOD(Add)(VARIANT Template, long lcid, IWorkbook** RHS) = 0; //'Workbook'インターフェースを'IWorkbook'に変えてある。
そうしたら、ワークブック作成が成功するのはVT_EMPTY、でなく、VT_ERROR / DISP_E_PARAMNOTFOUND、だね。
MFCのディスパッチマッパーは省略の場合途中でなくてもVT_ERRORを入れる、ということか。VBではVT_EMPTYだと。
MFCだとウィザードはCOleVariant型を引数にとるテンプレかオーバーロードを生成しているみたいだけど、生のインターフェースはVARIANT型。戻り値がHRESULTなのも違う。
これ(MFC)はカスタムインターフェース(アーリーバインディング)になってるのかな?
だから必ず同じ結果になるとは言わないけど、114、VT_ERRORで試してみて。なお、vt=VT_ERRORするだけでなくて、ちゃんと省略を表すエラーコード、scode=DISP_E_PARAMNOTFOUNDを入れないと動かないから。
で、確かに1でもできるね・・・これ何なんだろ。レガシー定数だとか。他の定数が3,4になってて1,2が抜けてるのがそれっぽい。昔の文書とかには1が書いてあるのかも。
>MFCのディスパッチマッパーは省略の場合途中でなくてもVT_ERRORを入れる、ということか。 あっ。これってExcelがMFCで作られた、と仮定しての事ね。ATLなのかも。
>>130 さん
どうもです。知りませんでした。無知。
>>135 さん
もしかしてアップローダーのサイトの方ですか?
そうだとしたらあのサイトにはたびたびお世話になってます。
No_0012.lzh ありがたく頂きます。
ただ、他人に配布するスクリプトとバイナリの組だと、やっぱりインストールが…。
しかし、あんなこともできるんですね。
ありがとうございました。
質問です。 Excel2000をVC++6のMFCからオートメーションで操作しているのですが、 フォントの設定が上手くいきません。 書き込む文字列は、英数字と中国語の混合で、フォントはSimSunに 変更しようとしています。 _tSetlocale()でロケールを変更した後、マルチバイトの中国語データを読み込み ワイド文字に変換します。(mbcstowcs) Rangeオブジェクトを取得し、SetValueで値を書き込み、 Rangeオブジェクトを取得しなおし、GetFontでFontオブジェクトを取得し、 SetNameでフォント名を代入したんですが、アルファベットのみフォントが 変更され、その後に続く漢字文字列はどうも上手くできていないようです。 エクセルを立ち上げてみてみると、 一部文字化けしています。(「・」になって表示されてます) セルをダブルクリックするとエクセルがフォントを自動で変更するみたいで、 英数字はSimSunで、その後の漢字はMSPゴシックや、ArialUnicodeMSなどに 変更されます。その際に文字化けは直るので、 データはUnicodeで壊れずに書き込めています。 右クリック、書式の設定からフォントを変更すると、 漢字もきちっとSimSunに変更されるのですが、 オートメーションからはどうやればいいのでしょうか?
>>137 自己レス。結局解らなかったので、標準フォント(StandardFont)を
変更することで対応しました。
139 :
デフォルトの名無しさん :2006/06/24(土) 12:37:34
Internet Explorerで表示しているページを 印刷するには、どのオブジェクトのどのメソッドを使えば良いか教えてください。 perlからWin32::OLEを使ってコントロールしていますが、 $IE->{Document}->PrintPreview(); $IE->{Application}->PrintOut(); 等やっても上手く動きませんでした
>>28 もうわかったろうけど一応。
ここで指定しなければならないのはSAFEARRAY型じゃなくて、IDispatch *型、すなわちオブジェクト。
JScriptに配列は無い。Arrayオブジェクトは配列ではなく、あくまでオブジェクト。
>>132 ゴメン。技術話なんで正確に書こうと思うと長くなっちゃうんだよね・・・
>>136 他人にソフトを配布したいんならEXEを作ればいい。スクリプトではまともなソフトは作れっこない。
スクリプトでなきゃいけない、という理由がよくわからないのだが・・・
VB.NETとかで作ればいいのではないだろうか。
#実は登録の全くいらない方法もある事はある。
>>139 うーむ。PerlスレとかWSHスレで聞くべきと思われ。
でもスクリプト野郎って人間がオカシイのが多いからオレは聞くの嫌なんだが(^^;)
で、印刷はExceWBでできるらしい。
142 :
デフォルトの名無しさん :2006/06/24(土) 22:04:03
>>141 ExecWB()ですね。試してみます、ありがとうございます。
Excelオブジェクトなど具体的なオブジェクトの使い方は
どの言語からOLEサーバ?を使うかということには依存しないと思います。
スクリプト(インタープリタ系)の言語だろうが、C#だろうがJavaだろうが。
このスレのコミュニケーション上の理由で、表記方法を定める必要があるなら、
C#やVBあたりに決めても良いと思います。
>>141 EXEを作ればいい
たしかにそうかもしれないです。
でも、一通りの機能をDLLに作っておいて配布し、
スクリプトでそれを不特定多数が利用するということも
できるんじゃないでしょうか。
例えば軽いノリの3Dゲームまがいの何かをつくりたい時、
3Dの初期化・表示・当たり判定・その他なんかをdllに
しておければなあ、とか考えたんです…。
あとは自作ツールのスクリプト作成にWSHを利用するとか。
けっこう同じようなこと考えてる人は多いかと思ってたんですが、
そうでもないのかな?
思いつきなので、ダメなこといってるかもしれないですが…。
>>143 ああ、ゴメンなさい。
そこまでの話とは思わなかった。
EXEだと、インストール不要なものはコマンドラインツールとか単純な使用に特化したものが多いんで、そういう話かと思った・・・
というか、そういうの作って公開して下さい。欲しいので。お願いします。
>>142 >Excelオブジェクトなど具体的なオブジェクトの使い方は
>どの言語からOLEサーバ?を使うかということには依存しないと思います。
>スクリプト(インタープリタ系)の言語だろうが、C#だろうがJavaだろうが。
依存するんだな。それが。
少なくともIDispatchを使うかカスタムインターフェースを使うかによっては違うのは上のWorkbooks.Add()でゴチャゴチャしたのを見ればわかるだろ?
まあそれは置いといて、このスレは大凡
1. コンポーネントを製作
2. コンパイラ系言語からのコンポーネント使用
を扱う為にあるものと思われ。
スクリプトで使うコンポーネントを作りたいとか、スクリプトホスト/エンジンを作りたい、というのならいいと思うが、スクリプトからコンポーネントを使うだけならばスクリプトのスレで聞いた方がいい。
別に意地悪してる訳じゃなくて、コンポーネント作者やC++プログラマにはスクリプティングや個々のコンポの使い方にそれ程興味が無いのが普通だから、ここではそういう情報が得られる可能性が低い、という事。
146 :
デフォルトの名無しさん :2006/06/28(水) 01:37:42
どのオブジェクトに、どのメッセージを投げるかという話ならば 言語には依存しませんよね。 このレベルでも十分に有用です。 どのスレで扱うと、必要な情報が得られる可能性が高いかという問題は、 統計をとるわけではないし、スレ住人も入れ替わるので、 推測の域を出ません。議論したところで正しい答えは得られませんね。
147 :
デフォルトの名無しさん :2006/07/01(土) 15:26:32
今日、ふとWebで楽しいプログラムを動かしたいと思って、ActiveXを始めてみた。 (Visual Studio.NET 2003のMFC ActiveXプロジェクト) さっそくWebページからの値の引渡しができない・・・ <PARAM name="Hoge" value="****"> って感じ指定したプロパティの値は、プログラム側ではどうやって取り出すの??? IDL???にプロパティとしてHogeを追加したら、GetHoge, SetHogeっていうメソッドができたんだけど、 Webページ表示時にSetHoge(LPCTSTR newVal)の newValに値が入ってくるかと思いきや、 メソッドそのものが呼び出されてない・・・。 どっかわかりやすい解説サイトないものか(´Д`;)
149 :
デフォルトの名無しさん :2006/07/01(土) 22:33:22
解決した。ホントさくんす。 PX_String書いてなかったわ。。。
>>147 余り参考に成んないと思うけど(^^;)、
オレもVB5CCEを使ってActiveXコントロールを作り、以下のHTMLを実行してみた。
<HTML><BODY>
<OBJECT ID="Ctrl" CLASSID="CLSID:..."><PARAM NAME="X" VALUE="123"/></OBJECT>
<SCRIPT LANGUAGE=VBScript><!--
MsgBox Ctrl.X : Ctrl.X = 456 : MsgBox Ctrl.X
'--></SCRIPT>
</BODY></HTML>
で、<PARAM>の方はまったく動作しないけど、<SCRIPT>の方はちゃんと動作している。
<PARAM>タグの「プロパティ」ってどういうものなのだろうか?
VB5CCEでも設計時ユーザーがオブジェクトに設置するプロパティ以外に、コントロールの画面プロパティというのがあってこれはスクリプトでアクセスすることはできない。
が、CヘッダやSDKドキュメントを見るとActiveXコントロールには予約DISPIDみたいのがあってこれで設定できるような感じがあったりする。(って試せばいいんだが(^^;))
<PARAM>タグの場合、何かオブジェクトの公開プロパティとは別のプロパティなのだろうか?
あるいはコントロール側が何か特別なインターフェース、IDispatchExとかIProperty何とかをサポートする必要があるのかも。
バロス
何か無知な事書いてしまったけど、Tabular Data Controlが<PARAM>タグが通用するみたいなので、このオブジェクトを少し調べてみたけど、ますますわからなくなった(^^;) <Tabular Data Control> CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83" <通用するプロパティ> DataUrl/UseHeader/TextQualifier <PARAM>タグが通用しなかった自作コントロールとは、サポートしているインターフェースが微妙に違うんだけど、それが原因かどうかよくわからない。 (例えば自作コントロールはIQuickActivateやIDataObjectをサポートしているんだけど、Tabularはサポートしていない。) Tabulerでも、WSFで<OBJECT>タグを使用した場合、<PARAM>が通用しなくなる。 WSFの場合はHTMLの場合と比べてなぜかサポートするインターフェースがぐっと減っている。IDispatchExとかIOleCommandTargetがサポートされなくなる。 これはインプレースアクティベートされていない事が原因ではないかと思うけどはっきりとはわからない。オブジェクト生成の方法が違うからかも。 後はもうオブジェクトをラップして調べるしかないと思うけど、サポートされているインターフェースが多いので大変だな・・・ というか何か急に梅酒飲みたくなった・・・
プロパティは IPersistPropertyBag 経由で設定されます。 ATL なら PX_hogehoge で簡単に実装できる。
VS2005でクラス→ATLコントロールでウィザードからコード作成。 メッセージマップにOnCreateを追加したけど、 なぜかOnCreateが呼ばれない・・・ OnSetFocusは呼ばれるんですが。 心当たりある人いますか?
155 :
154 :2006/07/04(火) 23:41:51
自己レス。コンストラクタで m_bWindowOnly = TRUE; とすれば呼ばれるようになった。 他にもm_うんたらを初期化してて、これだけ親クラスのprotectedメンバだと気づかなかった。
156 :
デフォルトの名無しさん :2006/07/07(金) 00:50:13
ワードアートなどのOleObjectをなんでも貼れるようなアプリケーションを作りたいのですが、 とりあえず、何から手をつければよいのでしょうか? 資料が少なくて困っています。
ラップしてトレース!した。 なるほど。やっぱりオートメーション(IDispatch&カスタムインターフェース)とは別のインターフェースからアクセスできるプロパティだったのか。オートメーションからもアクセスできるみたいだけど。 しっかしこのインターフェース、COM文書には殆ど何も出てなくてリファレンスはInternet Development文書の方にある。 オレが自作コントロールで<PARAM>でアクセスできなかったのはウィザードを使わずにプロパティを設置したからで、なぜかウィザードを使って設置したらアクセスできる。 うーむ。VBにせよATL/MFCにせよ、ビジュアル開発環境って何をやってるのかさっぱりわからん。 で、WSFの場合だけど、これはそもそも<PARAM>があってもWSHは何もしないようだ。 つかこのスレ居るとどんどん知識が増えてく〜
>>153 てか、もう書いてあったのね・・・OrZ
オレは全部自分で実装してる。多分ATLだとラップも簡単なんだろうね。
159 :
デフォルトの名無しさん :2006/07/09(日) 11:37:10
MFC + ActiveXで書いてるんだけど、 WriteProfileString系でレジストリに書き込むとドコに書かれるの? 次に起動したときに前回の状態を復元するようなことをしたいんだけど。 COleControlにSave()とかLoad()とかそんなメソッドがあるけど、これ使うのか・・・?
160 :
デフォルトの名無しさん :2006/07/09(日) 12:04:42
>>159 ActiveX使ったこと無い素人だからあってるかどうか解らんけど、
レジストリに書き込むんだからレジストリに書くんじゃないの?
前回の状態って何を復元するの?
見当違いならスマソ。
CString strSection = "My Section";
CString strStringItem = "My String Item";
CWinApp* pApp = AfxGetApp();
//WriteProfileStringでレジストリに"test"を書き込む
pApp->WriteProfileString(strSection, strStringItem, "test");
CString strValue;
//GetProfileStringでレジストリから読み込む
strValue = pApp->GetProfileString(strSection, strStringItem);
ASSERT(strValue == "test");
>>156 ATLがいいんじゃないかと思うんだけど、オレはATLよく知らない。誰か教えてあげて下さい。
SDKレベルでインプレースアクティベートする方法なら少しは知ってるけど誰も必要としてないよね・・・OrZ・・・
>>159 MFCよく知らないけど、WriteProfileStringはレジストリじゃなくてINIファイルに書き込む。ってこれActiveXじゃないんじゃないか?
あと、COleControlにそんなメソッド見当たらないぞ??
>>161 レスありがとうございます。
とりあえず、OClientというOLE(ATL?)のサンプルを参考にして実装中です。
とりあえず、わけもわからず組んでいるのですが、
ドラッグアンドドロップはできても、Oleオブジェクトはドキュメント(CDoc?)とビュー(CView?)があるウィンドウでないと
作成されないようだ(Oleオブジェクトを作成するための関数の引数に入れる情報が足りない)ということがわかりました。
やりたいことはダイアログウィンドウにOLEオブジェクトを貼り付けたいので
ダイアログウィンドウにCViewを貼り付けて実装中です。
そのときダイアログウィンドウ→CFrameWnd→CViewという順番で作るといいという
情報をつかんだまでがここまでの話ですw
では、できたらまたきますw
で、 >ダイアログウィンドウ→CFrameWnd→CViewという順番で作る と、今度はOnInitialUpdateが降ってきませんw OnInitDialogでこんな↓感じで頑張ってみましたが、 CxxxxView* pView = (CxxxxView*)GetDlgItem(AFX_IDW_PANE_FIRST); pView->SendMessage(WM_INITIALUPDATE); タイミングが速すぎるようでまるで駄目でしたw なのでOnDrawあたりにフラグつけて、COleDropTarget::Register(this)を突っ込んでおきましたw だんだんツギハギ感が出てきていい感じになってきましたw ここまでで、ダイアログウィンドウにCFrameWndつけて、CViewつけて、DnDができるようになりました。 あとはOClient参考にしてOleオブジェクトをおけるようにするだけです。 では、できたらまたきますw
で、どうなったかというと、結局できませんでした。 なんかCViewを作って貼ればいいとかいう単純な理由では無いっぽいです。 強引にやろうとすると、 ドラッグ&ドロップをしてデータを受け取ろうとするところでハングアップします。 それ以降もOleObjectを作成しようかというところで頻繁にCViewやらGetDocumentから 取得する内容を引数に要求されます。 じゃあ、ダイアログベースのウィンドウではOleObjectを貼りつけることはできないのか? と、思いCViewとCFrameWndとCWinAppから派生するものでドキュメントをこさえようとしてみるものの失敗。(作成できない?) そもそもダイアログベースのアプリでそんなもの作成できるのかどうかも不明なので何が正しい処理なのかも不明。 というわけで、OClient以外の資料も無いので手詰まりな状態です 見た目どうみてもウィンドウハンドルさえあればどこでもくっつけられるような感じなのに納得いかないです。 OLEを理解できてないだけっていう気もするのですが、これ以上やろうと思うと根っこの部分からの理解が必要な気がします。 なんかいい資料ないでしょうか?つーか、だれか助けてください・・・orz
>>162-164 OCLIENTはMFCだね。
オレは詳しくないので、誰かMFCに詳しい人が教えてくれたらいいんだけど、
他にレスがなかったらMFCのスレで聞いてみれば?
>>165 でも、そのソースのメインディッシュはOLEなんですよ。
あ、でも、MFCの方から調べてみるってのはやったことなかったです。
いままでATLとかOLEとかしか調べてなかったです。
MFCのスレの方でも聞いて見ます。
ありがとうございました。
もう終わった話だろうけどシリーズ。
>>19 >>20 >>21 一応そんなような事やってみた。超テキトーだけど。
<<TABB.VBS>>
Set ie2 = CreateObject("InternetExplorer.Application")
ie2.Left = 320
ie2.Width = 300
Set ie1 = WScript.CreateObject("InternetExplorer.Application", "ie1_")
ie1.Left = 0
ie1.Width = 300
ie2.Visible = True
ie1.Visible = True
ie1.Navigate "
http://www.google.co.jp/ "
ie2.Navigate "about:blank"
Do While ie1.Busy Or ie1.ReadyState <> 4
Loop
Set doc = ie1.Document
Set doc.onclick = GetRef("doc_onclick")
Quit = False
Do While True
If Quit Then
Exit Do
End If
WScript.Sleep 100
Loop
ie2.Quit
Function doc_onclick Set ev = doc.parentWindow.event if ev.srcElement.tagName = "A" Then ie2.Navigate ev.srcElement.href ev.returnValue = False End If End Function Function ie1_OnQUit Quit = True End Function HTML内にWebBrowserコントロールを<OBJECT>で貼り付けてもみたんだけど、なぜかイベントがキャッチできないんだよね・・・
169 :
デフォルトの名無しさん :2006/07/18(火) 03:08:28
VC++ .NET2003でHTMLサムネイル作りたいんですが Webvw.dll内ThumbCtrlのラッパークラスを作ってトコまで行ったんですけど、用意されたメソッドの動作は 実際に一つずつ書いていって確かめていくしかないですか?全く資料がみつからないんですけど・・・
170 :
デフォルトの名無しさん :2006/07/20(木) 08:13:26
OLE/COMってそろそろなくなる? 3年かけてようやく理解したんだがorz
MSのアプリの機能拡張的なものを作るんだったら しぶとく生きるんじゃないか。
172 :
デフォルトの名無しさん :2006/07/20(木) 18:57:47
Office用拡張として使われるうちは大丈夫じゃね? Office2007はどうだろ?まだ見てないや
ここまで念入りに作ったシステムをそう簡単には捨てんだろ。 だっていまだにWin16APIだって残ってるんだぜ?
html/hta とかのデータバインド用に カスタムデータソースオブジェクトを作るための 情報って何を見ればいいか知ってる方いらっしゃいますか?
175 :
174 :2006/07/22(土) 00:46:42
具体的には、javascript でローカルの .mdb を処理する データソース準拠のオブジェクト作って、それをテーブルに バインドできたら嬉しいな、とか思ってますけど、 やっぱCOMコンポーネントを作らないとだめだろうなあと 予想はしてます。 なんとか英文のリファレンス的のものくらいは見つけたんですけど、 チュートリアルとかもないようだしどうしていいやら…。
176 :
デフォルトの名無しさん :2006/07/22(土) 10:12:02
ActiveXコントロールを作ったんですが、 HTMLのobjectタグでIE上に、このコントロールを表示したとき、 コントロール側からIWebBrowser2を得る方法ってありますか?
177 :
176 :2006/07/22(土) 11:27:38
>>178 >安全マーク
そこに書いてあるとおりにやればいいんじゃないの?
なにがわからんの?
>signcode.exe
.NetSDKをダウンロード&インストール汁。
181 :
デフォルトの名無しさん :2006/07/25(火) 23:31:50
>>164 です。
で、あれからいろいろいじってみたところ、
プロジェクト新規作成からダイアログベースのアプリを作って、
ダイアログ編集画面で右クリックからActiveXコントロールの挿入を選んで
Microsoft Rich TextBox Control 6.0 (SP6)っていうのを貼りつけると
ダイアログボックスでもワードアートなどのOLEオブジェクトが貼り付けられるっぽいです。
で、貼りつけたあとにこのOLEオブジェクトの情報を取得するにはどうしたらよいでしょうか?
182 :
デフォルトの名無しさん :2006/07/30(日) 23:41:24
現在VC++6.0で作成したActiveXをVBで使おうとしています。 VB6.0ではVARIANT型でActiveXとの値の受け渡しをしていましたが VB.Netの場合Variant型がないのでObject型を使いました。 ところがActiveXでセットした値が受け取れません。 ActiveXを変更せずにVB.Netで使えるようにしたらVariant型を使わずに どう対処すればよいのでしょうか?? 教えてください。
ByVal/ByRefの違いとかではない? VB .NETのスレで訊く方がいいと思う。
184 :
デフォルトの名無しさん :2006/07/31(月) 07:03:13
>>183 さんありがとうございます。
メソッドじゃなくてプロパティでVARIANTの受け渡ししているんですよ。
VB.Netスレで聞いてきます。
アドバイスありがとうございます。
186 :
183 :2006/08/01(火) 00:52:41
>>184 さん、
>>185 さん
"プロパティでも同じ"というところがよくわかりません。 ソースを載せるので見てもらっても良いですか??
VB側でActiveXに配列の参照渡しをして、 ActiveXでセットした値をVB側で取得します。
処理は以下のとおりで、 VB.6.0ではうまく値を取得できるのですがVB.Netでは出来ません。
ここでByVal/ByRefを使うと言う事は配列の宣言時に使うと言う事ですか?? BASIC初心者の質問で申し訳ないですが教えてください。
VC6.0で作成したプロパティの処理
int *InfAddr;
void CXCtrl::SetInfAddrV(const VARIANT FAR& newValue)
{
long *ip;
SAFEARRAY *psa;
psa=newValue.parray;
SafeArrayAccessData(psa, (void **)&ip);
InfAddr=(int *)ip;
SafeArrayUnaccessData(psa);
//以降でInfAddrに値をセットする
} //..................
VB6.0側の処理
Dim InfTbl As Variant
Dim InfDat(140) As Integer
InfTbl = InfDat()
X1.InfAddrV = InfTbl '配列InfDat()を参照するとActiveXでセットされた値が入っている!
VB.Netの処理(VB6.0のプロジェクトを変換)
Dim InfTbl As Object
Dim InfDat(140) As Integer
InfTbl = VB6.CopyArray(InfDat)
X1.InfAddrV = InfTbl '配列InfDat()を参照するとVCでセットされた値が入っていない!
Integerって
CopyArrayって字の如く配列をコピーしているのでは? VB .NETはよく知らないけど、InfTbl = InfDatなどとしたらどうだろうか。
189 :
183 :2006/08/02(水) 00:48:37
>>185 さん
それもやってみたんですがダメでした。
ActiveXがVariantなのにObjectで渡しているのが原因と思っているのですが、
VB.Net側での回避策ってないのでしょうか?
>>187 さん
Integerだと何か良くないですか??
Marshal
191 :
183 :2006/08/03(木) 00:15:46
>>190 さん
Marshal.GetObjectsForNativeVariantsメソッドを使うってことですか??
詳しく教えてください。
ちなみにX1.InfAddrV = InfDatだとどなる?
193 :
183 :2006/08/03(木) 00:58:38
>>192 さん
今外に出ているのでうる覚えですが、
エラーになってしまった気がします…。
194 :
デフォルトの名無しさん :2006/08/04(金) 14:55:25
CaptionやTextなんかのプロパティの文字列に日本語を入れたら文字化けするんですが どのように対策をとれば日本語を扱えるのでしょうか? 現状: アルファベットなら期待通りの動きをしています 「aaa」をセットした場合、正しく「aaa」と表示されますが、 「あああ」をセットしようとした場合、「あ¢」のような表示になります カスタムプロパティで文字列(CComBSTR)の要素を追加し、それに対して上の「あああ」を実行すると メンバ変数には期待通り「あああ」が設定されますが、表示が「あ¢」になってしまいます。 動作確認はActiveXコントロールテストコンテナとVBで行いました。
195 :
デフォルトの名無しさん :2006/08/04(金) 16:08:51
196 :
194 :2006/08/05(土) 12:44:58
さんくす。プリプロセッサを_MBCSから_UNICODEに変更したら出来まいた。
どなたか、IEからのリンクのドロップを受け取る方法をしってる方いましたら教えて下さい。 言語はC++、VisualStudio.NET2003でWindowsXP上で開発しています。 IDropTargetを実装してRegisterDragDropしただけでは、文字等を範囲選択してそれを ドロップすれば受け取れますがURLリンクは禁止マークのままで受け取れませんでした。 それでも一応DragEnterとDragOverは来るようなので、DragEnterで受け取ったIDataObjectから URLを得る事は可能なのですが、Dropが来ないのでマウスボタンが離されたタイミングで 受け取る、という動作が出来ません。マウスカーソルも禁止マークのままなので見た目悪いですし。 ちなみに上記方法でGECKOエンジンからのリンクのドロップは普通に受け取れました。 この辺りわかる方いらっしゃいましたら教えて下さい、お願いします。
198 :
デフォルトの名無しさん :2006/08/21(月) 01:34:15
ActiveXがVBまたはVCから呼ばれたか区別って出来ますか? VBとVCで戻り値を変えたいので、ActiveX側で判別したいんですよ。 詳しい方教えてください。お願いします。
>>198 無理だと思う。
それに、VBとVC以外だったらどうするつもりかと。
200 :
デフォルトの名無しさん :2006/08/21(月) 02:03:15
初期化の時にフラグをセットするくらいしか方法ないんじゃねーの もちろん、初期化でごまかされたら手も足も出ねーけど
つかなんでVB/VCを区別する必要があるんだ? OLEってそんなことしなくていいように作られてるのに。
202 :
デフォルトの名無しさん :2006/08/30(水) 21:45:07
いまVC++からMS Wordにアクセスしてるんだけどさ、 Word::_Document::BuiltinDocumentProperties が IDispatch* を返すんだけど これが何のインタフェースなのか分からない。 Office::DocumentProperties かと思ったらUUIDが違うらしく _com_ptr_t のキャストが通らない。 こんな時どうしたらいい? インタフェースポインタだけじゃインタフェースのUUIDは分からないんだよな? メソッド名でGetIDsOfNamesしたらとりあえずCountとItemプロパティは呼べるみたいなんだが、 あまりにも手探りすぎて不安だ。
203 :
デフォルトの名無しさん :2006/08/30(水) 21:49:06
ワードのヘルプあるでしょ
>>203 ワードのヘルプにはUUIDのことなんか書いてないぞ
202です。 つーか質問の仕方が悪かった。OLBファイルに指定されてたヘルプは呼んだけど、 (そこに書かれてた様に) DocumentProperties だと想定したら UUIDが合わないから困ってるんだわ。 _com_ptr_t は内部でQueryInterfaceしてキャストしてて、、 未知のインタフェースを目的のインタフェースに変換できないと VC の #import で自動生成されたInvoke補助コードが使えなくなってしまう。
206 :
デフォルトの名無しさん :2006/09/01(金) 00:34:20
基本的な質問でスイマセン。 AxtiveXでプロパティの初期化ってコンストラクタで実施すればよいのでしょうか? あとプロパティページの値を動作時に反映させる場合、 DoPropExchange()に処理を追加すればよいのでしょうか? この場合コンストラクタで初期化を実施した値よりもプロパティページの設定が 優先されるのでしょうか? 教えてください。
207 :
デフォルトの名無しさん :2006/10/02(月) 20:57:27
m
208 :
デフォルトの名無しさん :2006/11/28(火) 17:52:03
BGMのあるページが表示されるとすぐ 『このwebページでActivexを実行するにはクリックしてください』 とボタンがでて、OKしても×をクリックしてもエラーでマイクロソフトに報告になってしまいます。 何が原因なのでしょうか? またこの解決法があれば教えてください。
おまえ馬鹿だろ?
210 :
デフォルトの名無しさん :2006/11/28(火) 21:33:18
すみませんがここの"Beep"と言うのはどこからでているのですか?
どこかに一覧とかあるのでしょうか? ぐぐってもなかなかでてきませんorz
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdnguion/htm/drgui021099.asp やりたいことはCHtmlView(IEでHTMLをブラウズするクラス)
で作ったウィンドーにフォーカスを当てたいだけなのですが。
OLE使うのは初めてで分からないことだらけです。多分
DISPATCH *pDisp=GetHtmlDocument( );
でpDispを求めてSetFocusみたいなことをやれば良いと思うのですが。
(SetFocus()でCHtmlViewにフォーカスを当てるだけだと駄目でした)
SPYしてクリックしてみるとCViewの子供のIHTMLDocument2にフォーカスが
当たっているようでした。
DISPID dispid;
OLECHAR * szMember = "Beep"; //<-------ここ
// No parameters, so no array
DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};
// pdisp is an IDispatch pointer
// to the Beeper object
hresult = pdisp->GetIDsOfNames(IID_NULL, &szMember, 1,
LOCALE_USER_DEFAULT, &dispid);
hresult = pdisp->Invoke(
dispid,
IID_NULL,
LOCALE_USER_DEFAULT,
DISPATCH_METHOD,
&dispparamsNoArgs, NULL, NULL, NULL);
よろしくお願いします。
>>210 ちゃんと読めばわかる話じゃ?
その文章中からさらにリンクが張られてるでしょ。
"Beep"なんてのはそこで使われている例の話であって
ググってわかる話ではないよ。
212 :
デフォルトの名無しさん :2006/11/28(火) 22:05:47
>>212 単にビューにフォーカス当てたいんなら、そのビュークラスの.SetFocus()でいけるんじゃないの?
あ、ごめん
>>210 よく読んでなかった。
だめだったのか。
216 :
211 :2006/11/28(火) 22:47:34
>>212 うちでもCHtmlViewのポインタ取得してSetFocus()すればできたよ。
::GetFocus()した結果とCHtmlViewのHWND比較してみ。
もしかしてTABキーを押したときにViewのHTMLDocument内で
フォーカス移動するのがいやだとか?
ならPreTranslateMessage()でTABキーの押し下げを捕まえるしかないと思うよ。
217 :
デフォルトの名無しさん :2006/11/28(火) 23:40:39
>>216 ども
(会社で)SPYしたのを見るとCHtmlViewをSetFocus()したのと
マウスでクリックした時のHWNDは違っていた
マウスでクリックしたのはCHtmlViewの小の小の小の小あたりだった
218 :
デフォルトの名無しさん :2006/11/28(火) 23:42:14
>>216 PS.
単純にホイールでスクロールしたいだけです
219 :
211 :2006/11/29(水) 01:15:41
>>217-218 ごめん。
今確認したら確かにHWNDはCHtmlViewではなくて「Internet Explorer_Server」だった。
でも、マウスでクリックしたときとSetFocus()したときで同じ値になってる。
あと、どちらの場合もホイールでスクロールできる。
フォーカスがあってもマウスカーソルがウィンドウから外れているときは
スクロールできないが、WM_MOUSEWHEELはちゃんと来てるのでIEの仕様っぽい。
普段使ってるマウスユーティリティは全てOFFにして確認したので
こちらの環境依存ではないと思うが・・・
220 :
211 :2006/11/29(水) 01:38:13
ちょっと補足だけど 「Internet Explorer_Server」のHWNDはFindWindowEx()で取れるね。 時間がないのであまり検証できないけど、 なんかの役に立つかもしれないので一応。
>>220 ありがとうございます。
OLEでやろうとしたのは拡張したくなった時に
OLEのことをちょっと知っておきたかったのも
あります。
とりあえず今回はFindWindowEx()で乗り切ることを検討します
222 :
デフォルトの名無しさん :2006/12/04(月) 23:27:55
223 :
デフォルトの名無しさん :2006/12/06(水) 23:48:54
Wordに張るにはOLEサーバにする必要があるのですか? そうするとEXEを作る必要があるのかと思いますが、 C#の場合、OLEサーバを作るには何をすればよいのでしょうか? 必要なインターフェース等ご存知の方、よろしくご教授お願いします。
別にDLLでもサーバになれる。 C#とその他.NET全てのプログラムは、regasmを使ってCOMコンポーネントとして公開できる。 OLEサーバになりたければそのために必要なインタフェースを全部実装したクラスを作ればいいのだろうが、 そこまでは知らん。
225 :
デフォルトの名無しさん :2006/12/11(月) 22:56:16
ATL-COMだとメソッドの引数にユーザ定義型のポインタを渡せるけど、 オートメーションだと出来ないもの? (環境:VS2005 VC++、プロジェクトをMFCアプリケーションで作成した場合) VARIANTのポインタとかで渡さないとダメなのかな? だったらかなり面倒だなぁ…。
openoffice.orgでOLEが使えないのが痛い
htmlファイルからローカル・フォルダーを選択するための ActiveX+JScriptを使用しています。 var shell = SC.eval("new ActiveXObject(¥"Shell.Application¥")"); Folder = shell.BrowseForFolder(0,"Select Folder",0); 途中省略 <object id=SC classid=clsid:0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC> <param name=Language value="JScript"> </OBJECT> 上のスクリプトは,ネットで調べた解説をコピーして作りましたが,この ActiveX+JScriptが「安全である」かどうかを判断するには,どうすれば 良いのでしょうか?
>>227 そのGUIDってMSScriptControl.ScriptControlだろ?安全なわけないじゃん
なぜでしょうか?
>>227 セキュリティレベルは継承されるからそんなことしても無駄でしょ。
普通に var shell = new ActiveXObject("Shell.Application"); としとけばいい。
231 :
227 :2006/12/20(水) 11:09:12
>>230 BrowseForFolder.HTM V1.01 (C)
[email protected] 2005-08-17
が公開しているスクリプトを利用しました。この解説だと:
>Shell.ApplicationのBrowseForFolderを.HTMファイルで使おうとしても、
>何故か使えません。HTAにすれば使えるようになりますが、HTAにすると、
>逆に、使えなくなる機能もあり、どっちもどっちです。
私の質問の仕方が悪かったですが,227のようなhtmlファイルをユーザーに
IEのセキュリティー設定の変更をさせるずに,使用してもらうことは無理
ですか? htaファイルに拡張子を変更すると,ユーザーは,IEのセキュ
リティー設定の変更をしなくても良いのでしょうか?
ActiveXを使用したhtmlかhtaで,ユーザーが使いやすい配布方法を探しております。
>>231 の質問を言い換えると
「IEのセキュリティホールをご存じありませんか?」
233 :
227 :2006/12/20(水) 15:50:37
>>231 >htaファイルに拡張子を変更すると,ユーザーは,IEのセキュ
>リティー設定の変更をしなくても良いのでしょうか?
htaに作り替えて,IE ver. 7のセキュリティ設定を元に戻して,確認してみました。
(1) 拡張子をhtaに変更してActiveXを使用したページを私のサイトで公開すると,
ユーザーが私のサイトを「信頼済みサイト」に加えれば,その中で使用されている
ActiveXが自由に使えるようです。
(2) 拡張子がhtmlだと,ユーザーが私のサイトを「信頼済みサイト」に加えて,
さらに,「信頼できるサイト」のセキュリティのレベルを<低>にして,
さらに,Internetのセキュリティ・レベルのカスタマズを開いて,「
スクリプトを実行しても安全だとマークされていないActiveXコントロール
の初期化と実行」を<有効>または<ダイアログを表示する>にする
必要がありました。
>「IEのセキュリティホールをご存じありませんか?」
htaもIE上で動くので,IEにセキュリティホールがあれば,htaのActiveXも
危険なはずなのに,ユーザーの設定が(1)で済むのが不思議です。
実行時にセキュリティダイアログの出るHTML Applicationには特権が与えられる。
HTAを実行するのはIEじゃないしな
>>227 > (1) 拡張子をhtaに変更してActiveXを使用したページを私のサイトで公開すると
間違ってもHTAをそのままweb上で公開なんてしないでね。
> ActiveX+JScriptを使用しています
ム板にWSHのスレがあったりする。
237 :
227 :2006/12/20(水) 19:27:22
>>236 >
>>227 >> (1) 拡張子をhtaに変更してActiveXを使用したページを私のサイトで公開すると
>間違ってもHTAをそのままweb上で公開なんてしないでね。
今現在,HTAを私のwebで公開しているのですが,大きな問題が
起こる可能性があるのでしょうか? (話しのながれで,この板で
最後の質問させていただきました。)
HTAは間違って実行すると何が起こるかわからん
exeだとかrootでのshスクリプトと何が違うんだ
ログに残らない
VC++でActiveXコンポーネットを作って、IE上で動かすところまでは出来ました。 そこから呼び出し元のHTMLをJavascriptで操作することはできますでしょうか?
俺はできると思う。 まずは色々自分で試してみようよ。
243 :
デフォルトの名無しさん :2007/02/07(水) 21:35:23
>>241 やりたいことがよくわからんけど、OCXからjavascriptの特定メソッドをコールしたいってこと?
IEを操作時にJavaScriptで「はい」「いいえ」のボックスが出現するのですが、 それを扱うことは可能でしょうか? InternetExplorer.Application辺りを調べてみましたがないみたいです。 もしご存知の方がおられましたら宜しくお願いします。
ダイアログボックス程度なら、 普通に子ウィンドウ検索してボタンに適当にウィンドウメッセージ投げてやればいいじゃん。
JavaScript 書き換えりゃいいんじゃね?
247 :
244 :2007/02/08(木) 20:52:46
>>245 その子ウインドウの検索をするメソッド名(?)を教えていただけないでしょうか?
もしくはその辺りの情報がひっかかる検索語句をお願いします。
VisualStudioのSpy++でウィンドウ階層見れるから手動で少し調査してから GetForegroundWindowかGetActiveWindowでIEかダイアログボックスのウィンドウハンドル拾って FindWindowでボタンコントロールのウィンドウ探してPostMessage。
249 :
244 :2007/02/10(土) 19:30:03
>>248 おお!丁寧にありがとうございます!
土日ですし、解決するまでがんばってみます!^^
OLEでメディアプレイヤーを操作したいのですがうまくいきません。 [MediaPlayer.MediaPlayer]のインスタンスは間違いなく作成できているのですが それに対してのメソッドがことごとく無反応です。 なにか特殊な前置きが必要なのかな。。
すみません質問させてください。 VC6のATLでActiveXコントロールを作成しCAB作ってサーバに上げたのですが、 URL直打ちでCABファイルがダウンロードできて、中身が見れたり別サーバに アップロードすればそのまま使えてしまいます。 特定のサーバからじゃないとインストールできなくしたりできるのでしょうか? 何かご存知の方がいましたら教えてください。
そういうものだ
254 :
デフォルトの名無しさん :2007/02/14(水) 19:10:08
使えてしまうって方は、 IOleClientSiteからIServiceProviderだか何だかを経由して IBindContext か何かを 取得すれば URL が解るから、それで動作変えれば。
255 :
252 :2007/02/15(木) 02:15:36
>>254 ご回答ありがとうございます。
なるほどー。URL取得して違う鯖だと警告出して終了、
などでOKそうですね。試してみます。
CABファイルのダウンロード禁止はやっぱり無理でしょうか。
鯖側で.htaccessでCABファイルの直リン禁止にしたら
インストールもされなくなってしまいましたし・・・。
設定間違えてるのかもしれませんがこれはスレ違いぽいですね。
あとは時間があればライセンス付ActiveXコントロールでも
試してみます。
ACLかけろよ
>>255 asp でも cgi でもいいから、ダウンロード専用のページを作成して、
その中でリファラをチェックすればいいよ。
リファラを見て問題がなければ、ローカルからCABを読み込んで
ストリームに流し込んでやればいい。
捏造できる罠 そもそも配布方法に問題があるんじゃ?
259 :
252 :2007/02/17(土) 07:44:13
>>256-
>>257 いろいろやりかたあるみたいですね。
土日で調べて試してみようと思います。
>>258 CABファイルを鯖にアップロードしただけなのですが、
普通に置いただけじゃ駄目ということでしょうか?
見られてまずいものはそれなりの認証が必要にするべきでは?
OLEでインプットダイアログを表示させることはできないでしょうか? 単なるポップアップは WSctipt.Shell の Popup を発見したのですが。 これがあれば簡単に対話式のプログラムを組めるのですが、、、、
いやオートメーションの中で何を呼ぼうと自由では
ProgIDからタイプライブラリを取得したいんだけど、API無いの? 自分でレジストリ検索しなくちゃだめ? 公式な検索ルールってあるの?
ほしゅ
初歩的な疑問があるんですが、お教え願えないでしょうか。 環境はVS.NET 2003です。 MSDNチュートリアルを見ながら、ATL のActiveX コントロールを作ってみたんですが、dll の容量が324Kbでした。 同様の物を MFC で作った ocx の容量は144Kbでした。 てっきり ATL の方が小さくなると思ってたんですが... ひょっとして、MFC の方は別途必要な物があるんでしょうか?VBRUNJPなんとかみたいに。 どうかよろしくお願いします。
動的リンク
267 :
デフォルトの名無しさん :2007/04/08(日) 18:08:03
どなたかActiveXのダウンロードサイトを貼ってくれまいか?
どの?
269 :
デフォルトの名無しさん :2007/04/08(日) 18:35:09
>>268 そんなに色々あるんですか?
実はハンゲームに登録したもののActiveXが無いのでゲームが出来ないんですよ
ゲームを始めようとすると、そのゲーム自身のAcitveXコンポーネントがダウンロードされるはず。 そのAcitveXコンポーネントの実行環境はWindowsとInternet Explorerが備えている。 それ以外の環境で実行したいという話なら知らない。
271 :
デフォルトの名無しさん :2007/04/08(日) 19:10:00
>>270 ダウンロードのやり方の説明が出るだけで、何処にも出ないんですよ
272 :
デフォルトの名無しさん :2007/04/08(日) 19:11:20
*.hangame.co.jpを信頼済みサイトに登録してみろ httpsがどうたらというチェックは外しておけ それでだめなら、そもそも板違いだからよそで聞け
274 :
デフォルトの名無しさん :2007/04/08(日) 19:23:20
>>273 出来ました
ただ今度はダイレクトXをどれをインストールしたら良いかわからなくて
とりあえずダイレクトX9をインストールしようとしたら環境が悪く9%の
時点で34分掛かると出てしまいました。
後は自分で何とかします。ありがとうございました
VC2005にて、Webページに貼り付けるActiveXを作っています。 1プロセスで1つしか実行できない描画用ライブラリを 使ってるせいなのか、 ブラウザで同じページを2つ立ち上げると 片方の処理が停まります。 同じプロセス内だからでしょうか? 別プロセスで動くようにするにはどうすればいいんでしょうか? (VBの場合はActive.EXEにすればいいとわかりましたがVC の場合がわかりません)
276 :
275 :2007/04/19(木) 16:48:33
IEのショートカットで複数起動すると、それぞれ別プロセスになるので問題ないようです。 しかし、Ctrl+Nだと、全部1つのプロセスになるので、どうしても他のページに影響してしまうようです。
スレ立てれ
やめれ
恕を製作せずにタスクトレイにアイコンを追加して メッセージをそこで受け取ることは出来ますか?
そんな珍妙なものを製作していただく必要はありません。
282 :
275 :2007/04/19(木) 20:09:26
283 :
デフォルトの名無しさん :2007/04/19(木) 20:45:59
> 1プロセスで1つしか実行できない描画用ライブラリ の使用をやめりゃいいんじゃね?
284 :
275 :2007/04/19(木) 21:13:25
ATLでアウトプロセスにすればいけるかと思ったんですが、 子プロセス作ってウインドウハンドル渡してそこから描画しようと思います。 プロセス間通信が面倒ですが。 >283 代用できるもの無いんです。 非公開な特殊画像のデコーダなので。
285 :
275 :2007/04/19(木) 21:15:04
>ATLでアウトプロセスにすればいけるかと思ったんですが、 これの続き書き忘れました。 ATLのアウトプロセス(EXE)でも結局同じでした。 IEから独立したプロセスとして動いてくれますが、 IEを複数開いても、結局1つしかプロセスが立ち上がりませんでした。
インプロセスCOMが子プロセスを生成して、 パイプなぞで通信するというはどうか。
その変なサーバをマルチスレッドでエゴ仮想
288 :
275 :2007/04/19(木) 22:11:12
いろいろやってみましたがやはり子プロセスで行くしか無さそうです。
悔しいです!
>>286 それで行きたいと思います。
289 :
デフォルトの名無しさん :2007/04/24(火) 12:22:39
SDKで開発したアプリにOLEサーバ機能を追加しようと四苦八苦しております。 COMインターフェース部分はMFCを使ったほうが簡単かなと思い、 インターフェース部分はMFCのDLLという構成にしていますが クライアントからでCreateDispatchしたときにエラーとなります。 エラーは0x80070002です。 ここで疑問なのですが、そもそもこのような構成(COMi/fがDLL)で OLEサーバを作れるものでしょうか?
できるっていうか、普通そうじゃないのか。 単なるDLLとして作ってるとか言う落ちじゃなければ。
291 :
289 :2007/04/26(木) 19:00:20
>>290 すいません。説明不足のようでしたね。
SDKで開発したアプリというのはexeでして
このexeにCOMインターフェースを付けて
外部のアプリにサービスを提供しようとしています。
その方法としてCOMインターフェース部分を単なるDLLとしてexeとリンクし
外部のアプリとはCOMでの連携を考えています。
DLLでアウトプロセスCOMサーバが作れるかってはなしなら まず作れない 別々のプロセスに属するDLL同士が独自のIPC/RPCを 実装しているなら目的のことは出来るだろうけど。
>>291 まず、インプロセスサーバかアウトプロセスサーバのどちらなのかが話から見えない。
294 :
デフォルトの名無しさん :2007/04/26(木) 23:30:24
>>293 >まず、インプロセスサーバかアウトプロセスサーバのどちらなのかが話から見えない。
そんな用語があることさえ知りませんでしたがアウトプロセスサーバです。
やれないことはないだろうが、少なくともMFCのウィザードは使えないと思う。 DLLならインプロセスを前提にするだろうし、 アウトプロセスならEXE内に実装することを前提にするだろうし。
296 :
デフォルトの名無しさん :2007/04/27(金) 09:06:17
ありがとうございました。 いろいろクグりながら試行錯誤した結果、ATLで雛形を作って それに既存SDKのソースを組み入れるとできそうな予感がしてきました。 ATLは初挑戦なのですが、希望が見えてきました。
C++で ActiveXのコントロールを作成していますが、
コントロール側から 埋め込んでいるHTML内のJavascriptの
関数を呼び出すにはどうしたらいいのでしょうか?
↓以下のようなHTMLで mycontrolオブジェクト内から 関数f()を呼び出したいのです
---------------
<object id="mycontrol".../>
<script>
<!--
function f() {}
-->
</script>
---------------
以下のページの FireEventを使ったサンプルがヒントになるかと思いいろいろ試してみました。
http://www.microsoft.com/japan/msdn/columns/webteam/webteam02052001.aspx たしかにonclickなどのイベントを経由して間接的にf()を呼び出すことはできましたが、
直接f()を呼び出す方法がわかりません。
ご存知の方がおられましたら、ご教示お願いいたします。
298 :
297 :2007/05/18(金) 05:15:15
自己レスです。
>>297 の方法よりもうちょっとすっきりいくようになりました。
ActiveXコントロール側にイベントを追加して
それをJavaScript側でハンドルして f()を呼ぶようにすれば
間接的ですが、だいぶすっきりしました。
---------------
<object id="mycontrol".../>
<script>
<!--
function f() {}
function mycontrol::myevent()
{
f();
}
-->
</script>
---------------
最悪これで逃げようと思いますが、直接f()を呼ぶ方法はないものでしょうか?
299 :
275 :2007/05/18(金) 11:14:10
<script for="OBJECTID" event="MyEvent(fire)" language=javascript> <!-- alert("event=" + fire); --> </script>
300 :
デフォルトの名無しさん :2007/05/18(金) 11:15:29
やっべ名前が残ってた。
301 :
297 :2007/05/18(金) 14:39:33
302 :
デフォルトの名無しさん :2007/05/19(土) 15:55:23
C++でActiveXコントロールを作成し、HTMLのembedタグなどを使って
動作させることは出来たのですが、
>>121 のように
直接対象ファイルをIEにドロップしてもコントロールが動作するように
させるにはどうしたらいいのでしょうか?
ActiveXドキュメントにしたところ、そのような動作ができましたが、
拡張子がexeになりますし、今度はActiveXコントロールとしてコンテナに
貼り付けることができなくなってしまいました。
拡張子がocxのまま
>>121 のような挙動をさせるには
どうしたらよいのでしょうか?
303 :
302 :2007/05/19(土) 16:04:45
補足です。
HKEY_CLASSES_ROOT\.ext (extはコントロールと結び付けたい拡張子)に
自分のActiveXコントロール識別子 (Hoge.Ctrlなど)を指定し、
HKEY_CLASSES_ROOT\Hoge.Ctrl\CLSID に
ActiveXコントロールのGUIDを記述したところ、
IEに.extファイルをドロップすると、コントロールが呼び出されて起動するところまでは
デバッガで確かめることができました。
しかし、COleControlの派生クラスがコンストラクトされたあとに
すぐにデストラクトされてしまい、結局動作するに至っていません。
結局IEでは、ファイルを開くことができませんでした、とエラーになってしまいます。
>>131 の方が言われるように追加でいくつかのインタフェースを実装する必要があるということでしょうか?
質問です。 ActiveXを初めて使ってみようとしている所です。 とりあえずWin32コンソールアプリで適当なActiveXコントロールを呼び出して 適当なプロパティをセットして動くかどうか試すだけ、という事をやろうとしています。 以下のようなコードを書いたのですが、GetIDsOfNames()までは正しい値を 取得できているようなのですが、Invoke()の所でエラー値が返ってきてしまいます。 (エラー値は0x8000ffffで致命的なエラーです。) COM関連のサイトや本を調べて手順は踏んでいるつもりなのですが、 何か基本的な所でミスがあるのでしょうか? よろしくお願いします。
305 :
304 :2007/05/22(火) 00:13:30
#include <atlbase.h> #import "TEST.ocx" rename_namespace("TEST") named_guids const GUID IID__TEST = {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}; int main( int argc, char** argv ){ ::CoInitialize(NULL); HRESULT hRes; TEST::_DDTest p = NULL; hRes = CoCreateInstance(TEST::CLSID_TEST,NULL,CLSCTX_SERVER,IID__TEST,(void**)&p); VARIANT vPar; ::VariantInit(&vPar); vPar.vt = VT_I4; vPar.lVal = 0; DISPID lDispId = 0; wchar_t* pwcName = L"Prop"; hRes = p->GetIDsOfNames(IID_NULL,&pwcName,1,GetUserDefaultLCID(),&lDispId); DISPPARAMS stPar; memset(&stPar,0,sizeof(DISPPARAMS)); stPar.cArgs = 1; stPar.rgvarg = &vPar; stPar.cNamedArgs = 1; DISPID rgdispid[] = {DISPID_PROPERTYPUT}; stPar.rgdispidNamedArgs = rgdispid; hRes = p->Invoke(lDispId,IID_NULL,dwLcId,DISPATCH_PROPERTYPUT,&stPar,NULL,NULL,NULL); p->Release(); ::CoUninitialize(); return (0); }
306 :
デフォルトの名無しさん :2007/05/27(日) 18:43:28
VB6 IDE 及び Office VBE IDE を扱いのですが、リンクエラーで躓いています。 VisualStudio2005+SP1 で Win32プロジェクトを作り、stdafx.h に以下の行を追加しました。 #import "MSO.DLL" raw_interfaces_only rename("RGB","MSRGB") rename("DocumentProperties","MSDocumentProperties") #import "VB6EXT.OLB" raw_interfaces_only, raw_native_types, rename_namespace("VBIDE"), named_guids, auto_search #import "VBE6EXT.OLB" raw_interfaces_only, raw_native_types, rename_namespace("VBAIDE"), named_guids, auto_search DLLやOLBファイルは実際はフルパスで記述しています。 他はプロジェクト初期状態から変更していない状態でビルドすると以下のエラーになってしまいます。 fatal error LNK1179: ファイルが無効か、または壊れています: COMDAT '_IID_Application' を複製します。 回避策がありましたら、よろしくお願いします。
308 :
デフォルトの名無しさん :2007/06/01(金) 16:53:09
IEがコンテナな、描画処理が重いActiveXを作ってます。 スクロールするとWM_PAINTが沢山やってくるので、スクロール中は描画しないように したいのですが、IEのメッセージをフックしてもWM_VSCROLLが来ません。spyにも出てきません。 一体どうやってスクロール中の描画処理を回避すればいいのでしょうか?
Aeroにする
予めメモリDCやメタファイルに描画しておいて、 WM_PAINTではそいつを表示するようにするだけにするというのはだめか?
WM_PAINTはメッセージの優先度は低いんだから描画してやれよ。 まあ、ValidateRectしといて、SetTimerでWM_PAINTを 遅延させる手もあるだろうけどサ
312 :
308 :2007/06/01(金) 21:08:22
ちょっと仕組みが複雑でして、 ハンドルを渡して子プロセスに描画させてるのですが、 それへの命令はパイプの通信で行ってるんです。 数ミリ秒単位でWM_PAINTをプロセス間通信で投げると どんなにバッファを用意していても、通信処理が追いつかず いつかバッファからあふれて、他の命令が飛んでしまいます。 WM_VSCROLLは取れないんだとしたら、 WM_PAINTは0,1ミリ秒に一度だけ、とかの処理に逃げるしか 無いんでしょうか。
313 :
デフォルトの名無しさん :2007/06/08(金) 22:58:48
質問です。 たとえばあるActiveXコントロールで、ある処理の実行を要求するRun()メソッドと、 その処理が完了した事をコンテナに通知するRunComplete()イベントがあるとします。 やりたい事は、コンテナでRun()を呼び出した後、 RunCompleteイベントが通知されるまで無限ループで待機し、 イベントをキャッチして処理が終了した事がわかったら脱出する。 それをforループで数回繰り返す、というものです。 コードにすると以下のような感じになると思うのですが、 「イベントをキャッチしたら」に当たる部分の実装方法がわかりません。 for( i=0; i<10; i++ ){ m_TestCtrl.Run(); // 処理実行要求 while(1){ if( イベントをキャッチしたら ){ break; } } } 最初イベントハンドラ(OnRunCompleteTestctrl())を使って上記手順を 実現しようと考えたのですが、「forループで数回繰り返す」という所で ひっかかってしまっています。 よろしくお願いします。
概念的にはイベントは、そんな風に使う存在ではない 形としては向こうからコールバックされるもの
>>313 for( i=0; i<10; i++ ){
ミューテックスhogeを作成する。
m_TestCtrl.Run(); // 処理実行要求
ミューテックスhogeがシグナルになるまで待つ
}
OnRunComplete() {
//一連の処理
ミューテックスhogeをシグナルにする。
}
関連API
CreateMutex
OpenMutex
ReleaseMutex
CloseHandle
WaitForSingleObject
315だか よく考えたら これイベント発生させる必要ないんじゃない? m_TestCtrl.Run()の後にRunCompleteイベントが発生したときに 実行されるつもりのコールバック関数を直接呼べばいいと思うが。
317 :
デフォルトの名無しさん :2007/06/09(土) 11:30:22
VC6で作成したインスタンス化されないActiveXコントロールの入ったダイアログを VC++2005のリソースエディタにインスタンス化されない状態で表示させたいのですが。 VC6のように表示してくれません。VC++2005のプロパティで何らかの設定が必要なのでしょうか? よろしくご指導下さい。なお、VC++2005でのプログラム開発ははじめての素人ですどうぞ宜しくお願い致します。
318 :
デフォルトの名無しさん :2007/06/09(土) 11:36:16
VC6で作成したインスタンス化されないActiveXコントロールの入ったダイアログを VC++2005のリソースエディタにインスタンス化されない状態で表示させたいのですが。 VC6のように表示してくれません。VC++2005のプロパティで何らかの設定が必要なのでしょうか? よろしくご指導下さい。なお、VC++2005でのプログラム開発ははじめての素人ですどうぞ宜しくお願い致します。
319 :
デフォルトの名無しさん :2007/06/12(火) 03:54:12
デュアルインターフェースで大量のデータを高速にやり取りする方法ってないのかな 構造体の配列は渡せないし、ファイルを経由して渡すようなやり方しかないんだろうか
>>319 >構造体の配列は渡せないし
渡せるがVB6やVBScriptから使えなくなってしまう。
SafeArrayを使えば何とかなるが今度はC++や.NETからの利用が面倒になる。
>>321 SafeArrayだと型の制限がキツいし構造体も使えなかったんじゃなかったっけ
VARIANTの配列にしてしまえばやりたい放題だったと思うが、 お友達にはなりたくはないな。
IRecordInfoとかを使えばVARIANTに構造体(へのポインタ)を持たせられるみたいだがよくわからない
全部シリアライズ化してLPCTSTRで渡す。
その発想なかったわ
327 :
デフォルトの名無しさん :2007/06/27(水) 11:32:33
初歩的な疑問があるのですが、お教え願い致します。 環境はVC++2005です。 ALTやMFCを使わないで、IEに貼り付けられるActiveXは、作れないものでしょうか? ATLやMFCなどのDLLに依存させたくないのです。 可能でしょうか? 参考になるURLなど教えて頂けたら幸いです。 宜しく御願い致します。
>>327 >ATLやMFCなどのDLLに依存させたくないのです。
どっちも静的にリンクできるがそれじゃいかんの?
オートメーションなら自前で何とかなるが、
実装の必要なInterfaceの多いOCXコンポーネントとなると現実的じゃねーぞ。
329 :
327 :2007/06/27(水) 14:09:23
ご回答ありがとうございます。 静的リンクで、とりあえず開発してみようと思います。 また、自前での実装も大変と思いますが、トライしてみます。 ありがとうございました。
Windows SDKのドキュメントを見ていて気付いたのだが、 ActiveX ControlsがVS .NET 2003付属のMSDNライブラリでは、 Component Developmentの下だったのに、 今のオンライン版ではWeb Development→Internet Explorer Development →Content Extensionsの下へ移っている。 最初無くなったかと思ったよ。
331 :
デフォルトの名無しさん :2007/07/19(木) 00:11:12
IEコンポーネントについて質問です。
navigate2()で、最後の引数のheadersにリクエストヘッダーとして
クッキーを送信したいんですがうまく行きません。
IEコンポーネントを使って、任意のクッキーを送信するには
どのようにしたらいいでしょうか。
環境はWinXP, IE7で、JScript WSHでテストしてみました。
-- ie.js --
var ie = new ActiveXObject("InternetExplorer.Application");
ie.Visible = true;
ie.navigate2("
http://localhost/cgi-bin/env.cgi ", 0, null, "",
"Cookie: aaa=bbb; ccc=ddd\r\nAccept: */*\r\nXXXXX: AAAAAAAAAA\r\n");
----
他のヘッダーはしっかり送られてるようです。
よろしくお願いします。
試してないけど IHTMLDocument2::cookie で設定してみたらどうだろうか。
>>331 やっぱり試してなけど、332の言うとおり
ie.document.cookie = "key=value";
でいけると思う。
ただ、cookieはURLに関連付けられるので、あらかじめターゲットのURLと
同じドメインのページを表示した状態での設定が必要。
-- ie.js --
var ie = new ActiveXObject("InternetExplorer.Application");
ie.Visible = true;
ie.navigate2("
http://localhost/ "); //適当なページ
(おそらく直前のnavigate完了の待ち合わせが必要)
ie.document.cookie = "aaa=bbb; ccc=ddd; path=/"; //pathの指定はお好みで
ie.navigate2("
http://localhost/cgi-bin/env.cgi ", 0, null, "",
"Accept: */*\r\nXXXXX: AAAAAAAAAA\r\n");
----
cookie 設定のオプションとして domain を指定できれば、このようなめんどくさい
ことしなくてよいのだが、セキュリティの関係で domain を明示的に指定しても
うまくいかないらしいので。
あと、このような質問はスクリプト関連のスレの方が適切な回答が得られると思う。
334 :
331 :2007/07/21(土) 00:16:12
ありがとうございます。 おっしゃるとおり、一度ページを表示後 document.cookieに値をセットすることで送信することができました。 確かにめんどうな手続きになってしまいますね。
335 :
デフォルトの名無しさん :2007/07/22(日) 18:52:52
【派遣ネガティブ根性チェック】 3つ以上、チェックがつけばアナタの性格はひん曲がっており、 ネガティブ負け組派遣人生を歩んでいます。 □派遣先正社員の作った糞開発ツールはたとえ腐っててもマンセーして使う □派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする □仕様とは正社員から口伝されるものだ □耳で聞いた仕様を正確に覚えていないのは自分の責任だ □昼食は必ず派遣先の社員と行くべきだ □自分の仕事で問題が発生しても解決するのは派遣の仕事ではない □派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい □自社で仕事なんてできるわけがない □派遣労働の問題点の話題が出ると感情剥き出しにして反論する □派遣労働の問題を指摘する人は嫌いだ □派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい □奢ってくれる派遣先正社員を尊敬する □自分の月額金額を知らないのは当然だ、単金を聞いてはいけない □派遣先正社員より自分の生涯収入が低いのは当然だ □チビは派遣先にかわいがってもらいやすいから派遣には有利だ
面白くないコピペするなよ。
337 :
デフォルトの名無しさん :2007/07/23(月) 11:10:04
Visual C++で書いた自前のプログラムから、EXCELを制御したいのですが オートメーション関係(?)の良い入門書をご存じないでしょうか? 本格的なOLEサーバーを作りたいとかではなく、やりたいことは 「EXCELシートを作って、そこにデータを書き込んで、簡単な表を作る」 程度のことなのですが。
338 :
デフォルトの名無しさん :2007/07/23(月) 12:33:37
339 :
デフォルトの名無しさん :2007/07/23(月) 13:41:08
ありがとうございます。 でも、やりたいことの実現方法が知りたいのではなくて 探しているのは「書籍」です。 お教えいただいたサイトに書いてあるようなことが「解説」してある 入門書は無いでしょうか? 「OLE/ActiveXの内部構造を知る/独自のサーバーを作る」というよりは、 「EXCEL/WORD/IEなどを外部から薄く利用してみる」って感じのものです。 私自身は大昔に「Inside COM」「Inside OLE」というような書籍で 勉強したのですが、「そこまで知りたくない人=自作プログラムで EXCELを使いたいだけ」っていう人向けの良い書籍を探しているのですが なかなか見つからなくて。
C++からExcelはニッチ過ぎてないかもしれないね。 VBからExcelを操作する本と、 C++からオートメーションを使用する本の2冊は必要になるだろう。
C++でVBSをホストした方が早い気がする
VC++からのExcelオートメーションなんて、いつもVBAのヘルプ見ながらやってるな。
普通にvbaでいいじゃん
すでにVisual C++で作ったアプリにExcel出力機能を実装したいんでしょうよ
何をインポートすればいいんだか毎回ググっている俺。
346 :
デフォルトの名無しさん :2007/07/25(水) 23:43:26
一時期は本屋にOLEやらActiveXやらCOM/DCOMの書籍が 所狭しと並んでいたけど、今はほとんど無いよね。 これから勉強をする人はどーすんだろ?
.netをとっかかりにしてドツボへ
これから勉強をする人なんていねーだろ
PowerPointオートメーションなんてサンプルほとんどねーよ。 アニメーションを一時停止なんてどうすりゃ・・・ 右クリックするとコンテキストメニューでて一時停止されるから、できると思うんだが。
ヘルプでそれっぽい名前のメソッドを探すとか
やっぱそれしかないよな。 明日もコツコツやっていきますわ。
Office製品を始めサーバを利用するためのドキュメント 見たことないけどそもそも公式に公開してるの?
ウィザードで生成されたヘッダをみて、それっぽいメソッド探す
ヤッパそうなん。
356 :
デフォルトの名無しさん :2007/08/06(月) 08:52:50
夏はやっぱりOLE
357 :
デフォルトの名無しさん :2007/08/08(水) 01:54:21
全然詳しくないので質問させてください。 自称「マネージメントもできる」派遣クンが 「ActiveXが僕のプログラムどおりに動かない原因を調べるのは僕の仕事ではありません。」 と言っています。 彼のActiveXプログラムが動かないのを調べるのは誰の仕事なのでしょうか?
お答えいたします。 コピペ君って馬鹿だな
359 :
デフォルトの名無しさん :2007/08/08(水) 18:19:41
派遣はクズ・ゴミ・負け犬だから、許してやれや
360 :
308 :2007/08/08(水) 18:56:09
じゃあ、派遣クンの存在って意味ないんじゃね?
362 :
デフォルトの名無しさん :2007/08/09(木) 13:21:10
そーです。その派遣クンは意味無いんでとっとと切るべき。
363 :
デフォルトの名無しさん :2007/09/01(土) 15:47:54
でも派遣クンはしがみつくことに必死です。
VARIANT って必ず VariantInit(&hoge); してから使って、 作業が終わったら VariantClear(&hoge); しないといけないのですか?
それは空 (VT_EMPTY)のインスタンスを作るのが役目なので、 いきなり何か値を代入して初期化するなら、VariantInitは不要。 ATL::CComVariantもコンストラクタの種類によっては、 VariantInitを行わずに初期化していたはず。 VariantClearは、整数型など解放処理の必要のないデータが 入っていると確実に言えるのなら不要。 BSTR、SafeArray、IUnknown*などが格納されている場合に、 その解放処理を行うのがVariantClearの役目。
そのようですね。 逆に考えて、 VARIANT って必ず毎回 VariantInit(&hoge); してから使って、 作業が終わったら VariantClear(&hoge); すると何か問題あるのですか?
俺には
>>365 に答えがあるように見えるのだが…
リファレンスカウンタの増減を管理して いらないものは勝手に捨ててくれるから VariantInit/VariantClearはちゃんと呼ぶべき ってどっかに書いてあった なんかウソっぽいんですが
うそですよぇ
スレ違いだったらごめん。 教えて欲しいことがあります。 VS2005 の VC++(MFC) で ActiveX 作ってるんだけども、 ActiveX 作ってCAB プロジェクトで OCX を CABで圧縮して出力してます。 で、その CAB をWebサーバに置いて各クライアントにインストールすると C:\WINDOWS\Downloaded Program Files にインストールされた ActiveX の「状態」が「不明」となってしまいます。 これってどこかに設定するとことかあるの? それともつくりが悪いのでしょうか。 ググってもそれらしい情報見つからなくて・・・(´・ω・`)
371 :
デフォルトの名無しさん :2007/09/27(木) 10:43:47
BSTR bstr = SysAllocString( L"あうぇくぇあ" ); VARIANT param; param.vt = VT_BSTR; param.bstrval = bstr; 処理 VariantClear( param ); //(1) SysFreeString( bstr ); //(2) (1)と(2)は両方必要? (1)があればOK? おしえてエロイ人
1までで十分。そのためのVarinatClear
373 :
デフォルトの名無しさん :2007/09/28(金) 10:23:56
ありがとうエロイ人
Visual C++ 6.0でMFC ActiveXコントロールを作成しています。
テキストボックスを拡張したタイプです。
WM_DROPFILESイベントでOnDropFilesメソッドを作ったのですが
IEでこのコンポーネントを使った場合に、このイベントが発生してくれません。
VB6.0のフォームに貼り付けると問題ありません。
IEでもファイルのドロップイベントが発生するようにするためには
どうしたらよいでしょうか?
http://www.hi-ho.ne.jp/babaq/bfup.html やりたいのは↑みたいなことなのですが
これはリストボックスにドラッグできますので
できないということはないはずなのですが・・・
よろしくお願いいたします。
>>374 IEのセキュリティでActiveXがアクティブになってないんじゃないの?
HTMLのへ張り方みせてみな
MFCを利用してActiveXコントロールを作成したいのですが、 コントロールで呼び出せるメソッドの引数として、 クラスのオブジェクトを渡せるようなコントロールを作る必要があります。 DISP_FUNCTIONのvtsParamsの値および メソッドのプロトタイプ宣言の引数をどのように定義して、 どのような手続きになりますか?
>>376 言語は、Visual C++ 6.0です。
378 :
376 :2007/11/13(火) 21:31:35
オブジェクトのポインタが渡せれば、コントロール側で受け取ったポインタを、 本来のクラスポインタへ代入して利用できれば良い と思ったのですが、そもそもそんな事は許されてないのでしょうか。 イメージとしては、 コントロール側では、 void MyActiveX::Test( XXXXX *p ) { CHoge *MyCls = p; MyCls->hoge(); } になり、 呼び出し側では、 CHoge hoge("test"); MyActiveX myCom; myCom.Test( &hoge ); みたいにできるといいなと。
>>376 ActiveXオブジェクト (IDispatch派生クラス)なら、
普通に受け渡しできると思うぞ。
380 :
376 :2007/11/13(火) 23:54:45
>>379 それは、渡したいオブジェクトでGetIDispatchでIDisptchを受け取って、
コントロール側では、VTS_DISPATCHをvtsParamsとするってことですか?
そうである場合はいいのですが、
仮にIDispatch派生でない場合はわかります?
普通にできるよ。 VARIANT*でもなんでもActiveX引数にできるものに変換して受け渡しすればいいだけ。
void*でいけるんじゃない?
VARIANT FAR* でいけました! 尚、ActiveXコントロールからActiveXコントロールをCreateするには、 どうすればいいんでしょうか?CWndのポインタが取得できないようで。
自作のOCXにオブジェクトのポインタを格納したVARIANTを渡しているのですが、 VARIANT vTest; vTest.plVal = (long*)オブジェクト; vTest.vt = VT_I4 | VT_BYREF; 自作OCX.method( vTest ); VBscriptで自作OCXを呼び出すと、VT_DISPATCHとなります。 しかし渡すオブジェクトはCWndクラスを継承したオブジェクトで、 Dispatchが取得できないので、自作OCXのインタフェースを IDispatchなどにできません。(誤解があるかもしれませんが) 要は自作オブジェクトをOCXの引数として渡す場合、 OCX側はどのようなインタフェースを定義して、 どのようにOCX側へ渡す手続きをするのが望ましいのでしょうか? VC++、VB、VBScriptでも呼び出せるOCXを作成したいです。
VB/VBScriptで扱えるオブジェクトは、IDispatch派生の ActiveXオブジェクトだけなのだから、 自作オブジェクトを表すActiveXオブジェクト(のクラス)が必要。 既存のコードを修正したくなければ、methodの引数のVARIANTが VT_DISPATCHなどだったら上記のActiveXオブジェクト、 そうでなければ、既存の自作オブジェクトのクラスと見做すとでもしたらどうだろう? ところで、そのコード中の「オブジェクト」がクラスへのポインタ型なら、 plValではなくbyrefへ代入し、vtはVT_BYREFだけにしたほうがいいと思う。 こうするとvoid*扱いになる(もちろんVB/VBSからは扱えないが)。
つーか自作オブジェクトにIDispatch実装しとけばいいんじゃね
質問です。XP、VC++ 2005 で開発を行っています。 IE 上に貼れる独自の ActiveX コントロールを作ろうと思ったのですが、 わけあって、これを MFC や ATL を使わずに、WinAPI を直叩きで作りたいのです。 一から ActiveX コントロールを作るための、何かよい資料はないでしょうか?(本やWebページなど) .NET の普及のせいか、ActiveX 自体なかなか資料が見つかりません。 そもそも、これらを使わずに作るのはほぼ不可能なのでしょうか…。 現在は、MFC や ATL で自動生成されたコードとにらめっこしながらちまちま作っているのですが どうにも層が深く、苦戦しております。 よろしくお願いします。
390 :
薄汚い派遣の国、日本 :2007/12/27(木) 03:43:01
最近、職場で「出戻り寄生派遣」という言葉が囁かれています。 派遣契約を切られたにもかかわらず「次の派遣先でも切られてしまって生活できません」 などと 言って泣き落としで現場マネージャーにすら一切話がないまま再派遣契約した人のことです。 今月初め、半年前に切った派遣が出社してきてマネージャーも含めみんなびっくりしました。 影でコソコソ偉い人に泣きついて再契約したそうです。同じ部署の人には黙って・・・ そんなことまでして自宅の近くの派遣先にこだわって人間として恥ずかしくないのですか。 仕事に必要な技術がなく勉強する気もないのを逆手にとって 「私のような人の視点で仕事をすることも大切だと思います」と挨拶された時には みんな凍りついていました。派遣でスキルアップとか言ってる癖に以前と同じように 技術を勉強する気はなく「それは私の仕事ではありません」の一点張り、 派遣で収入アップとか言ってる癖に時給は前回と同じで喜んで再契約。 結局、なんの努力もせずに派遣で安直に収入を得たいだけじゃないですか。 身分不相応な商品のローンを払うために派遣だと当然足りない収入は親にも寄生して、 いつ切られるんじゃないかとビクビクしながら人事権のある人間とだけ仲良くし、 契約終了を通知されれば泣き落とし。悲惨な人生ですね。 氏んだほうがいいんじゃないですか。
391 :
デフォルトの名無しさん :2007/12/27(木) 03:51:28
392 :
デフォルトの名無しさん :2008/01/05(土) 11:54:10
COM の話題はどこに?と探してここにたどり着きました. MSXML6 を Visual C++ 2008 Express Edition から アンマネージドで使おうとしています. int main(int argc, char** argv) { //COM を使うスレッドで呼び出す必要がある CoInitialize(NULL); //DOMドキュメントのインスタンスを生成する MSXML2::IXMLDOMDocument3Ptr pDocument; HRESULT hresult; hresult = pDocument.CreateInstance(MSXML2::CLSID_DOMDocument60); //スレッドの終了前に必要なはずだけど //これを入れると main 終了時に _com_ptr_t でエラーが起きる //二重解放? CoUninitialize(); return EXIT_SUCCESS; } main の最後で CoUninitialize を呼ぶべきだと思うんですが, そうではないのでしょうか?
393 :
デフォルトの名無しさん :2008/01/05(土) 12:02:13
う,ほげPtr を使っているということは _com_ptr_t の インスタンスが生成されているわけで,そのデストラクタが 呼び出される前に CoUnInitialize しちゃだめか.
394 :
デフォルトの名無しさん :2008/01/14(月) 16:59:38
395 :
デフォルトの名無しさん :2008/01/20(日) 01:53:37
396 :
デフォルトの名無しさん :2008/01/21(月) 14:05:25
397 :
デフォルトの名無しさん :2008/01/22(火) 01:18:08
動画にアクセスしたらzoomeのDQNは早い
70Mbpsぐらい出たよ インターネットなら
透過スピードに近いのではないだろうか?
http://www.lunascape.jp/community/ Lunascape Core Version 4.5.2.1 / ANSI
Operating System Version 6.0.6000
Internet Explorer Version 7.0.6000.
398 :
デフォルトの名無しさん :2008/01/22(火) 11:51:36
rubyのwin32OLEを使ってIEを操作してるんだけど、フレームの情報を取得しようとすると OLE error code:80070005 in <Unknown> Access is denied ってエラーがでるんだが、iframeで別ドメイン参照しているフレームなのでアクセスできないってことかな? (同一ドメインだとアクセスできることは確認した) なんとかフレームの中身を知る方法ないですかね?
フレームを別に開く
400 :
デフォルトの名無しさん :2008/02/10(日) 01:01:29
ODLはマイクロソフトの作ったものではないし、オートメーションはマイクロソフトの開発した技術だと理解しています。 で、属性でoleautomationというのがありますが、このようなキーワードがあると、まるで、ODLがオートメーションを想定し、 COMの一部としてオートメーションをサポートしているかのような印象を持ってしまいます。 でも、これはマイクロソフトが拡張した属性なのですよね?? COMは初心者で最初にやるのがマイクロソフトのプラットフォームなので良く分からず、変なことを聞いてるかもしれませんが。
>>400 odlとはまた古いものを・・・
MSはCORBAの初期メンバーだったんだけど、
あまりに策定が遅いんでたもとを別れ独自のOLE2/COMへ進路をとることになった。
その関係でCOMとCORBAで共通の概念やキーワードを使ってる事がある。
まあそのくらいの関係なので基本的にMS独自と考えるべき。
>>401 なるほど、良く分かりました。ありがとうございます。
403 :
デフォルトの名無しさん :2008/02/16(土) 15:01:55
「ActiveX inside out」って本で勉強中です。 IClassFactoryっていうのはCoCreateInstanceの中から呼ばれるらしいですが、 OleView.exeでCOMオブジェクトをいくつか見てみましたが、IClassFactoryというインタフェースを実装している奴が無いのが多いです。 (っていうか、IClassFactoryを持つものがまだ見つかりません(^^)) DirectShowのフィルタ(マイクロソフトは、DirectShowフィルタはCOMじゃない、とか意味フなことを言ってますが)では ファクトリ用の関数をCOMオブジェクト提供者が実装し、これをレジストリに登録しているようです。(CFactoryTemplateっていうやつを使って) IClassFactoryってのはCOMのマネージャがCOMロード時に使用する手段の一つに過ぎないのでしょうか? もしそうだとすると現在はどのような方法でCOMオブジェクトの開発者がインスタンス作成手段を提供するのが一般的ですか?
IClassFactoryの取得は、インプロセスサーバの場合、 DLLから公開されているDllGetClassObject関数を使う。 アウトプロセス鯖の場合はまた別だけど今は省略。 こいつからクラスファクトリを得るため、 IClassFactoryを実装したオブジェクトを公開する必要はない。 だからOleViewで探したって見付からないのも不思議ではない。
>>404 なるほど、そうでしたか。
早速の回答ありがとうございますm(_ _)m
406 :
デフォルトの名無しさん :2008/02/17(日) 03:04:37
ここには凄い詳しい方がいらっしゃるので、調子に乗ってまた質問させてください。 自分は本をよんでるだけでアヤフヤな理屈しかなく、経験がないので分かってないのですが、 IDispatchと言うのは、「IDispatchを継承して作成したインタフェースのメソッドやプロパティーを文字列で参照できる」という機能を提供するものなのでしょうか? 例えばあるオブジェクトがIFooというインターフェースを提供し、 IFooにはint foo(int i)なるメソッドがあるとします。 またIDispatchを継承したIMyDispatchがあるとし、 これもint mydispmethod(int i)というメソッドがあるとします。 この場合、IMyDispatchに対してIFoo::foo()をdispidに変換させ、Invokeすることは可能なのでしょうか? それともIMyDispatchのmydispmethodはIDにしてInvokeできるけれども、fooはそうすることで呼ぶ事はできないのでしょうか?
>>406 望みの回答になっているかどうか分からないけど。
IDispatchインタフェースを提供しない Obj1 というオブジェクトがあって foo() というメソッドを持ち、
IDispatchインタフェースを提供する Obj2 というオブジェクトがあって bar() というメソッドを持つとき、
Obj2 では名前 "bar" をキーにしてメソッド bar() を呼び出すことができる(名前をID変換してから Invoke)が、
Obj1 では名前 "foo" をキーにしてメソッド foo() を呼び出すことはできない。
あくまで、自分のオブジェクトだけに関係するので、
Obj2がIDispatchインタフェースを持っているからといって Obj1 に対して何か(名前のID変換とかInvokeとか)できるということはない。
DDEの質問はこのスレでいいですか?
流石にそれは普通のWin32 APIスレで聞いたほうがいいと思う。
>>407 ということは、あるオブジェクトがIDispatchを公開していれば、そのオブジェクトの他のインタフェースのメソッドも
文字列で呼び出せるってコトでしょうか?
>>410 IDispatch派生インターフェイスを実装・公開していて、ほかのメンバにDISPIDが振ってあって、デュアルインターフェイスならOKじゃね?
場合によってはただのディスプインターフェイスだとほかのカスタムインターフェイスのメソッドに関連づいてないことはあるかもしれない。
>>411 IDispatch派生インタフェース以外の、(同じオブジェクト上の)インタフェース上のメソッドも、DISPIDを振ることが出来るんですね。
すると、IDispatchだけを要求すれば、その他のインタフェースは要求しなくともその他のインタフェース上のメソッドが利用できると。
ついでにお聞きすると、デュアルインタフェースである必要があるのですか?
ところでIDispatchの仕組み(つまりオートメーション)とは単にVBやJavaScriptがCOMにアクセスするために用意された仕組みなのかな?
(C++だとvtblでアクセスできるし、好きなインタフェースをQueryInterfaceで要求できるし。
しかもVBの場合、内部でCoCreateInstanceを呼び出しを行い、その時に要求するインタフェースがIDispatchらしいし。
まさにVBの為にあるような印象。。)
>>412 ごめん勘違いするようなこと書いた。
DISPIDはディスプインターフェイスかデュアルインターフェイスにしかつけられないはず。カスタムはだめ。
カスタムインターフェイスのメソッドが使いたいなら、ディスプインターフェイスやデュアルインターフェイスから間接的に呼ぶ必要がある、と思う。
オートメーションの考え方はスクリプト言語向けと考えていいと思うよ。
>>413 ああ、なるほど、良く分かりました。
いろいろありがとうございます。
>>412 idispatchは、まさにこのスレタイどおりオートメーションのための機能だよ
416 :
302 :2008/02/22(金) 16:34:45
ATLでActiveX コントロールの開発をしています。 ブラウザにてembedタグで埋め込んでおり、 そのとき "src"属性を使ってファイル名を渡していますが そのパス名の命名則がよくわかりません。 たとえば、 "file://aaa/bbb"だとネットワーク上の"\\aaa\bbb"を表し、 "file:///c:/aaa/bbb.ccc"だとローカルの"c:\aaa\bbb"を表しているようですが このへんのルールを調べるためのポインタをどなたか教えていただけないでしょうか?
417 :
416 :2008/02/22(金) 16:36:52
すみません、一部間違いがありました。 (誤) "file:///c:/aaa/bbb.ccc"だとローカルの"c:\aaa\bbb"を表しているようですが (正) "file:///c:/aaa/bbb"だとローカルの"c:\aaa\bbb"を表しているようですが
VISTAでのUACに関する質問です。 VC++2008で、ブラウザ(IE)から実行するMFC ActiveX(ocx)の開発をしています。 OCXでレジストリやファイルを操作したいので管理者権限で実行したいんですが MANIFESTUACにrequireAdministratorを設定してリソースにマニフェストを埋め込んで いるにもかかわらず、実行時に権限昇格のダイアログが出ません。 当然ですが、レジストリにアクセスする際にエラーが返ってきます。 IEを管理者権限で実行するか、UACを切れば問題なく動くのですが、事情がありユーザに それを要請することができません。 実行ファイルではなくOCXやDLLで権限昇格させることはできないんでしょうか?
そりゃ昇格はプロセス単位で行われるから、 例えIEから実行されるOCXでなくとも昇格できないだろうな。 とりあえず、(標準設定の)信頼済みサイトの中では、 保護モードオフだから普通のアプリケーション並の権限は得られる。
420 :
418 :2008/02/27(水) 00:45:59
>>419 どもです。やっぱ、ライブラリから昇格要求は無理ですよねぇ。。
仮想化をうまく使ってなんとか対処しようと思います
>>420 具体的にどこを弄るのかにもよるけど
レジストリやファイルの読み書きの権限を変えてしまうって手もあるよ。
OSのなら非常識だけどね
VC++2005を使ってIE上で動作するプラグインを作っています。 質問ですが、HTML上のJavaScriptから var f = function(){window.alert("ALERT");}; axobject.AddListener(f); のように任意のタイミングで実行したい関数を リスナーとして設定する(ActiveXからJavaScriptの関数を実行する)ことはできるのでしょうか? また、 axobject.SetData({aaa: 'aaa', bbb: 'bbb'}); のようにJSON形式で渡したデータの中身を得る方法はありますでしょうか? よろしくおねがいします。
叶姉妹
>>422 IActiveScriptでググれば、それなりにサンプルとか引っ掛かると思いまつ。
JSONでの受け渡しは無理っぽいような気もするけど、運が良ければ
VARIANT配列で渡ってくれるかも。
>>422 JSONつーか、それ単なるJavaScriptのリテラルだから、最悪IDispatchで叩ける気がするが。
VARIANTに入ってるIDispatchのInvokeをDISPATCH_PROPERTYGETで叩けば、とりあえず名前の分かってる値は取得できる。
あるActiveXがあって、それをC++で利用したいのですが、 dllで提供されていて、 どのように自分のプログラムとリンクさせて使えばいいのか解りません。 通常、普通ならばヘッダファイルとlibが一緒に提供されてるので それを使えばリンク可能だと思うのですが、 今回はdll単体しかありません。 こんなことは可能でしょうか?
DLLにタイプライブラリが入ってれば、VC++なら #import "hoge.dll" とかやればいけたりもする。
COMはlibでリンク不要なのが利点
利点なのか?libが無いとそんなにイイの? 俺はlibの方が埋め込まれたタイプライブラリよりずっといいと思うんだが
タイプライブラリを埋める話なんてしてませんが
個人的にはDLLをLoadLibraryして関数ポインタ取得するのがベスト
dispatch + invoke でほとんど片付くよな
436 :
デフォルトの名無しさん :2008/03/18(火) 20:36:06
このスレの住人なら知っていますね、あの糞開発ツールのことを ・自分のプログラムのバグなのかコンパイラのバグなのかわからない ・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している ・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている 糞だけど、政治的な理由で無理やり使わされているんですよね。 もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。 ・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。 ・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。 バグレポートなどしてはいけません。改善要求などもってのほかです。 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。 ・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」 なんて話が出たら力強く机を叩き、会議室を出ましょう。 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。 糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
わかんないよ
VistaのShell32.dllをコピー
>>437 Eclipseのことですね。わかります。
441 :
デフォルトの名無しさん :2008/04/21(月) 11:29:53
IDL の記述ってどこかで標準化されているの? Microsoft 独自? CORBA なんかでも同じような 役割のファイルを見かけるけど拡張子だけ同じで 中身は異なるものなんでしょうか?
>>441 IDLは一般名詞。Interface Definition Language。
OMG IDLはOMGが標準化したCORBA用のIDL。
MIDLはMSがCOMインターフェイスの記述用に作ったIDL。
XPIDLはMozillaで使われるXPCOM用のIDL。
少なくともOMG IDLはSUN-RPCのXDRがベースだった希ガス。
444 :
デフォルトの名無しさん :2008/04/21(月) 19:44:26
なるほど漠然とではあるけど事情がわかった気がする. 普段はMIDLしか使わないけど、最近は COM よりも .NET が使われるようになってきてるし、一方で Mozilla 系はまた別の仕掛けを使っているようなんで、 もうちょっと広く見てみることにします。
元ネタはOSF DCEだとINSIDE OLEにはあったな
446 :
デフォルトの名無しさん :2008/04/28(月) 04:47:18
集団ストーカーは恐怖心で僕を操った。 どんな方法で僕を恐怖させたんだろう?って思ってたが、一つの方法があった。 SSIから何度も迷惑電話をかけてこられ、一度来てくれさえすれば二度と電話しないと、 絶対に売りつけないし、あなたが買いたいと言っても売らないと約束したから出向いた。 そんときにヘッドギアを付けられて頭に電気を流され続けた後、恐怖のあまりに命令どおりに契約書にサインして 銀行もとっくに閉まってる午後8時に銀行員の姉にしつこく電話して時間外の振込みをやってもらった。 そこまでしないと何をされるか分からないと言う恐怖心からだった。 翌日には恐怖心は消えてたが、契約しちゃったし仕方ないかと。 クーリングオフすればいいやと思ったら、クレジット会社がクーリングオフを拒否しやがったから結局140万円のセットを購入させられた。 10万円値引きすると約束してくれたが、それすらも嘘だった。 その事件があったのは新宿の100階建てくらいのビルの中だった。 僕が集団ストーカーに襲われる前、母がそのヘッドギヤを僕に装着した。 僕を操るために。 僕は、5歳のころにも、母からヘッドギヤを装着されてロボットにされたことがある。ゼンリン教の教えを信じるために。 東京で装着されたときは、首が意識と無関係にひねり始めたが、それほど強力でもなかったと思う。 1分もしないうちに首が回らない程度に弱くしてくれたし。 しかし、母から装着されたときは、雷にうたれたくらいに感じたと思う。 なぜ新宿のビルの中にあったのと同じヘッドギヤを福岡の母が持っているのか分からない。 同じゼンリン教なのか。 同じ福岡出身なのか。 集団ストーカーから無理やり薬物を飲まされて警察に言ったら僕を逮捕するとか言うから、警察にも頼れなかった。
447 :
デフォルトの名無しさん :2008/04/28(月) 13:34:54
Win32コンソールアプリケーションでActiveX(OCX)のイベントを受け取ることは可能でしょうか。
僕ハンゲームというゲームをしたいのですが、 そのためにはこれが必要で、調べてみると 「ActiveXの脆弱性」などとよく書いてあります。 どのような症状が、どれくらいの割合で起きるのでしょうか。 潰れて動かなくなったりするのでしょうか?
PC初心者板行け。
コンテナからDISPID_AMBIENT_SCALEUNITSで得られる文字列って何? インチの場合は、inch? どこかのヘッダに標準的なプロパティ値の定義ってないですか?
WCHAR path = L"c:\\sample.txt"; IPropertySetStorage *pPropSetStg; StgCreateStorageEx( path, STGM_CREATE|STGM_SHARE_EXCLUSIVE|STGM_READWRITE, STGFMT_STORAGE, STGFMT_STORAGE , 0 , NULL , NULL , IID_IPropertySetStorage , reinterpret_cast<void**>(&pPropSetStg) ); 以上でファイル内にプロパティーデータ領域を作り プロパティにカスタムタブを作成したのですが、 プログラム上からカスタムタブにデータを書くのってどうしたらいいのでしょうか。
>>425 FMTID_UserDefinedPropertiesとIPropertyStorageで。
<<453 ありがとうございます。
456 :
デフォルトの名無しさん :2008/06/17(火) 19:13:04
javascriptからActiveXのメソッドを呼んで、 そのメソッド内で呼び元のIWebBrowser2インタフェースを取得する方法ってありますか? あったらその方法を教えてください。 ググったんですけどわかりませんでした。
javascriptでNew ActiveX Objectを使ってテキストファイルを操作するスクリプトを作成したんですけど、 オフラインでは動くんですけど、オンラインでは全く動きませんorz どなたか、詳細がわかる人がいたら教えてください。
459 :
デフォルトの名無しさん :2008/06/30(月) 17:47:47
IEの設定はどうなってます?
>>456 IWebBrowser2でぐぐったら山ほどサンプルが出てきたが
>>458 僕へのレスでいいんですよね?
やっぱりセキュリティ上の問題でできないんですかね。
インターネットオプションで
「スクリプトを実行しても安全だとマークされていないActiveXコントロールの初期化とスクリプトの実行」を有効にすれば、オンラインでも使えるんすけど、安全マークの付け方がわからないんすよね…。
>>462 ありがとうございます!
早速やってみます!!
MSペイントのオートメーションオブジェクトって 無いのでしょうか。 jpeg を開いて tiff で保存したい。 sendkey は泥臭いし。
OpenCV使えばいいんじゃね
GDI+使えばいいんじゃね
ありがとう
とは言うものの、会社のきまりで 妙なものはインストールできないんです。 「すでにあるもの」を使いたい、というわけでして
GDI+はDLL一個をアプリと同じフォルダに置くだけで使える。 つか、Windowsフォルダ以下に置くのはMSが推奨してなかったと思うが。
>MSペイントのオートメーションオブジェクト ないようだね。 >GDI+ GDI+ならXPからデフォで入ってるし、MS謹製だから妙なものではない。
ありがとう。 しみじみとうれしい
_ ∩ ( ゚∀゚)彡 Automation! Automation!! ⊂彡
473 :
デフォルトの名無しさん :2008/08/01(金) 11:40:29
自分が呼ばれた OBJECT タグの codebase の値って取れる?
474 :
デフォルトの名無しさん :2008/08/05(火) 00:20:52
てすと
>>120 ,
>>148 アップロードしている物を見たかった…。
WSHでExcelのイベントをフックしたいのですが可能なのでしょうか?
可能 WScript.CreateObject("Excel.Application","Excel_") or WScript.ConnectObject(Application,"Excel_")
477 :
475 :2008/08/22(金) 16:37:10
>>476 通常のオブジェクトはその方法、もしくは WSF で <object> タグでevents="true" とすることでイベント接続できるのは確認しています。
しかし Excel だとうまくいきません。
>>120 >>148 さんの仰っていたことも、そういうこと(通常の方法ではイベント接続できない)だと思うのですが…。
PowerShell使えば?
479 :
デフォルトの名無しさん :2008/08/28(木) 23:49:43
vbscriptやvbaからオートメーションでinternet explorerをいじるスクリプトを
作りたいのですが、internet explorerのプロパティやメソッドがわかりません。
すごく探したのですが一覧であるようなのが見当たりません。
http://home.att.ne.jp/zeta/gen/excel/c04p44.htm とかを見たら
(例)
Sub test()
Dim ieApp As Object
Const URL As String = "
http://home.att.ne.jp/zeta/gen/excel/ "
Set ieApp = CreateObject("InternetExplorer.Application")
ieApp.Navigate URL
ieApp.Visible = True
Set ieApp = Nothing
End Sub
とかって書いてあるのですが、ここで使われてる.Navigateみたいな、そういうのが
一覧であるようなリファレンスってないのでしょうか?
IEに対してオートメーションでやりたい操作があってもできません。
481 :
デフォルトの名無しさん :2008/08/29(金) 13:50:14
>
482 :
デフォルトの名無しさん :2008/08/29(金) 13:51:12
>480 ありがとうございます。 表示させたホームページの文章をコピーするのはどうやるのですか?メソッドがありません…。
483 :
デフォルトの名無しさん :2008/08/29(金) 18:28:04
最初パソコンを起動して立ち上げたときに -2147024770:オートメーション エラーです。 指定されたモジュールが見つかりません。 と出てきます。 消しても数秒ごとにでてきてかなわない状態です。 一回ログオフして入ると出てはこないんですが。 どうしたら消えるんでしょうか? 悩んでいます。
>>482 DocumentプロパティでHTML DOMが得られるから、煮るなり焼くなり好きにしろ。
486 :
デフォルトの名無しさん :2008/08/30(土) 09:56:58
VisualStudio2003,C#でエクセル用のCOMアドインを作成しているのですが、 レンジに関数式のテキストを出力する事がどうしてもできません。 コードは以下のように、InvokeMember()を利用しています。 object[] args = new object[1]; args[0] = "=Func1(A1,A2)"; // セルにテキスト出力したい内容 // objRangeはRangeオブジェクトとする objRange.GetType().InvokeMember("Value",BindingFlags.SetProperty,null,objRange,args); 実行すると、指定したレンジに =Func1 とだけ出力されます。 まさかと思いますが、関数テキストの出力はできないのでしょうか? わかる方がおられましたら、回避策など教えていただけないでしょうか。
普通式を設定するときは「Value」じゃなくて「Formula」に設定するんじゃないの?
488 :
デフォルトの名無しさん :2008/08/30(土) 16:07:57
Formulaでも駄目でしたが、=を入れていたからかもしれません。 言われてみれば、Formulaってメンバがあるのだからこれを使えばできそうですね。 家には環境がないので、週明けに試してみます。
489 :
デフォルトの名無しさん :2008/08/30(土) 18:10:46
>>485 解決しました〜
なんかスパイウェアのせいでなってたみたいで駆除した
後やってみると、みごとにパーフェクトでした。
質問です。 今WSHでやっている処理のうち、あまりにも重い一部の処理を ネイティブコードに移そうと考えています。 そのために、そのコードとのインターフェースを取るため、 これをCOMコンポーネント?にしたいのですが… 目的としては、単に処理をバイナリに移譲するだけなので、 filesystemオブジェクトのように不可視なものでよく、 単に数個の関数と、コールバックによるイベント処理と、 例外発生処理だけを実装したいのです。 なんか、良い資料とか、本とかないでしょうか? 教えてください偉い人。
>>491 どうも、
おかげで、jscriptから自作オブジェクトの関数が実行できました。
ただ、まだ自作オブジェクトからjscriptのメソッドをコールバックで
実行する方法がわかりません。
なにかヒントになるような情報を教えてください偉い人・・・
ちなみに、VC++.net 2003?使ってます…
一応質問なんでageときます・・・
jscriptのオブジェクトもIDispatchインターフェースを公開しているCOMだよ。
495 :
【大吉】 :2009/01/01(木) 18:58:30
>479 さんの質問と関連してるかもしれませんが オブジェクトが持っているプロパティやメソッドを 一覧で取得するメソッドというものはあるのでしょうか?
>>495 昔、会社の後輩がVBScriptかVBAかを使ってやってたんだけど、やり方を聞くのを忘れてた…。
>>496 ではRubyのCOMラッパを使ってるのかな。
>>496-497 ありがとうございます
でも結局判りませんでした
ひきちぎりおねがいします
499 :
497 :2009/01/03(土) 14:21:54
ありがとうございます なんとかなりそうです うまくいったらご報告します
501 :
デフォルトの名無しさん :2009/01/03(土) 21:50:20
Set tlb=CreateObject("TLI.TLIApplication") Set t=tlb.TypeLibInfoFromFile("C:\winnt\system32\dcomext.dll").TypeInfos on error resume next for i=1 to t.Count WScript.Echo "========" WScript.Echo t(i).Name Set m=t(i).Members for j=1 to m.Count WScript.Echo " " & m(j).Name next next
Const acSysCmdAccessDir = 9 'As Long Dim tl 'As TLI.TypeLibInfo Dim eif 'As TLI.InterfaceInfo Dim em 'As TLI.MemberInfo idx = 0 Set tl = CreateObject("TLI.TLIApplication") Set t = tl.TypeLibInfoFromFile(CreateObject("Access.Application").SysCmd(acSysCmdAccessDir) & "msacc9.olb") 'DoCmdはインターフェース(クラスではない) for each eif In t.Interfaces if eif.Name = "DoCmd" then for each em in eif.Members '使用できない隠しコマンド?は省く if em.AttributeMask = 0 then WScript.Echo em.Name end if next exit for end if next Set t = Nothing Set tl = Nothing
Function GetTypeName(TliVarType) Select Case TliVarType Case 8192 : sTemp = "Array" Case 70 : sTemp = "Object" Case 11 : sTemp = "Boolean" Case 8 : sTemp = "String" Case Else GetTypeName="" Exit Function End Select GetTypeName = " As " & sTemp End Function
Set tlb = WScript.CreateObject("TLI.TLIApplication") Set t = tlb.TypeLibInfoFromFile(CreateObject("Access.Application").SysCmd(acSysCmdAccessDir) & "msacc9.olb") on error resume next for each o in t.TypeInfos s = "" for each m in o.Members s = s & m.Name & ";" & o.Name & "." & m.Name & "(" param = "" for each p in m.Parameters Set v = p.VarTypeInfo s = GetTypeName(v.VarType) if param = "" then if p.Optional then param = param & "[" & p.Name & s & "]" else param = param & p.Name & s end if else if p.Optional then param = param & "[, " & p.Name & s & "]" else param = param & ", " & p.Name & s end if end if next s = s & param & ")" & GetTypeName(m.ReturnType) & ";" & m.HelpString & vbCrLf next WScript.Echo s next
kaso
509 :
デフォルトの名無しさん :2009/02/09(月) 16:15:46
chinko
510 :
デフォルトの名無しさん :2009/06/19(金) 23:03:45
ActiveXコントロールからAfxThrowOleDispatchExceptionで、 VB6.0のフォームに例外を通知したとき、 オートメーションエラーのエラーコードとエラーディスクリプションになってしまうのですが、 AfxThrowOleDispatchExceptionのパラメータで設定した エラーコード、エラーの説明は、どのようにしたら参照できるのでしょうか? どなたかご存知の方教えて下さい。
Visual Studio 2008のMFCでダイアログにHTML表示させたいので、 ActiveXのMicrosoft web browser貼り付けて、メンバ変数にして Navigateしました。 ここまではちゃんと表示されてOKです。 次に、ブラウザ上で右クリで出るポップアップを出せないように しようと思って、メンバ変数にしたやつのウインドウプロシージャーを 取り替えて(サブクラス化)WM_RBUTTONUPを捕まえようとしたのですが、 WM_RBUTTONUPが何故か来ません(他のメッセージ(WM_SIZEとか)は来ます) 当然、右クリするとポップが表示されてしまいます。 何かご存知の方いませんか?
なんでもかんでもサブクラス化で解決しようとするな。 IDocHostUIHandler::ShowContextMenuつーのがちゃんと用意されとるわ
513 :
511 :2009/06/23(火) 16:42:03
ナイスなヒントに多謝!
ActiveXコントロールにドラッグ&ドロップして、ドロップされたファイルを処理したいのですが、 htmlに貼り付けてブラウザでそこにドロップすると、ブラウザ側にドロップされちゃうのです。 とりあえず画像ファイルをコントロールに表示する予定なのですが、jpgとかを落とすと、 それがブラウザにドロップした事になって表示されちゃいます。 WM_DROPFILESのハンドラも、DragAcceptFiles()も立てています。 コントロールにドロップされるようにするにはどうすれば良いでしょうか?
HTAにしたら?
ありがとうございます。 HTAにしても同じでした..orz
.RegisterAsDropTarget=False
>>517 ありがとうございます。
調べてみます。
ActiveXでCoCreateInstanceで作成したインスタンスを 使ってWebの画面を画像化しようとしているのですが IEを2つ起動している状態で2個目のIEでCoCreateInstanceをすると なぜか1個目のIEに対してインスタンスを生成している様で 上手くいきませんどなたかこんな現象をご存知の方がいればお教えください。
521 :
デフォルトの名無しさん :2009/07/31(金) 23:49:15
JavaScriptでScripting.FileSystemObjectを生成しようとすると モジュールが見つかりません。 と出るのってどうしたら直るんですか?
モジュールを入れる
523 :
521 :2009/08/02(日) 21:34:53
>>522 その方法が検索してもどうしても見つからないんです・・
c:\windows\system32\scrrun.dll
525 :
521 :2009/08/03(月) 15:12:25
>>524 どうやって入れるのか?と思いましたがとりあえずregsvr32してみました。
そしたらエラー出なくなりました!ありがとうございました
526 :
516 :2009/08/04(火) 17:02:04
>>519 すまんす、レスが遅れて。
まで出来てないです。
RegisterAsDropTarget=False ってのは、IEのコントロールか何かの設定ですか?
今作っているActiveXを、htmlの<object>タグでCLSID指定してやって動かしてます。
それで自作のActiveXにドラッグ&ドロップしたいのですが、ブラウザ側にドロップされちゃいます。
>>526 IDropTargetを実装してRegisterDragDrop()を呼ぶ。
ファイル名が取れればいいだけだからこんな素の方法は嫌だ
ってことかもしれんが、まぁ一方法として。
529 :
デフォルトの名無しさん :2009/08/10(月) 01:26:57
ActiveXって現役の技術なの?古いイメージがあるんだけど、代替技術は存在しない? 今までMS系の技術なんて見向きもしなかったんだけど、 今度、VB6.0で動いていたアプリをIE向けのWebアプリに作り替えることになって、 ActiveXコントロールに替わる技術なんてあるんだっけ?と思って質問してみました。 ちなみに既存のVB6アプリでどんなActiveXコンポーネントを使っているのかはまだ不明。 判明するのは3か月以上先。 そもそもActiveXがよくわかっていなくて、 ActiveXの書籍は古いものばっかりだし、この技術ってレガシーコンポーネントを再利用するとき以外で用途あるの? ローカルリソースを扱うなら必須の技術? まぁ、先手を打って、勉強しておきたいっていうだけ。
まだまだ現役なんじゃない? 代替技術もないんじゃない? 目的達成のための別の技術があるというだけで。
FlashもActiveXコンポーネントだよね?
許されるのは、FlashとAcroabat Readerのみ。 他はウィルス扱いw
>>530 なるほど
結局は、どんな手段で目的を解決するか、ですね。
選択の幅は広い方がいいんで、勉強してみる
Windowsの仕組みを知るいい機会だし
Q. 自動保守#K9K?_D[L とは一体何なのか?
A. 外部サイトへの突撃大好きな真性厨房
韓国突撃でお馴染みの自動保守
最近は自動焼人 ★として2ちゃんねるのボランティアにも精を出す日々
だがそんな彼にも、人間らしい部分はあったのだ…
名言集
『アパッチ砲はワシが作った』
『お前が規制系キャップ取れるか審査してやるよ』
『いつもサボってばかりのキャップがウゼえ』
『俺、100人規模の集団サイバーテロの主犯だったこともあるんだぜ』
『俺の経歴カックイイだろ?』
最近のニュース
8月15日の韓国突撃の際に歴史的大敗を喫する。ラジオでの敗戦宣言のときに声が震えていた
本人は体調不良と言っているが…
----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/ にて自動焼人 ★までご連絡ください
ちょっと質問いいかな? VC++6.0でMFC ActiveX ControlWizardを開くと 最初に、プロジェクトに含まれるコントロールの数を聞かれるよね? ここでコントロール数を2個にして作成するActiveXコントロールと同等のものを .net2005で作成できる? ActiveX今まで殆ど触った事なくて、どんな語から調べていけばいいのかわからない状態なんだ…
OCXをCABファイルからインストールさせているのですが 64bitのIEでは、失敗します。 64bit用のINFファイルの書き方とかあるのでしょうか?
>>537 問題ない。誰も64ビット版IEなんて使っていないから気にするな。
ところで、そのOCXは64ビットで作っている?
OCXは64ビットで作っていません だからダメなんでしょうか? 64ビットで作って試してみます。
540 :
デフォルトの名無しさん :2009/12/02(水) 20:44:11
C#でOfficeオートメーションを使う仕事を割り振られたのですが、 ネットにあまり情報が落ちてないので、どこから勉強していいか解りません。 何か良い書籍があったら教えてください。
オフィスオートメーション 【OA】
オフィスオートメーションとは、コピー機やFAX、コンピュータなどの情報機器を用いて、事務作業を効率化すること。
>>540 残念、微妙にスレ違いのようだ。
>>540-541 OfficeとはMicrosoft Officeのことで、WordとかExcelの操作かもしれないではないか。
もし、そうだったらまずはVisual Studio Tools for Office関係を調べればいいと思う。
Windows2003 Office2003環境です。 ローカルサービスから using Excel = Microsoft.Office.Interop.Excel; Excel.Application app =new Excel.APplucation(); Excel.Workbook wbook; wbook=(Excel.Workbook)(app.Workbooks.Open(filepath,省略,省略…省略)); wbook.PrintOut(省略,省略,省略,省略,PrinterName,省略,省略,省略); をコーディングしていますが、プリンタへのスプールがスプール中で動作が停止してしまいます。 同様のコーディングをWord,PowerPointにて行ってますが、同様です。 Windows2008 64bit版ではメモリの要領不足とエラーが出ます。 動作が正常に行かない理由ってわかりますか?
544 :
デフォルトの名無しさん :2010/02/15(月) 09:03:15
age
CでIEを利用して作っているウェブブラウザで ブラウザのダブルクリック時の挙動を変えたいんですが IHTMLDocument2のポインタを取得して put_ondblclickで自前の関数を登録しようとして ここで渡す自前の関数はどう宣言して渡せばいいんでしょうか?
>>537-539 だいぶ前の話で恐縮ですが
64bitのOCXを作れば、64bit版IEでも動作しました。
ありがとうございます。
C++で ActiveXコントロールを作成しています。 また、この ActiveX内から DLL(VB.NET)の関数を呼んだりしています。 ここで質問なのですが VB で RaiseEventしたイベントを、 C++の方で捕まえる方法はありますか?
MFCでActiveXコントロールを作って、 ウィザードでプロパティを追加して、 PX_Hogeを追加して、 IEから<OBJECT><PARAM 〜></object>で読み込ませると・・・ PX_Hogeで指定した変数には値が設定されるんだが、 ウィザードで生成された関数は呼び出されない。 これってこういうもの? ちなみにMSVC2005。
549 :
548 :2010/07/12(月) 11:31:04
とりあえず解決した。 IPersistPropertyBag経由ではDoPropExchangeしか呼ばれない、 メソッド経由で呼ばれたときはウィザードが生成した関数しか呼ばれない、 でいいのかな。 仕方ないんで、DoPropExchangeの中で、pPX->IsLoding()だったら、 ウィザードが生成したOn〜Changedをごにょごにょと呼ぶことにした。 これが普通なのかしらん?
ふぅ