【OLE】オートメーション総合スレ【ActiveX】

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
オートメーションって情報少ないからみんなで情報交換しよ><
2デフォルトの名無しさん:2006/01/21(土) 01:34:50
腹減った
3デフォルトの名無しさん:2006/01/21(土) 10:38:45
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
懐かしいな…
7デフォルトの名無しさん:2006/01/22(日) 14:53:27
何に使ったらいいんだ
8デフォルトの名無しさん:2006/01/22(日) 17:16:11
誘導されたので・・・
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もここでいいんかな?
10デフォルトの名無しさん:2006/01/22(日) 20:38:25
>>8
ActiveXのコントロール数とコントロールの種類は正しく設定した?
11デフォルトの名無しさん:2006/01/22(日) 20:49:45
>>9いいんじゃない?
129:2006/01/22(日) 21:23:24
OLEドラッグアンドドロップに付いての質問です。

特定のファイルタイプのみを受け付けたい場合はどのように実装するんでしょう?
DragEnterの中で何かすれば良いと思うのですがイマイチ分からず。
13デフォルトの名無しさん:2006/01/23(月) 01:00:25
教えてください
C++BuilderでActieFormを作りました
しかし、10月25日のウィンドウアップデート移行
動作しなくなりました。
もちろんベリサイン認証は取ってあります
同じ経験した方いませんか?
14デフォルトの名無しさん:2006/01/23(月) 01:12:53
>>8
InitCommonControls は?
15デフォルトの名無しさん:2006/01/23(月) 01:15:48
>>10
コントロール数: 1
ランタイムライセンス: なし
ヘルプファイル: なし
可視状態のときにアクティブにする(default)
バージョン情報ボックスあり
コントロールをどのウィンドウのサブクラスに→(none)

基本デフォルトの状態そのままで作ってます。
なんか勘違いしてますか?
16デフォルトの名無しさん:2006/01/23(月) 09:16:30
>>14
ありがとうございます。
InitCommonControls, InitCommonControlsExともに使ってみましたが、効果ありませんでした。
ListViewのみをフォームに入れた状態で InitCommonControlsEx で ICC_LISTVIEW_CLASSES を指定し、TRUEが変えるのも確認しましたが・・・
178:2006/01/24(火) 13:30:37
VC6のリソースエディタでフォームビュー作ってコンポーネントの追加からListView貼り付けでやってましたが、
リソースファイル使わずにフォームのOnCreateでCListViewを作るようにしたら成功しました。
ので、リソースエディタを使ったListView/TreeViewの作成はしないほうがいいということ・・・?
とりあえず暫くはリソースエディタを使わない方法でやってみます。
18デフォルトの名無しさん:2006/01/25(水) 00:11:31
>>17
報告乙。
19デフォルトの名無しさん:2006/01/29(日) 22:15:19
ActiveXでさ、ポップアップブロックとかもできるぐらいだから
簡単なタブブラウザみたいなのもできないかなと思うのだけど?
20デフォルトの名無しさん:2006/01/29(日) 23:50:24
いくらでもあるし、それらはIEコンポーネント使ってるよ
21デフォルトの名無しさん:2006/02/02(木) 00:23:11
ブラウザの中でタブコントロールを作成してさらにブラウザコンポーネント配置か。。。
なんか意味あるのか意味ないのかわからんな。
22デフォルトの名無しさん:2006/02/02(木) 20:28:52
8です。
今さらなんですが、 COleControl のサブクラスの OnCreate でフォームビューを作成する事が既にActiveXコントロールの考えから外れてるんでしょうか?
実行すると必ず Warning: Creating a pane with no CDocument. が出てくるので・・・
OnInitialUpdateやそれに代わるものが見当たらないんで、このまま警告無視していくか、フォームでなくウィンドウにすべきか迷ってます。
23デフォルトの名無しさん:2006/02/03(金) 00:09:03
>>22
多分間違ってる。
コントロールを1つ1つ定義していくのが正しい(?)やり方なんじゃないかと思う。
24デフォルトの名無しさん:2006/02/05(日) 03:17:10
今 ActiveX SDK付いてる本ご存知ないですか?
サイトからは手に入らないです
25デフォルトの名無しさん:2006/02/05(日) 07:42:31
>>24
今はとりあえずPratformSDKを試してみたら?
26デフォルトの名無しさん:2006/02/07(火) 23:56:51
>>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デフォルトの名無しさん:2006/02/17(金) 00:27:35
>>28
とりあえずVARIANTにしておけば?
30デフォルトの名無しさん:2006/02/17(金) 00:45:58
>>29
VARIANTで受け取りSafeArrayで取り出そうとしましたがjavascriptエラーになりました。。
(メソッドのパラメータがおかしいとか何とか)
31デフォルトの名無しさん:2006/02/17(金) 22:54:12
VCで作ったActivexのDLLをWebで配布出来るように.NET Frameworkの
ツールを使ってcabファイルにしました。デジタル証明書もテスト用
の物を使って作成しました。が、実際にサーバーに置いてみてインストールを
しようとしても×マークが表示されてしまいます。マシンの中を検索
したらdllが見つからず、インストールすらされていません。
この場合どの段階でミスがあるのでしょうか。
インストールに失敗する条件等ご存知の方いましたら教えて頂けないでしょうか。
32デフォルトの名無しさん:2006/02/18(土) 10:59:05
>>31
そりゃインストーラ作成に失敗してるんじゃないの?
33デフォルトの名無しさん:2006/02/20(月) 10:33:51
だれか32bitとx64のocxをcabにまとめて、x64のIEでも
問題ないようにした人いる?
3431:2006/02/20(月) 12:14:59
>>32
ありがとうございます。infファイルの記述がおかしいのかなと思い、
infファイルを右クリック、インストールをすると目的のディレクトリに
ファイルがコピーされました。という事はhtmlだと思い、CLASSID等を
見直し、再作成を行いましたが、やはり問題解決には至りませんでした。
そして上記方法で分かった事が一つあります。infファイルから直接
インストールした後では、cabからのインストールは必要が無いので
codebaseを除いたhtmlでも実行できるはずだと思い、htmlを開いてみると
インストールしたファイルが消えてしまうのです。
開発したマシンではそのような動作はせず、他のマシンで行った時のみ
発生しました。この症状から何か原因わかりますでしょうか。
35デフォルトの名無しさん:2006/02/21(火) 01:22:50
inf晒しきぼん
3631:2006/02/22(水) 17:17:54
レスが遅れてしまってすいません。
今はとにかくatlをブラウザ上で実行させる事を第一としていまして
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/_atl_ATL_Tutorial.asp
ここのチュートリアルの手順2で作成されるDLLを設置しようとしています。
infの中身は以下の通りです。

[version]
signature="$CHICAGO$"
AdvancedINF=2.0

[Add.Code]
Polygon.dll=Polygon.dll

[Polygon.dll]
file-win32-x86=thiscab
clsid={968FA345-7B5F-4F45-9FDF-62953E203C48}
RegisterServer=yes
FileVersion=1,0,0,1
DestDir=11

情報が少なくて申し訳ないのですが、何か分かる事があれば教えて下さい。
3731:2006/02/24(金) 18:23:17
自己解決(?)しました。
infファイルは間違えていませんでしたが、プログラムでもレジストリに
登録するようにしないといけないのですね・・MSDNのサンプル見て分かりました。
配布関係の資料探してもVBのものばかりでなかなかVCのサイトって無いものですね。

また質問の繰り返しで申し訳ないのですが、実行させるHTMLの中にPARAMを使って
引数みたいな物を渡せますよね。そのPARAMで設定した
<PARAM NAME="foo" value="bar">のような値をプログラム中で取得するには
どうすればよいのでしょうか。プロパティというそれっぽいものがありますが
いまいち理解が出来ず苦戦しています。苦戦ばっかりしてますが、どなたか
ご教授頂けないでしょうか。
38デフォルトの名無しさん:2006/02/25(土) 00:49:49
void CXxxCtrl::DoPropExchange(CPropExchange* pPX) {
  ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
  COleControl::DoPropExchange(pPX);
  PX_String( pPX, _T( "foo" ), bar );
}

IObjectSafetyについては自分でね
39デフォルトの名無しさん:2006/02/25(土) 03:17:28
>>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 は存在しません。」
とメッセージが表示されてしまいます。

フラッシュを再インストールしてみましたが状況は変わりませんでした。
解決方法がわかる方いらっしゃいましたら教えてください。
よろしくお願いします。
41デフォルトの名無しさん:2006/03/02(木) 23:34:48
>>40
Shockwave flashオブジェクトを使う。
42デフォルトの名無しさん:2006/03/04(土) 02:08:21
>>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)

となっています。
43デフォルトの名無しさん:2006/03/04(土) 03:21:16
HTMLでローカルディレクトリ指定してるとか
44デフォルトの名無しさん:2006/03/04(土) 04:21:02
さすがにそれはなかったですが
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上でのイベントに追随する事はできているのですが、
本当のイベントをフックすることができないのです。
47http://www.vector.co.jp/soft/win95/util/se072729.html:2006/03/18(土) 21:47:22
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?

そういや64bitにネイティブ対応している2chブラウザてありましたっけ?



48デフォルトの名無しさん:2006/03/19(日) 00:11:49
なんの誤爆だよ。
49デフォルトの名無しさん:2006/03/26(日) 09:24:19
ActiveXコントロールを1から作成したいのですが、
全然資料がありません。

有用な資料(URL),書籍があったら是非教えてください
よろしくおねがいします
50デフォルトの名無しさん:2006/03/26(日) 12:26:24
>>49
言語とか処理系とか書かないとわからん。
そこらへんから選択中なのか?
51デフォルトの名無しさん:2006/03/26(日) 23:14:22
>>49
VC++使ってるならとりあえずウィザードで雛形作ってみて動作を確認しながら
ってのが理解の近道なのかもしれん。
ほかの処理系は知らん。
52デフォルトの名無しさん:2006/04/09(日) 22:39:36
はじめまして。ぽこぶびと申します。
現在、VisualStudio2003のC++を使って
COM、ActiveXコンポーネントを開発しておりますが
いくつか疑問があるので質問させてください。

C++での開発はぜんぜん問題ないのですが、
VisualStudio2003でVB、C#でも
C++のようにActiveX、COMコンポーネントの開発は
可能なのでしょうか?

もし、可能なのでしたら、新規プロジェクトを作成するときに
どのような手順で選択していったらスケルトンコードが作成されるので
しょうか?

どうかよろしくお願いいたします。
53デフォルトの名無しさん:2006/04/09(日) 22:55:50
なぜ時代に逆行する
54デフォルトの名無しさん:2006/04/10(月) 15:38:20
>>52
純粋なCOMコンポーネントは作れないが、.NETのクラスをCOMに公開することはできる。
regasm.exe というのを調べてみるといい。
55デフォルトの名無しさん:2006/04/13(木) 00:11:40
>>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 がそれに相当するのでしょうか?
57デフォルトの名無しさん:2006/04/15(土) 18:29:51
>>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上で動くアプリケーション)でも
実現することが出来るんでしょうか?
59マイク ◆yrBrqfF1Ew :2006/04/15(土) 19:08:13
>>46
BeforeSaveがイベントなら普通に捕まえればいいだけじゃないのか
60デフォルトの名無しさん:2006/04/15(土) 19:50:03
>>58
それなら>>54で出来る。多少制限はあるけどオートメーションレベルのことならほぼ問題なく動く。
61デフォルトの名無しさん:2006/04/15(土) 20:16:03
>>60 ありがとうございます。
果敢に情報収集しつつ精進します。

これができないと、たとえば Office が .NET Framework
ベースに移行したとき、外からオートメーションで
いじれないなんてことになるよなぁ、さすがにそんな
馬鹿な仕組みにはなっているまい、とおもってたんですが、
自分で試すにしても何から手を付けていいものか途方に
くれてました(で、結局ネイティブで作り続ける日々)。
62デフォルトの名無しさん:2006/04/16(日) 14:12:09
[VBAからC#作成のDLLを呼び出したい]
http://vsug.jp/tabid/63/forumid/53/postid/2604/view/topic/Default.aspx

.NETの行く末は大丈夫なんだろうか?
63デフォルトの名無しさん:2006/04/16(日) 15:04:30
COMはもうレガシーだからVistaや.NETなOfficeでは不要だろ
64デフォルトの名無しさん:2006/04/16(日) 15:06:20
>>63 だからこそ COM で出来ていたことが
出来ないってのはこまるなぁ、って思う。
65デフォルトの名無しさん:2006/04/16(日) 18:23:45
レガシーってことはそれよりも優れた方法があるってことでは
66デフォルトの名無しさん:2006/04/16(日) 18:36:48
>>65 まぁ理想的にはそうなのかもしれん。
すべてのアプリケーションが CLR で動くなら。
ただ、そうじゃないアプリを切り捨てるのはたぶん無理そう。
なので多少のオーバーヘッドの増加には目をつぶるから
互換性確保してくれればな、って思う。
67デフォルトの名無しさん:2006/04/17(月) 13:44:34
>たとえば Office が .NET Framework ベースに移行したとき、

こうならないとアナウンスされてまつ。
M$は優れたドトネトを使わないから大丈夫。

6862: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
VBプログラマ Cプログラマのお仕事
http://www.vb-c.net/
71デフォルトの名無しさん:2006/04/27(木) 18:13:47
良く分からん…。Office2007は.NET Frameworkベースなのか?
http://www.exconn.net/Blogs/team03/archive/2006/04.aspx
72デフォルトの名無しさん:2006/04/28(金) 09:48:55
>>71
単にC#でCOMコンポーネントを作ってるだけにも見えるし、
SQLServer2005のようにCLRのホスティングをしてるようにも見える。
さすがに全部.NETベースというのはありえないように思うが。
73デフォルトの名無しさん:2006/04/28(金) 11:53:26
さすがエバンゲリオン役立たず
7471:2006/05/01(月) 18:32:36
一応、OLEオートメーションはサポートされるようでつ…。
http://www.itmedia.co.jp/enterprise/articles/0605/01/news010.html
75デフォルトの名無しさん:2006/05/09(火) 22:36:49
C++で、ActiveXプログラミングを基礎から勉強するのに最適な本ってある?
76デフォルトの名無しさん:2006/05/09(火) 23:37:14
今はDDEの時代だ
77デフォルトの名無しさん:2006/05/13(土) 06:41:34
VBScriptのGetObject()で.htmファイルを指定すると、HTMLDocumentオブジェクトが取得できます。
.xlsファイルを指定すると、Workbookオブジェクトが取得できます。

ここでレジストリをいじって関連付けを破壊すると、.htmファイルはオブジェクトが取得できなくなるのですが、.xlsファイルは取得できます。

これは.xlsファイルがOLE対応の特定のフォーマットを備えていて、中にCLSIDとかが書いてあるせいだと思うのですが、このようなファイルは何と言うのでしょうか?

そしてそのフォーマット、あるいはファイルの作成法はMSDNライブラリのどこに書いてあるのでしょうか?
78デフォルトの名無しさん:2006/05/13(土) 10:02:59
>>77
エクセルのファイルは「構造化ストレージ」になっている。
79デフォルトの名無しさん:2006/05/13(土) 13:31:16
>75
DonBoxの"Essential COM"が一番良いと思います。
COM技術のイロハのイが学べます。

問題は、見た目の厚さに対して高い事。
まぁ、通読した後、高価の意味も理解できるけど。
80デフォルトの名無しさん:2006/05/14(日) 00:20:03
>>79
75じゃないがさんくす。
81デフォルトの名無しさん:2006/05/14(日) 00:42:38
そろそろ寝るか。。。
82デフォルトの名無しさん:2006/05/14(日) 05:01:35
このスレが気になって全然寝られなかった。。。
83デフォルトの名無しさん:2006/05/14(日) 06:59:29
VBAのコントロールにFlexGridが使えるようになってるんですが、
ADOでデータを取り込めますか?
8475:2006/05/14(日) 08:20:38
>>79
あれから調べて「ATL COMプログラミング」という本を買いました。
これもなかなか良いです。
Essential COMとどっちを買うか迷ったんですが、
ATL COMプログラミングの方にはIE拡張の話が載っていたので。
Essential COMにもあったかもしれませんが。
85デフォルトの名無しさん:2006/05/14(日) 12:09:25
Essential COMは良書だけど、図版とかが少なくてどちらかというと
玄人向けだから良いんじゃないすかね。

てか、COMでフリースレッド何たらとか使ってる人ってどれくらいいるんだろ?
8683: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ブロック変数が設定されていません。
とでます。どうすればエラーを取り除くことができますか?
8786:2006/05/14(日) 21:11:29
書き忘れたのですが、Test.csvはこのExcelブックと同じディレクトリにあります。
88すみません86です:2006/05/14(日) 21:14:08
>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だったら簡単にできるでしょうか?
90デフォルトの名無しさん:2006/05/20(土) 07:28:17
C++のstd::getline使ったらだめか?
91デフォルトの名無しさん:2006/05/20(土) 16:00:21
市販のActiveX(OCX)をインポートして
VC6でラップして市販のOCXと同じAPIを作ろうと思うけど、
(ようはラッパってやつですが。)

そうすると、インスタンス作成時、
CoCreateInstanceでIIDとCLSIDがわからない。

MFC ACtiveXプロジェクトで作ってるのがわるいんだろうか?
アト、ラッパでのActiveXイベントの伝達の仕方もわからん。。。

なんか、いい方法はありませんか?
92デフォルトの名無しさん:2006/05/20(土) 16:42:04
市販のActiveX(OCX)をそのまま使う
93デフォルトの名無しさん:2006/05/21(日) 00:03:29
>>89
1バイトずつ判断する。
読み込み自体は1バイトずつである必要はないけど。

>>91
レジストリエディタを検索すればCLSIDはわかるよ。
ActiveXイベントのラッピングは無理だと思うな
94デフォルトの名無しさん:2006/05/21(日) 01:05:16
シンクしてファイアー!とかは?
ATLの場合の話だけど。
95デフォルトの名無しさん:2006/05/21(日) 01:21:33
あぁ、シンク忘れてた。
それならできるね。
9691:2006/05/21(日) 09:51:22
シンクしてファイアーはできた。
#import ディレクティブ使って直接OCX指定したけど、
やっぱりIIDがわからない。CLSIDは取得できたよ。
97デフォルトの名無しさん:2006/05/21(日) 13:23:57
>>96
__uuidof (IHoge)で得られない?
98デフォルトの名無しさん:2006/05/22(月) 01:07:28
FirefoxのMacromedia Flashって、ActiveXではないのかな?
機能拡張じゃなく、ああいうプラグイン?を作るのってどうするんだろう。
スレ違いかもしれんが。
99デフォルトの名無しさん:2006/05/22(月) 01:59:24
XPCOMだっけ?
100デフォルトの名無しさん:2006/05/27(土) 07:06:38
あるスレッドAでCoCreateInstance()等でインターフェースポインタを得たとします。これを別のスレッドBでそのまま使える保証はあるのでしょうか? 特にAが終了してしまった後など・・・
保証が無いならば、使えるかどうか確認する方法、及び使えるようにする手続きはあるのでしょうか?
101デフォルトの名無しさん:2006/05/27(土) 07:08:21
>>96
#importできるならタイプライブラリにIIDも書いてあるんじゃないの? OLEVIEWは?
102デフォルトの名無しさん:2006/05/27(土) 11:15:48
>>100
インターフェイスへのポインタはアパートメント単位だから、別アパートメントへは持っていってはいけない。
http://msdn.microsoft.com/library/ja/jpdnmts/htm/ComPrim.asp
http://support.microsoft.com/?scid=kb%3Bja%3B172314

CoInitialize/OleInitializeを使っているのなら、1スレッドが1アパートメントになっている。
OleInitialize(COINIT_MULTITHREADED);でMTAにすれば、
MTAのスレッド同士は同じアパートメントになる。
103デフォルトの名無しさん:2006/05/27(土) 14:36:39
OleInitialize(0);
104デフォルトの名無しさん:2006/06/03(土) 06:53:11
>>90
getlineできました! どうもありがとうございます。C++標準ライブラリがわかってなかった・・・
でもこれってどうやってメモリ確保してるんだろ?

>>93
>読み込み自体は1バイトずつである必要はない
ですね・・・でもバッファをリンクドリストにしてみたら、何かえらくややこしくなってしまった。realloc()だとコピー起きるっぽいし・・・
struct _BUFITEM{
  BUFITEM *next;
  char buf[0x200];
} BUFITEM;

ReadAllはgetlineで終端子を'\0'に設定したらできました。

今悩んでいるのが、LineとColumnプロパティ・・・
これもC++標準ライブラリにありますか? C++のヘッダって何が何だかさっぱりわからない・・・ MSDNライブラリも何か標準ライブラリ関係はおざなりだし・・・
結局1文字ずつチェックしないといけないのだろうか・・・?
105デフォルトの名無しさん:2006/06/03(土) 08:31:31
>>104
LineとColumnは流石にC++に相当するものは無いから、
何回改行文字が読まれたか、その後何文字読み込まれたかを自分で記録するしかないと思う。

ちなみにリンクリストはC++にstd::listがある。
106ひみつの検疫さん:2024/07/06(土) 22:45:10 ID:MarkedRes
汚染を除去しました。
107デフォルトの名無しさん:2006/06/04(日) 12:34:26
どうやら<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からそのようなオブジェクトを提供してもらわなければならないわけだが、そういうものは見当たらないように思う。
108デフォルトの名無しさん:2006/06/04(日) 12:35:40
>>94 >>95 >>96
「シンクしてファイアー」って何? ATLよく知らないんだけど・・・
多分、イベントを代理で受け取って、同じ名前のイベントを発行する、って意味だと思うんだけど、合言葉っぽくなってるのはなぜ?
有名なセリフなの?
10994:2006/06/04(日) 19:37:30
>>108
ごめん、前の会社の上司がふざけてよく「ファイアー!」って言ってたんで、
オイラもちょっと使ってみたくなって…。
ATLのイベント取得マクロがXXX_SINK_MAP、イベント発行(生成コード)関数が
Fire_XXXとなるので、シンクしてファイアーでも何となく通じるのかも…。
110デフォルトの名無しさん:2006/06/04(日) 19:57:53
You’re fired って言われたんだろ
111109:2006/06/05(月) 21:47:39
>>110
"君は首だ!"なんて言われてないっすよ。
なんか、ATL好きの人だった…。質問する度に
ATLのすばらしさを説かれてた…。
最近、.NETやらVistaやらで、COM作ってたベンダーって
どうなってくんだろう?
112デフォルトの名無しさん:2006/06/05(月) 23:47:22
.netとかが主流になっていくだけで、COM事態は消えないでしょ。
いまだに16bitAPI残してるMicrosoftがそう簡単にCOM捨てるわけないよ。
113111:2006/06/06(火) 23:19:36
>>112
でも、Vistaに味をしめて、MSが強硬路線取ったりしたらちょっと怖い。
いっそVistaが不発に終わってくれればと思ったりも…。
114デフォルトの名無しさん:2006/06/08(木) 00:56:54
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なのかよく解りません・・・
115デフォルトの名無しさん:2006/06/08(木) 09:50:14
正常動作するほうを信じる
116デフォルトの名無しさん:2006/06/08(木) 23:32:46
>>114
普通にワークシートを作成するだけなら引数指定なしでいいと思う。
117114:2006/06/09(金) 19:57:52
>>115
なぜ1になるのかはよく解りませんがエラーが発生する理由はわかりました
想定外のワークシートが生成されたため、受信できないメッセージの受信に対し
例外が発生していました。値をいろいろ変更してみるといろいろな種類の
ワークシートを作ることが出来ました。

とりあえず
>正常動作するほうを信じる
でいこうと思います

>>116
>普通にワークシートを作成するだけなら引数指定なしでいいと思う。
VBAでは引数指定なしでも良いですが、MFC(C++)で呼ぶ場合、引数は要るのではないでしょうか
ウイザードが吐いたコードには引数指定がありますし、そのウイザードのコードを変更して
引数無しverを作って試した場合、ワークブックが作成されませんでした


どうもありがとうございました
118デフォルトの名無しさん:2006/06/09(金) 21:24:24
>>117
引数無しにしたいときは、
COleVariant vNull; vNull.vt = VT_EMPTY; なんてのを
作って渡しておけば良いよ。
119デフォルトの名無しさん:2006/06/10(土) 20:19:21
>>102
どうもありがとうございます!

やっぱりアパートメントどうのか・・・

以前「Platform SDK: COM」文書でアパートメントの所を読んだのだけれど英文の事もあって何がなんだかサッパリわからなかった・・・

以下の文書には気づいてなかった・・・

ttp://msdn.microsoft.com/library/ja/jpdnmts/htm/ComPrim.asp
ttp://support.microsoft.com/?scid=kb%3Bja%3B172314

で結局この文書でも、まだよくわからない・・・OrZ 一応まだ読んでいる途中ですが・・・

で、KB172314の下の方を見たらリンクがあって、探してみたら多少わかりやすい感じがしないでもないものが。

ttp://support.microsoft.com/default.aspx?scid=%2Fisapi%2Fgomscom%2Easp%3Ftarget%3D%2Fjapan%2Fsupport%2Fkb%2Farticles%2Fjp150%2F7%2F77%2Easp&LN=JA

しかしこの一番分かりやすいと思われる文書だけがMSDNライブラリCD版からは抜け落ちているのだった・・・OrZ

上のKB172314と同じものはあるから、そこからリンクされているのにリンク先の文書が無い。何の嫌がらせなのか・・・

MTS文書にはまだ続きがあるみたいですね・・・でも上の文書からは直接リンクされていないのであった・・・

勉強してみます・・・

CoInitializeEx(NULL, COINIT_MULTITHREADED)を使ってみましたが、まず、失敗するケースを作り出せないので、効果のほどがわかりません。試した範囲では別スレッドでもポインタが使えてしまっています。
CoInitialize(NULL)だと確実に失敗する状況ってどういうのですかね・・・?
120デフォルトの名無しさん:2006/06/10(土) 22:25:24
>>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はその後に何か来る場合だけだし・・・
121デフォルトの名無しさん:2006/06/11(日) 12:24:42
IEの上でxls,pdfを開くとExcelやAdobeReaderがActiveXコントロールとして開きますよね。
あんな風に独自のActiveXをIE上で開きたいんですが実現方法がわかりません。
ActiveXコントロールはHTMLにobjectタグを使って貼り付けられますが、
ExcelやAdobeReaderはそうやって実現しているようじゃなさそうです。
IWebBrowser.Documentで、IHTMLDocumentではなく、ExcelやAdobeReaderのインタフェースが返ってくるようなので。
Documentプロパティの中の人を自分の作ったインタフェースに置き換えるのはどうやるんでしょう?
122デフォルトの名無しさん:2006/06/11(日) 16:09:31
>>121
そういうのはインプレースアクティベーションと言うらしいから、
それでググってみたらどう?
123デフォルトの名無しさん:2006/06/12(月) 12:45:05
>>120
>IDispatch::Invokeの仕様からすると、VT_EMPTYとdispparams.cArgs = 0とは違うように思うんだけど?

パラメータがどう省略可能なのかは先方の実装次第なのは確かなのだけれども、
伝統的な VB のような、パラメータの途中のいくつかを省略可能な言語での
利用を考慮したオブジェクトなら VT_EMPTY で当該パラメータなしとなりますよ。
124デフォルトの名無しさん:2006/06/12(月) 22:47:13
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)でやってます

で、この書き込みを見るとうっすら同じような誤解を感じるのだが・・・気のせいか?
125デフォルトの名無しさん:2006/06/12(月) 23:52:55
>>124
kwsk
126114:2006/06/13(火) 00:51:02
114です
>>ExcelのオートメーションをMFC(VC6)でやってます
>で、この書き込みを見るとうっすら同じような誤解を感じるのだが・・・気のせいか?

実はまだよく解ってないんですよ
WSHも名前だけは聞いたことあるけど使ったことないし
この前MFCの勉強を始めたところだし・・・
ちょうど読んでる本のオートメーションの章を読んでる所だったので
「ExcelのオートメーションをMFC(VC6)でやってます」
って書き方になりました

でも頭の中のイメージでは
「アプリの手動操作の代わりもできるオブジェクト(インターフェース?)」
ですね。確かに
127121:2006/06/15(木) 22:38:00
>>122
あれからいろいろ調べてAcitve Documentのサンプルも試してみた。
htmlの中にembededされたActiveDocumentを開くのではなく、
Active DocumentをBHOからプログラムで開きたいのだが、
どうすれば良いのかわからない・・・
128デフォルトの名無しさん:2006/06/17(土) 19:52:44
>>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 を先に見てくれるとか、そういうなにか
(もっと穴のない手段があればそれで)ないのかね。
マジでインストールしたくない。ほんとなんとかならんのかな。
だいたいインターフェース不変で実装のバージョンの変更を
安全に行うみたいなの(意味をくみとっておくれ)って
上手く機能してるのかな。
個人的にかもしんないけど、スクリプトとかからオブジェクトとして
簡単に使用できるインストール不要の動的ライブラリがほしい。
どうなのそういうの
130デフォルトの名無しさん:2006/06/18(日) 15:41:20
>>129
M$もXPでSxS(サイドバイサイド)を持ち出してきたところまでは
よかったと思うんだけど、.NETへの方向転換で、COMをレジストリなしに
使う技術に関してはおざなりになってるような…。
SleipnirプラグインやWindowsゲームプログラミング本では、COMライクな
バイナリ実装を行っているようですな。
131デフォルトの名無しさん:2006/06/18(日) 17:21:46
>>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がやったように引き数なしでコールするのが正しいんじゃないか、と思うんだが。
132デフォルトの名無しさん:2006/06/18(日) 18:59:19
おまいら長文すぎ
133デフォルトの名無しさん:2006/06/19(月) 19:32:20
>>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が書いてあるのかも。
134デフォルトの名無しさん:2006/06/19(月) 20:14:17
>MFCのディスパッチマッパーは省略の場合途中でなくてもVT_ERRORを入れる、ということか。

あっ。これってExcelがMFCで作られた、と仮定しての事ね。ATLなのかも。
135デフォルトの名無しさん:2006/06/20(火) 22:08:54
136デフォルトの名無しさん:2006/06/22(木) 01:15:13
>>130さん
どうもです。知りませんでした。無知。
>>135さん
もしかしてアップローダーのサイトの方ですか?
そうだとしたらあのサイトにはたびたびお世話になってます。
No_0012.lzh ありがたく頂きます。
ただ、他人に配布するスクリプトとバイナリの組だと、やっぱりインストールが…。
しかし、あんなこともできるんですね。
ありがとうございました。
137デフォルトの名無しさん:2006/06/22(木) 19:23:26
質問です。
Excel2000をVC++6のMFCからオートメーションで操作しているのですが、
フォントの設定が上手くいきません。
書き込む文字列は、英数字と中国語の混合で、フォントはSimSunに
変更しようとしています。

_tSetlocale()でロケールを変更した後、マルチバイトの中国語データを読み込み
ワイド文字に変換します。(mbcstowcs)
Rangeオブジェクトを取得し、SetValueで値を書き込み、
Rangeオブジェクトを取得しなおし、GetFontでFontオブジェクトを取得し、
SetNameでフォント名を代入したんですが、アルファベットのみフォントが
変更され、その後に続く漢字文字列はどうも上手くできていないようです。

エクセルを立ち上げてみてみると、
一部文字化けしています。(「・」になって表示されてます)

セルをダブルクリックするとエクセルがフォントを自動で変更するみたいで、
英数字はSimSunで、その後の漢字はMSPゴシックや、ArialUnicodeMSなどに
変更されます。その際に文字化けは直るので、
データはUnicodeで壊れずに書き込めています。

右クリック、書式の設定からフォントを変更すると、
漢字もきちっとSimSunに変更されるのですが、
オートメーションからはどうやればいいのでしょうか?
138デフォルトの名無しさん:2006/06/23(金) 20:41:32
>>137
自己レス。結局解らなかったので、標準フォント(StandardFont)を
変更することで対応しました。
139デフォルトの名無しさん:2006/06/24(土) 12:37:34
Internet Explorerで表示しているページを
印刷するには、どのオブジェクトのどのメソッドを使えば良いか教えてください。

perlからWin32::OLEを使ってコントロールしていますが、
$IE->{Document}->PrintPreview();
$IE->{Application}->PrintOut();
等やっても上手く動きませんでした
140デフォルトの名無しさん:2006/06/24(土) 15:52:48
>>28
もうわかったろうけど一応。
ここで指定しなければならないのはSAFEARRAY型じゃなくて、IDispatch *型、すなわちオブジェクト。
JScriptに配列は無い。Arrayオブジェクトは配列ではなく、あくまでオブジェクト。

>>132
ゴメン。技術話なんで正確に書こうと思うと長くなっちゃうんだよね・・・
141デフォルトの名無しさん:2006/06/24(土) 18:11:43
>>136
他人にソフトを配布したいんならEXEを作ればいい。スクリプトではまともなソフトは作れっこない。

スクリプトでなきゃいけない、という理由がよくわからないのだが・・・
VB.NETとかで作ればいいのではないだろうか。

#実は登録の全くいらない方法もある事はある。

>>139
うーむ。PerlスレとかWSHスレで聞くべきと思われ。
でもスクリプト野郎って人間がオカシイのが多いからオレは聞くの嫌なんだが(^^;)
で、印刷はExceWBでできるらしい。
142デフォルトの名無しさん:2006/06/24(土) 22:04:03
>>141

ExecWB()ですね。試してみます、ありがとうございます。

Excelオブジェクトなど具体的なオブジェクトの使い方は
どの言語からOLEサーバ?を使うかということには依存しないと思います。

スクリプト(インタープリタ系)の言語だろうが、C#だろうがJavaだろうが。

このスレのコミュニケーション上の理由で、表記方法を定める必要があるなら、
C#やVBあたりに決めても良いと思います。

143デフォルトの名無しさん:2006/06/25(日) 23:19:37
>>141EXEを作ればいい
たしかにそうかもしれないです。
でも、一通りの機能をDLLに作っておいて配布し、
スクリプトでそれを不特定多数が利用するということも
できるんじゃないでしょうか。
例えば軽いノリの3Dゲームまがいの何かをつくりたい時、
3Dの初期化・表示・当たり判定・その他なんかをdllに
しておければなあ、とか考えたんです…。
あとは自作ツールのスクリプト作成にWSHを利用するとか。
けっこう同じようなこと考えてる人は多いかと思ってたんですが、
そうでもないのかな?
思いつきなので、ダメなこといってるかもしれないですが…。
144デフォルトの名無しさん:2006/06/27(火) 23:41:07
>>143
ああ、ゴメンなさい。
そこまでの話とは思わなかった。
EXEだと、インストール不要なものはコマンドラインツールとか単純な使用に特化したものが多いんで、そういう話かと思った・・・

というか、そういうの作って公開して下さい。欲しいので。お願いします。
145デフォルトの名無しさん:2006/06/27(火) 23:43:40
>>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に値が入ってくるかと思いきや、
メソッドそのものが呼び出されてない・・・。

どっかわかりやすい解説サイトないものか(´Д`;)
148デフォルトの名無しさん:2006/07/01(土) 20:32:05
これスクリプトからExcelに接続するためのコンポね。以前に言ったから。
http://winscript.s41.xrea.com/upload/source/No_0013.lzh
149デフォルトの名無しさん:2006/07/01(土) 22:33:22
解決した。ホントさくんす。
PX_String書いてなかったわ。。。
150デフォルトの名無しさん:2006/07/01(土) 22:51:11
>>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何とかをサポートする必要があるのかも。
151デフォルトの名無しさん:2006/07/02(日) 00:00:37
バロス
152デフォルトの名無しさん:2006/07/02(日) 18:45:19
何か無知な事書いてしまったけど、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がサポートされなくなる。
これはインプレースアクティベートされていない事が原因ではないかと思うけどはっきりとはわからない。オブジェクト生成の方法が違うからかも。

後はもうオブジェクトをラップして調べるしかないと思うけど、サポートされているインターフェースが多いので大変だな・・・

というか何か急に梅酒飲みたくなった・・・
153デフォルトの名無しさん:2006/07/04(火) 16:32:51
プロパティは IPersistPropertyBag 経由で設定されます。
ATL なら PX_hogehoge で簡単に実装できる。
154デフォルトの名無しさん:2006/07/04(火) 22:33:53
VS2005でクラス→ATLコントロールでウィザードからコード作成。
メッセージマップにOnCreateを追加したけど、
なぜかOnCreateが呼ばれない・・・
OnSetFocusは呼ばれるんですが。
心当たりある人いますか?
155154:2006/07/04(火) 23:41:51
自己レス。コンストラクタで
m_bWindowOnly = TRUE;
とすれば呼ばれるようになった。
他にもm_うんたらを初期化してて、これだけ親クラスのprotectedメンバだと気づかなかった。
156デフォルトの名無しさん:2006/07/07(金) 00:50:13
ワードアートなどのOleObjectをなんでも貼れるようなアプリケーションを作りたいのですが、
とりあえず、何から手をつければよいのでしょうか?
資料が少なくて困っています。
157デフォルトの名無しさん:2006/07/08(土) 19:46:51
ラップしてトレース!した。
なるほど。やっぱりオートメーション(IDispatch&カスタムインターフェース)とは別のインターフェースからアクセスできるプロパティだったのか。オートメーションからもアクセスできるみたいだけど。

しっかしこのインターフェース、COM文書には殆ど何も出てなくてリファレンスはInternet Development文書の方にある。

オレが自作コントロールで<PARAM>でアクセスできなかったのはウィザードを使わずにプロパティを設置したからで、なぜかウィザードを使って設置したらアクセスできる。
うーむ。VBにせよATL/MFCにせよ、ビジュアル開発環境って何をやってるのかさっぱりわからん。

で、WSFの場合だけど、これはそもそも<PARAM>があってもWSHは何もしないようだ。

つかこのスレ居るとどんどん知識が増えてく〜
158デフォルトの名無しさん:2006/07/08(土) 20:37:14
>>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");
161デフォルトの名無しさん:2006/07/09(日) 21:56:39
>>156
ATLがいいんじゃないかと思うんだけど、オレはATLよく知らない。誰か教えてあげて下さい。
SDKレベルでインプレースアクティベートする方法なら少しは知ってるけど誰も必要としてないよね・・・OrZ・・・

>>159
MFCよく知らないけど、WriteProfileStringはレジストリじゃなくてINIファイルに書き込む。ってこれActiveXじゃないんじゃないか?

あと、COleControlにそんなメソッド見当たらないぞ??
162デフォルトの名無しさん:2006/07/10(月) 21:07:17
>>161
レスありがとうございます。
とりあえず、OClientというOLE(ATL?)のサンプルを参考にして実装中です。

とりあえず、わけもわからず組んでいるのですが、
ドラッグアンドドロップはできても、Oleオブジェクトはドキュメント(CDoc?)とビュー(CView?)があるウィンドウでないと
作成されないようだ(Oleオブジェクトを作成するための関数の引数に入れる情報が足りない)ということがわかりました。

やりたいことはダイアログウィンドウにOLEオブジェクトを貼り付けたいので
ダイアログウィンドウにCViewを貼り付けて実装中です。
そのときダイアログウィンドウ→CFrameWnd→CViewという順番で作るといいという
情報をつかんだまでがここまでの話ですw

では、できたらまたきますw
163デフォルトの名無しさん:2006/07/11(火) 00:46:29
で、
>ダイアログウィンドウ→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
164デフォルトの名無しさん:2006/07/11(火) 22:52:49
で、どうなったかというと、結局できませんでした。

なんかCViewを作って貼ればいいとかいう単純な理由では無いっぽいです。

強引にやろうとすると、
ドラッグ&ドロップをしてデータを受け取ろうとするところでハングアップします。

それ以降もOleObjectを作成しようかというところで頻繁にCViewやらGetDocumentから
取得する内容を引数に要求されます。

じゃあ、ダイアログベースのウィンドウではOleObjectを貼りつけることはできないのか?
と、思いCViewとCFrameWndとCWinAppから派生するものでドキュメントをこさえようとしてみるものの失敗。(作成できない?)
そもそもダイアログベースのアプリでそんなもの作成できるのかどうかも不明なので何が正しい処理なのかも不明。

というわけで、OClient以外の資料も無いので手詰まりな状態です

見た目どうみてもウィンドウハンドルさえあればどこでもくっつけられるような感じなのに納得いかないです。
OLEを理解できてないだけっていう気もするのですが、これ以上やろうと思うと根っこの部分からの理解が必要な気がします。

なんかいい資料ないでしょうか?つーか、だれか助けてください・・・orz
165デフォルトの名無しさん:2006/07/11(火) 23:46:17
>>162-164
OCLIENTはMFCだね。
オレは詳しくないので、誰かMFCに詳しい人が教えてくれたらいいんだけど、
他にレスがなかったらMFCのスレで聞いてみれば?
166デフォルトの名無しさん:2006/07/12(水) 00:08:51
>>165
でも、そのソースのメインディッシュはOLEなんですよ。
あ、でも、MFCの方から調べてみるってのはやったことなかったです。
いままでATLとかOLEとかしか調べてなかったです。
MFCのスレの方でも聞いて見ます。
ありがとうございました。
167デフォルトの名無しさん:2006/07/15(土) 20:34:40
もう終わった話だろうけどシリーズ。

>>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
168デフォルトの名無しさん:2006/07/15(土) 20:35:12
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
171デフォルトの名無しさん:2006/07/20(木) 08:35:08
MSのアプリの機能拡張的なものを作るんだったら
しぶとく生きるんじゃないか。
172デフォルトの名無しさん:2006/07/20(木) 18:57:47
Office用拡張として使われるうちは大丈夫じゃね?
Office2007はどうだろ?まだ見てないや
173デフォルトの名無しさん:2006/07/21(金) 00:22:35
ここまで念入りに作ったシステムをそう簡単には捨てんだろ。
だっていまだにWin16APIだって残ってるんだぜ?
174デフォルトの名無しさん:2006/07/21(金) 03:07:35
html/hta とかのデータバインド用に
カスタムデータソースオブジェクトを作るための
情報って何を見ればいいか知ってる方いらっしゃいますか?
175174:2006/07/22(土) 00:46:42
具体的には、javascript でローカルの .mdb を処理する
データソース準拠のオブジェクト作って、それをテーブルに
バインドできたら嬉しいな、とか思ってますけど、
やっぱCOMコンポーネントを作らないとだめだろうなあと
予想はしてます。

なんとか英文のリファレンス的のものくらいは見つけたんですけど、
チュートリアルとかもないようだしどうしていいやら…。
176デフォルトの名無しさん:2006/07/22(土) 10:12:02
ActiveXコントロールを作ったんですが、
HTMLのobjectタグでIE上に、このコントロールを表示したとき、
コントロール側からIWebBrowser2を得る方法ってありますか?
177176:2006/07/22(土) 11:27:38
ttp://support.microsoft.com/kb/257717/
ここにあった。けどこのままだとアサートした。
関数内で
__super::SetClientSite(pClientSite);
って親クラスのをコールしたら、アサートしなくなったけど・・・
いいのかな、これで。
178デフォルトの名無しさん:2006/07/24(月) 23:23:02
VB6でイントラネット向けのActiveXコントロールを作成しています。

IEのダイアログが煩いで、安全マークをつけたいのですが、
下を読んでもIObjectSafetyの実装方法が全く解りません。
http://support.microsoft.com/default.aspx?scid=kb;ja;182598

またCABに署名したいのですが、
ファイル署名ツール (Signcode.exe) がVC++のCDに入っておらず、
MSのサイトからもDLできそうにない。

どなたかヒントください。
179デフォルトの名無しさん:2006/07/25(火) 00:02:18
>>178
>安全マーク
そこに書いてあるとおりにやればいいんじゃないの?
なにがわからんの?

>signcode.exe
.NetSDKをダウンロード&インストール汁。
180デフォルトの名無しさん:2006/07/25(火) 00:37:07
>>179さんありがとうございます。
安全マークの件、深く考えずにそこの1〜8を言われたとおりにやって、
自前のコントロールに9,10をコピペすればとりあえず実装できるのでしょうかね。
明日やってみます。

署名ツールはMicrosoft .NET Framework SDK ってやつに入ってそうです。
http://www.atmarkit.co.jp/fdotnet/special/dotnet_sdk/dotnetsdk04.html
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型を使わずに
どう対処すればよいのでしょうか??
教えてください。
183デフォルトの名無しさん:2006/07/31(月) 04:05:43
ByVal/ByRefの違いとかではない?
VB .NETのスレで訊く方がいいと思う。
184デフォルトの名無しさん:2006/07/31(月) 07:03:13
>>183さんありがとうございます。
メソッドじゃなくてプロパティでVARIANTの受け渡ししているんですよ。
VB.Netスレで聞いてきます。
アドバイスありがとうございます。
185デフォルトの名無しさん:2006/07/31(月) 09:17:13
>>183
は引数の話だからプロパティでも同じ
186183: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でセットされた値が入っていない!
187デフォルトの名無しさん:2006/08/01(火) 03:51:43
Integerって
188デフォルトの名無しさん:2006/08/01(火) 04:01:44
CopyArrayって字の如く配列をコピーしているのでは?
VB .NETはよく知らないけど、InfTbl = InfDatなどとしたらどうだろうか。
189183:2006/08/02(水) 00:48:37
>>185さん
それもやってみたんですがダメでした。
ActiveXがVariantなのにObjectで渡しているのが原因と思っているのですが、
VB.Net側での回避策ってないのでしょうか?

>>187さん
Integerだと何か良くないですか??
190デフォルトの名無しさん:2006/08/02(水) 02:39:46
Marshal
191183:2006/08/03(木) 00:15:46
>>190さん
Marshal.GetObjectsForNativeVariantsメソッドを使うってことですか??
詳しく教えてください。
192デフォルトの名無しさん:2006/08/03(木) 00:40:24
ちなみにX1.InfAddrV = InfDatだとどなる?
193183: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
>>194
ウニコードは?
196194:2006/08/05(土) 12:44:58
さんくす。プリプロセッサを_MBCSから_UNICODEに変更したら出来まいた。
197デフォルトの名無しさん:2006/08/05(土) 17:55:21
どなたか、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側で判別したいんですよ。
詳しい方教えてください。お願いします。
199デフォルトの名無しさん:2006/08/21(月) 01:36:23
>>198
無理だと思う。
それに、VBとVC以外だったらどうするつもりかと。
200デフォルトの名無しさん:2006/08/21(月) 02:03:15
初期化の時にフラグをセットするくらいしか方法ないんじゃねーの
もちろん、初期化でごまかされたら手も足も出ねーけど
201デフォルトの名無しさん:2006/08/21(月) 22:12:20
つかなんで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
ワードのヘルプあるでしょ
204デフォルトの名無しさん:2006/08/30(水) 21:50:32
>>203
ワードのヘルプにはUUIDのことなんか書いてないぞ
205デフォルトの名無しさん:2006/08/30(水) 22:06:11
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
208デフォルトの名無しさん:2006/11/28(火) 17:52:03
BGMのあるページが表示されるとすぐ
『このwebページでActivexを実行するにはクリックしてください』
とボタンがでて、OKしても×をクリックしてもエラーでマイクロソフトに報告になってしまいます。

何が原因なのでしょうか?
またこの解決法があれば教えてください。
209デフォルトの名無しさん:2006/11/28(火) 17:59:49
おまえ馬鹿だろ?
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);


よろしくお願いします。
211デフォルトの名無しさん:2006/11/28(火) 21:49:37
>>210
ちゃんと読めばわかる話じゃ?
その文章中からさらにリンクが張られてるでしょ。
"Beep"なんてのはそこで使われている例の話であって
ググってわかる話ではないよ。
212デフォルトの名無しさん:2006/11/28(火) 22:05:47
どうも。すみません。
BEEPは出来合のコマンドだと勘違いしていました。
>>211
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdnguion/htm/msdn_093098.asp
ですね。

最終的にCHtmlViewにフォーカスを当てるためにはBeepの代わりに
何を書けばいいのですか?
そのコマンドはどこを探せばいいですか?
213デフォルトの名無しさん:2006/11/28(火) 22:25:08
>>212
単にビューにフォーカス当てたいんなら、そのビュークラスの.SetFocus()でいけるんじゃないの?
214デフォルトの名無しさん:2006/11/28(火) 22:26:18
あ、ごめん>>210よく読んでなかった。
だめだったのか。
215デフォルトの名無しさん:2006/11/28(火) 22:36:00
ていうか、>>213の方法でできたぞ。
216211: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.
単純にホイールでスクロールしたいだけです

219211:2006/11/29(水) 01:15:41
>>217-218
ごめん。
今確認したら確かにHWNDはCHtmlViewではなくて「Internet Explorer_Server」だった。
でも、マウスでクリックしたときとSetFocus()したときで同じ値になってる。
あと、どちらの場合もホイールでスクロールできる。
フォーカスがあってもマウスカーソルがウィンドウから外れているときは
スクロールできないが、WM_MOUSEWHEELはちゃんと来てるのでIEの仕様っぽい。

普段使ってるマウスユーティリティは全てOFFにして確認したので
こちらの環境依存ではないと思うが・・・
220211:2006/11/29(水) 01:38:13
ちょっと補足だけど
「Internet Explorer_Server」のHWNDはFindWindowEx()で取れるね。

時間がないのであまり検証できないけど、
なんかの役に立つかもしれないので一応。
221デフォルトの名無しさん:2006/11/29(水) 08:19:10 BE:338840047-2BP(330)
>>220
ありがとうございます。

OLEでやろうとしたのは拡張したくなった時に
OLEのことをちょっと知っておきたかったのも
あります。

とりあえず今回はFindWindowEx()で乗り切ることを検討します
222デフォルトの名無しさん:2006/12/04(月) 23:27:55
この記事でコントロールは作れたけど、それをWordに張るにはどうすればいいか、分かりません。

Exposing Windows Forms Controls as ActiveX controls
ttp://www.codeproject.com/cs/miscctrl/exposingdotnetcontrols.asp

誰か分かる方はいらっしゃいませんか?
223デフォルトの名無しさん:2006/12/06(水) 23:48:54
Wordに張るにはOLEサーバにする必要があるのですか?
そうするとEXEを作る必要があるのかと思いますが、
C#の場合、OLEサーバを作るには何をすればよいのでしょうか?
必要なインターフェース等ご存知の方、よろしくご教授お願いします。
224デフォルトの名無しさん:2006/12/07(木) 00:00:01
別にDLLでもサーバになれる。
C#とその他.NET全てのプログラムは、regasmを使ってCOMコンポーネントとして公開できる。

OLEサーバになりたければそのために必要なインタフェースを全部実装したクラスを作ればいいのだろうが、
そこまでは知らん。
225デフォルトの名無しさん:2006/12/11(月) 22:56:16
ATL-COMだとメソッドの引数にユーザ定義型のポインタを渡せるけど、
オートメーションだと出来ないもの?
(環境:VS2005 VC++、プロジェクトをMFCアプリケーションで作成した場合)
VARIANTのポインタとかで渡さないとダメなのかな?
だったらかなり面倒だなぁ…。
226デフォルトの名無しさん:2006/12/12(火) 00:13:56
openoffice.orgでOLEが使えないのが痛い
227デフォルトの名無しさん:2006/12/18(月) 23:43:31
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が「安全である」かどうかを判断するには,どうすれば
良いのでしょうか? 
228デフォルトの名無しさん:2006/12/19(火) 13:43:51
>>227
そのGUIDってMSScriptControl.ScriptControlだろ?安全なわけないじゃん
229デフォルトの名無しさん:2006/12/20(水) 00:36:52
なぜでしょうか?
230デフォルトの名無しさん:2006/12/20(水) 00:41:26
>>227
セキュリティレベルは継承されるからそんなことしても無駄でしょ。
普通に var shell = new ActiveXObject("Shell.Application"); としとけばいい。
231227: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で,ユーザーが使いやすい配布方法を探しております。
232デフォルトの名無しさん:2006/12/20(水) 12:31:36
>>231の質問を言い換えると
「IEのセキュリティホールをご存じありませんか?」
233227: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)で済むのが不思議です。
234デフォルトの名無しさん:2006/12/20(水) 16:44:09
実行時にセキュリティダイアログの出るHTML Applicationには特権が与えられる。
235デフォルトの名無しさん:2006/12/20(水) 16:44:54
HTAを実行するのはIEじゃないしな
236デフォルトの名無しさん:2006/12/20(水) 19:05:18
>>227
> (1) 拡張子をhtaに変更してActiveXを使用したページを私のサイトで公開すると
間違ってもHTAをそのままweb上で公開なんてしないでね。

> ActiveX+JScriptを使用しています
ム板にWSHのスレがあったりする。
237227:2006/12/20(水) 19:27:22
>>236
>>>227
>> (1) 拡張子をhtaに変更してActiveXを使用したページを私のサイトで公開すると
>間違ってもHTAをそのままweb上で公開なんてしないでね。
今現在,HTAを私のwebで公開しているのですが,大きな問題が
起こる可能性があるのでしょうか? (話しのながれで,この板で
最後の質問させていただきました。)
238デフォルトの名無しさん:2006/12/20(水) 19:33:31
HTAは間違って実行すると何が起こるかわからん
239デフォルトの名無しさん:2007/01/24(水) 19:37:49
exeだとかrootでのshスクリプトと何が違うんだ
240デフォルトの名無しさん:2007/02/04(日) 09:17:58
ログに残らない
241デフォルトの名無しさん:2007/02/07(水) 00:33:28
VC++でActiveXコンポーネットを作って、IE上で動かすところまでは出来ました。
そこから呼び出し元のHTMLをJavascriptで操作することはできますでしょうか?
242デフォルトの名無しさん:2007/02/07(水) 01:45:43
俺はできると思う。
まずは色々自分で試してみようよ。
243デフォルトの名無しさん:2007/02/07(水) 21:35:23
>>241
やりたいことがよくわからんけど、OCXからjavascriptの特定メソッドをコールしたいってこと?
244デフォルトの名無しさん:2007/02/08(木) 13:17:49
IEを操作時にJavaScriptで「はい」「いいえ」のボックスが出現するのですが、
それを扱うことは可能でしょうか?

InternetExplorer.Application辺りを調べてみましたがないみたいです。

もしご存知の方がおられましたら宜しくお願いします。
245デフォルトの名無しさん:2007/02/08(木) 15:24:06
ダイアログボックス程度なら、
普通に子ウィンドウ検索してボタンに適当にウィンドウメッセージ投げてやればいいじゃん。
246デフォルトの名無しさん:2007/02/08(木) 19:21:21
JavaScript 書き換えりゃいいんじゃね?
247244:2007/02/08(木) 20:52:46
>>245
その子ウインドウの検索をするメソッド名(?)を教えていただけないでしょうか?

もしくはその辺りの情報がひっかかる検索語句をお願いします。
248デフォルトの名無しさん:2007/02/08(木) 22:10:33
VisualStudioのSpy++でウィンドウ階層見れるから手動で少し調査してから
GetForegroundWindowかGetActiveWindowでIEかダイアログボックスのウィンドウハンドル拾って
FindWindowでボタンコントロールのウィンドウ探してPostMessage。
249244:2007/02/10(土) 19:30:03
>>248
おお!丁寧にありがとうございます!
土日ですし、解決するまでがんばってみます!^^
250デフォルトの名無しさん:2007/02/13(火) 10:37:08
OLEでメディアプレイヤーを操作したいのですがうまくいきません。
[MediaPlayer.MediaPlayer]のインスタンスは間違いなく作成できているのですが
それに対してのメソッドがことごとく無反応です。
なにか特殊な前置きが必要なのかな。。
251デフォルトの名無しさん:2007/02/13(火) 22:06:07
>>250
CoInitialize()とか?
252デフォルトの名無しさん:2007/02/14(水) 12:16:35
すみません質問させてください。
VC6のATLでActiveXコントロールを作成しCAB作ってサーバに上げたのですが、
URL直打ちでCABファイルがダウンロードできて、中身が見れたり別サーバに
アップロードすればそのまま使えてしまいます。
特定のサーバからじゃないとインストールできなくしたりできるのでしょうか?
何かご存知の方がいましたら教えてください。
253デフォルトの名無しさん:2007/02/14(水) 17:41:13
そういうものだ
254デフォルトの名無しさん:2007/02/14(水) 19:10:08
使えてしまうって方は、
IOleClientSiteからIServiceProviderだか何だかを経由して IBindContext か何かを
取得すれば URL が解るから、それで動作変えれば。
255252:2007/02/15(木) 02:15:36
>>254
ご回答ありがとうございます。
なるほどー。URL取得して違う鯖だと警告出して終了、
などでOKそうですね。試してみます。

CABファイルのダウンロード禁止はやっぱり無理でしょうか。
鯖側で.htaccessでCABファイルの直リン禁止にしたら
インストールもされなくなってしまいましたし・・・。
設定間違えてるのかもしれませんがこれはスレ違いぽいですね。

あとは時間があればライセンス付ActiveXコントロールでも
試してみます。
256デフォルトの名無しさん:2007/02/15(木) 16:36:34
ACLかけろよ
257デフォルトの名無しさん:2007/02/15(木) 16:41:44
>>255
asp でも cgi でもいいから、ダウンロード専用のページを作成して、
その中でリファラをチェックすればいいよ。

リファラを見て問題がなければ、ローカルからCABを読み込んで
ストリームに流し込んでやればいい。
258デフォルトの名無しさん:2007/02/15(木) 17:29:52
捏造できる罠
そもそも配布方法に問題があるんじゃ?
259252:2007/02/17(土) 07:44:13
>>256->>257
いろいろやりかたあるみたいですね。
土日で調べて試してみようと思います。

>>258
CABファイルを鯖にアップロードしただけなのですが、
普通に置いただけじゃ駄目ということでしょうか?
260デフォルトの名無しさん:2007/02/17(土) 13:07:58
見られてまずいものはそれなりの認証が必要にするべきでは?
261デフォルトの名無しさん:2007/02/20(火) 17:48:32
OLEでインプットダイアログを表示させることはできないでしょうか?
単なるポップアップは WSctipt.Shell の Popup を発見したのですが。

これがあれば簡単に対話式のプログラムを組めるのですが、、、、
262デフォルトの名無しさん:2007/02/20(火) 17:55:00
いやオートメーションの中で何を呼ぼうと自由では
263デフォルトの名無しさん:2007/02/28(水) 21:23:41
ProgIDからタイプライブラリを取得したいんだけど、API無いの?
自分でレジストリ検索しなくちゃだめ?
公式な検索ルールってあるの?
264デフォルトの名無しさん:2007/03/21(水) 20:11:55
ほしゅ
265デフォルトの名無しさん:2007/04/06(金) 10:44:37
初歩的な疑問があるんですが、お教え願えないでしょうか。

環境はVS.NET 2003です。

MSDNチュートリアルを見ながら、ATL のActiveX コントロールを作ってみたんですが、dll の容量が324Kbでした。
同様の物を MFC で作った ocx の容量は144Kbでした。

てっきり ATL の方が小さくなると思ってたんですが...
ひょっとして、MFC の方は別途必要な物があるんでしょうか?VBRUNJPなんとかみたいに。

どうかよろしくお願いします。
266デフォルトの名無しさん:2007/04/06(金) 20:35:39
動的リンク
267デフォルトの名無しさん:2007/04/08(日) 18:08:03
どなたかActiveXのダウンロードサイトを貼ってくれまいか?
268デフォルトの名無しさん:2007/04/08(日) 18:09:33
どの?
269デフォルトの名無しさん:2007/04/08(日) 18:35:09
>>268
そんなに色々あるんですか?
実はハンゲームに登録したもののActiveXが無いのでゲームが出来ないんですよ
270デフォルトの名無しさん:2007/04/08(日) 18:54:37
ゲームを始めようとすると、そのゲーム自身のAcitveXコンポーネントがダウンロードされるはず。
そのAcitveXコンポーネントの実行環境はWindowsとInternet Explorerが備えている。
それ以外の環境で実行したいという話なら知らない。
271デフォルトの名無しさん:2007/04/08(日) 19:10:00
>>270
ダウンロードのやり方の説明が出るだけで、何処にも出ないんですよ
272デフォルトの名無しさん:2007/04/08(日) 19:11:20
273デフォルトの名無しさん:2007/04/08(日) 19:13:57
*.hangame.co.jpを信頼済みサイトに登録してみろ
httpsがどうたらというチェックは外しておけ
それでだめなら、そもそも板違いだからよそで聞け
274デフォルトの名無しさん:2007/04/08(日) 19:23:20
>>273
出来ました
ただ今度はダイレクトXをどれをインストールしたら良いかわからなくて
とりあえずダイレクトX9をインストールしようとしたら環境が悪く9%の
時点で34分掛かると出てしまいました。
後は自分で何とかします。ありがとうございました
275デフォルトの名無しさん:2007/04/19(木) 15:13:18
VC2005にて、Webページに貼り付けるActiveXを作っています。

1プロセスで1つしか実行できない描画用ライブラリを
使ってるせいなのか、
ブラウザで同じページを2つ立ち上げると
片方の処理が停まります。

同じプロセス内だからでしょうか?
別プロセスで動くようにするにはどうすればいいんでしょうか?
(VBの場合はActive.EXEにすればいいとわかりましたがVC
の場合がわかりません)
276275:2007/04/19(木) 16:48:33
IEのショートカットで複数起動すると、それぞれ別プロセスになるので問題ないようです。

しかし、Ctrl+Nだと、全部1つのプロセスになるので、どうしても他のページに影響してしまうようです。
277デフォルトの名無しさん:2007/04/19(木) 17:16:30
スレ立てれ
278デフォルトの名無しさん:2007/04/19(木) 17:30:58
やめれ
279デフォルトの名無しさん:2007/04/19(木) 17:38:26
恕を製作せずにタスクトレイにアイコンを追加して
メッセージをそこで受け取ることは出来ますか?
280デフォルトの名無しさん:2007/04/19(木) 18:07:07
そんな珍妙なものを製作していただく必要はありません。
281デフォルトの名無しさん:2007/04/19(木) 18:16:02
>>279
不可視の恕は必要だと思うよ。
282275:2007/04/19(木) 20:09:26
ここの5にあるとおり、Visioでさえも駄目となると、どうしようもないんでしょうか?

Visio : Visio ActiveX あれこれ
http://blogs.msdn.com/visioj/archive/2005/08/06/448501.aspx
283デフォルトの名無しさん:2007/04/19(木) 20:45:59
> 1プロセスで1つしか実行できない描画用ライブラリ

の使用をやめりゃいいんじゃね?
284275:2007/04/19(木) 21:13:25
ATLでアウトプロセスにすればいけるかと思ったんですが、
子プロセス作ってウインドウハンドル渡してそこから描画しようと思います。
プロセス間通信が面倒ですが。

>283
代用できるもの無いんです。
非公開な特殊画像のデコーダなので。
285275:2007/04/19(木) 21:15:04
>ATLでアウトプロセスにすればいけるかと思ったんですが、
これの続き書き忘れました。
ATLのアウトプロセス(EXE)でも結局同じでした。
IEから独立したプロセスとして動いてくれますが、
IEを複数開いても、結局1つしかプロセスが立ち上がりませんでした。
286デフォルトの名無しさん:2007/04/19(木) 21:28:00
インプロセスCOMが子プロセスを生成して、
パイプなぞで通信するというはどうか。
287デフォルトの名無しさん:2007/04/19(木) 21:58:02
その変なサーバをマルチスレッドでエゴ仮想
288275: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サーバを作れるものでしょうか?
290デフォルトの名無しさん:2007/04/25(水) 22:35:24
できるっていうか、普通そうじゃないのか。
単なるDLLとして作ってるとか言う落ちじゃなければ。
291289:2007/04/26(木) 19:00:20
>>290
すいません。説明不足のようでしたね。
SDKで開発したアプリというのはexeでして
このexeにCOMインターフェースを付けて
外部のアプリにサービスを提供しようとしています。

その方法としてCOMインターフェース部分を単なるDLLとしてexeとリンクし
外部のアプリとはCOMでの連携を考えています。
292デフォルトの名無しさん:2007/04/26(木) 19:10:58
DLLでアウトプロセスCOMサーバが作れるかってはなしなら
まず作れない

別々のプロセスに属するDLL同士が独自のIPC/RPCを
実装しているなら目的のことは出来るだろうけど。
293デフォルトの名無しさん:2007/04/26(木) 21:06:16
>>291
まず、インプロセスサーバかアウトプロセスサーバのどちらなのかが話から見えない。
294デフォルトの名無しさん:2007/04/26(木) 23:30:24
>>293
>まず、インプロセスサーバかアウトプロセスサーバのどちらなのかが話から見えない。
そんな用語があることさえ知りませんでしたがアウトプロセスサーバです。
295デフォルトの名無しさん:2007/04/26(木) 23:39:22
やれないことはないだろうが、少なくともMFCのウィザードは使えないと思う。
DLLならインプロセスを前提にするだろうし、
アウトプロセスならEXE内に実装することを前提にするだろうし。
296デフォルトの名無しさん:2007/04/27(金) 09:06:17
ありがとうございました。

いろいろクグりながら試行錯誤した結果、ATLで雛形を作って
それに既存SDKのソースを組み入れるとできそうな予感がしてきました。
ATLは初挑戦なのですが、希望が見えてきました。
297デフォルトの名無しさん:2007/05/18(金) 03:52:16
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()を呼び出す方法がわかりません。

ご存知の方がおられましたら、ご教示お願いいたします。
298297:2007/05/18(金) 05:15:15
自己レスです。

>>297の方法よりもうちょっとすっきりいくようになりました。
ActiveXコントロール側にイベントを追加して
それをJavaScript側でハンドルして f()を呼ぶようにすれば
間接的ですが、だいぶすっきりしました。
---------------
<object id="mycontrol".../>

<script>
<!--
function f() {}

function mycontrol::myevent()
{
 f();
}
-->
</script>
---------------

最悪これで逃げようと思いますが、直接f()を呼ぶ方法はないものでしょうか?
299275: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
やっべ名前が残ってた。
301297:2007/05/18(金) 14:39:33
>>297
なるほど、そんな書き方もあるんですね。

今回はHTML側はあまりいじりたくない状況でして、
そしてHTMLでは
<script>
<!--
function f() {}
-->
</script>
とだけ書いてあるような状況なので、イベントを経由せずに
実現したかったのですが、
結局以下のページの方法で所望の動作をさせることができました。
http://homepage3.nifty.com/LILILIN/HOWTO/activex_javascript.htm

scriptタグを探して、そいつのtextプロパティに evalさせたい script文字列を
書き込めばいいんですね・・・
302デフォルトの名無しさん:2007/05/19(土) 15:55:23
C++でActiveXコントロールを作成し、HTMLのembedタグなどを使って
動作させることは出来たのですが、>>121 のように
直接対象ファイルをIEにドロップしてもコントロールが動作するように
させるにはどうしたらいいのでしょうか?

ActiveXドキュメントにしたところ、そのような動作ができましたが、
拡張子がexeになりますし、今度はActiveXコントロールとしてコンテナに
貼り付けることができなくなってしまいました。

拡張子がocxのまま >>121のような挙動をさせるには
どうしたらよいのでしょうか?
303302: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の方が言われるように追加でいくつかのインタフェースを実装する必要があるということでしょうか?
304デフォルトの名無しさん:2007/05/22(火) 00:09:54
質問です。

ActiveXを初めて使ってみようとしている所です。
とりあえずWin32コンソールアプリで適当なActiveXコントロールを呼び出して
適当なプロパティをセットして動くかどうか試すだけ、という事をやろうとしています。
以下のようなコードを書いたのですが、GetIDsOfNames()までは正しい値を
取得できているようなのですが、Invoke()の所でエラー値が返ってきてしまいます。
(エラー値は0x8000ffffで致命的なエラーです。)

COM関連のサイトや本を調べて手順は踏んでいるつもりなのですが、
何か基本的な所でミスがあるのでしょうか?

よろしくお願いします。
305304: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' を複製します。

回避策がありましたら、よろしくお願いします。
307デフォルトの名無しさん:2007/06/01(金) 00:42:40
>>304
IsInvokeAllowed
308デフォルトの名無しさん:2007/06/01(金) 16:53:09
IEがコンテナな、描画処理が重いActiveXを作ってます。
スクロールするとWM_PAINTが沢山やってくるので、スクロール中は描画しないように
したいのですが、IEのメッセージをフックしてもWM_VSCROLLが来ません。spyにも出てきません。
一体どうやってスクロール中の描画処理を回避すればいいのでしょうか?
309デフォルトの名無しさん:2007/06/01(金) 17:01:52
Aeroにする
310デフォルトの名無しさん:2007/06/01(金) 18:13:06
予めメモリDCやメタファイルに描画しておいて、
WM_PAINTではそいつを表示するようにするだけにするというのはだめか?
311デフォルトの名無しさん:2007/06/01(金) 21:06:40
WM_PAINTはメッセージの優先度は低いんだから描画してやれよ。
まあ、ValidateRectしといて、SetTimerでWM_PAINTを
遅延させる手もあるだろうけどサ
312308: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ループで数回繰り返す」という所で
ひっかかってしまっています。

よろしくお願いします。
314デフォルトの名無しさん:2007/06/08(金) 23:18:46
概念的にはイベントは、そんな風に使う存在ではない
形としては向こうからコールバックされるもの
315デフォルトの名無しさん:2007/06/09(土) 01:26:27
>>313
for( i=0; i<10; i++ ){
  ミューテックスhogeを作成する。
  m_TestCtrl.Run(); // 処理実行要求
  ミューテックスhogeがシグナルになるまで待つ
}

OnRunComplete() {
  //一連の処理
  ミューテックスhogeをシグナルにする。
}

関連API
CreateMutex
OpenMutex
ReleaseMutex
CloseHandle
WaitForSingleObject
316デフォルトの名無しさん:2007/06/09(土) 01:37:13
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
デュアルインターフェースで大量のデータを高速にやり取りする方法ってないのかな
構造体の配列は渡せないし、ファイルを経由して渡すようなやり方しかないんだろうか
320デフォルトの名無しさん:2007/06/12(火) 06:34:35
俺、やっぱ疲れてんのかなぁ?
>>317>>318 が同じ文章に見える。
321デフォルトの名無しさん:2007/06/12(火) 09:31:50
>>319
>構造体の配列は渡せないし
渡せるがVB6やVBScriptから使えなくなってしまう。
SafeArrayを使えば何とかなるが今度はC++や.NETからの利用が面倒になる。
322デフォルトの名無しさん:2007/06/12(火) 10:16:39
>>321
SafeArrayだと型の制限がキツいし構造体も使えなかったんじゃなかったっけ

323デフォルトの名無しさん:2007/06/12(火) 10:59:23
VARIANTの配列にしてしまえばやりたい放題だったと思うが、
お友達にはなりたくはないな。
324デフォルトの名無しさん:2007/06/12(火) 13:59:23
IRecordInfoとかを使えばVARIANTに構造体(へのポインタ)を持たせられるみたいだがよくわからない
325デフォルトの名無しさん:2007/06/12(火) 22:01:03
全部シリアライズ化してLPCTSTRで渡す。
326デフォルトの名無しさん:2007/06/13(水) 00:35:49
その発想なかったわ
327デフォルトの名無しさん:2007/06/27(水) 11:32:33
初歩的な疑問があるのですが、お教え願い致します。
環境はVC++2005です。

ALTやMFCを使わないで、IEに貼り付けられるActiveXは、作れないものでしょうか?

ATLやMFCなどのDLLに依存させたくないのです。

可能でしょうか?

参考になるURLなど教えて頂けたら幸いです。

宜しく御願い致します。

328デフォルトの名無しさん:2007/06/27(水) 12:35:25
>>327
>ATLやMFCなどのDLLに依存させたくないのです。
どっちも静的にリンクできるがそれじゃいかんの?
オートメーションなら自前で何とかなるが、
実装の必要なInterfaceの多いOCXコンポーネントとなると現実的じゃねーぞ。
329327:2007/06/27(水) 14:09:23
ご回答ありがとうございます。

静的リンクで、とりあえず開発してみようと思います。

また、自前での実装も大変と思いますが、トライしてみます。

ありがとうございました。


330デフォルトの名無しさん:2007/07/07(土) 11:01:30
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");
----
他のヘッダーはしっかり送られてるようです。
よろしくお願いします。
332デフォルトの名無しさん:2007/07/19(木) 07:18:10
試してないけど
IHTMLDocument2::cookie
で設定してみたらどうだろうか。
333デフォルトの名無しさん:2007/07/20(金) 11:31:14
>>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 を明示的に指定しても
うまくいかないらしいので。

あと、このような質問はスクリプト関連のスレの方が適切な回答が得られると思う。
334331:2007/07/21(土) 00:16:12
ありがとうございます。
おっしゃるとおり、一度ページを表示後
document.cookieに値をセットすることで送信することができました。
確かにめんどうな手続きになってしまいますね。
335デフォルトの名無しさん:2007/07/22(日) 18:52:52
【派遣ネガティブ根性チェック】

3つ以上、チェックがつけばアナタの性格はひん曲がっており、
ネガティブ負け組派遣人生を歩んでいます。

□派遣先正社員の作った糞開発ツールはたとえ腐っててもマンセーして使う
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□仕様とは正社員から口伝されるものだ
□耳で聞いた仕様を正確に覚えていないのは自分の責任だ
□昼食は必ず派遣先の社員と行くべきだ
□自分の仕事で問題が発生しても解決するのは派遣の仕事ではない
□派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにして反論する
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい
□奢ってくれる派遣先正社員を尊敬する
□自分の月額金額を知らないのは当然だ、単金を聞いてはいけない
□派遣先正社員より自分の生涯収入が低いのは当然だ
□チビは派遣先にかわいがってもらいやすいから派遣には有利だ
336デフォルトの名無しさん:2007/07/23(月) 09:44:53
面白くないコピペするなよ。
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を使いたいだけ」っていう人向けの良い書籍を探しているのですが
なかなか見つからなくて。
340デフォルトの名無しさん:2007/07/23(月) 13:54:17
C++からExcelはニッチ過ぎてないかもしれないね。
VBからExcelを操作する本と、
C++からオートメーションを使用する本の2冊は必要になるだろう。
341デフォルトの名無しさん:2007/07/23(月) 19:57:07
C++でVBSをホストした方が早い気がする
342デフォルトの名無しさん:2007/07/23(月) 22:00:51
VC++からのExcelオートメーションなんて、いつもVBAのヘルプ見ながらやってるな。
343デフォルトの名無しさん:2007/07/24(火) 16:25:39
普通にvbaでいいじゃん
344デフォルトの名無しさん:2007/07/24(火) 19:18:39
すでにVisual C++で作ったアプリにExcel出力機能を実装したいんでしょうよ
345デフォルトの名無しさん:2007/07/24(火) 19:51:02
何をインポートすればいいんだか毎回ググっている俺。
346デフォルトの名無しさん:2007/07/25(水) 23:43:26
一時期は本屋にOLEやらActiveXやらCOM/DCOMの書籍が
所狭しと並んでいたけど、今はほとんど無いよね。
これから勉強をする人はどーすんだろ?
347デフォルトの名無しさん:2007/07/26(木) 00:28:18
.netをとっかかりにしてドツボへ
348デフォルトの名無しさん:2007/07/26(木) 00:45:29
これから勉強をする人なんていねーだろ
349デフォルトの名無しさん:2007/07/26(木) 00:55:21
PowerPointオートメーションなんてサンプルほとんどねーよ。
アニメーションを一時停止なんてどうすりゃ・・・
右クリックするとコンテキストメニューでて一時停止されるから、できると思うんだが。
350デフォルトの名無しさん:2007/07/26(木) 00:57:31
ヘルプでそれっぽい名前のメソッドを探すとか
351デフォルトの名無しさん:2007/07/26(木) 01:02:22
やっぱそれしかないよな。
明日もコツコツやっていきますわ。
352デフォルトの名無しさん:2007/07/26(木) 20:37:07
Office製品を始めサーバを利用するためのドキュメント
見たことないけどそもそも公式に公開してるの?
353デフォルトの名無しさん:2007/07/26(木) 21:25:09
ウィザードで生成されたヘッダをみて、それっぽいメソッド探す
354デフォルトの名無しさん:2007/07/27(金) 20:06:36
ヤッパそうなん。
355デフォルトの名無しさん:2007/07/27(金) 20:52:44
個々のメソッドやプロパティなどの説明ならMSDNライブラリにもある。
http://msdn2.microsoft.com/en-us/library/bb149081.aspx
こっちは.NET用のプライマリ相互運用アセンブリだけど、ある程度は参考になるはず。
http://msdn2.microsoft.com/ja-jp/library/microsoft.office.interop.excel(VS.80).aspx
356デフォルトの名無しさん:2007/08/06(月) 08:52:50
夏はやっぱりOLE
357デフォルトの名無しさん:2007/08/08(水) 01:54:21
全然詳しくないので質問させてください。

自称「マネージメントもできる」派遣クンが
「ActiveXが僕のプログラムどおりに動かない原因を調べるのは僕の仕事ではありません。」
と言っています。

彼のActiveXプログラムが動かないのを調べるのは誰の仕事なのでしょうか?
358デフォルトの名無しさん:2007/08/08(水) 17:43:04
お答えいたします。




コピペ君って馬鹿だな
359デフォルトの名無しさん:2007/08/08(水) 18:19:41
派遣はクズ・ゴミ・負け犬だから、許してやれや
360308:2007/08/08(水) 18:56:09
>>357
もちろん、君の仕事です。
361デフォルトの名無しさん:2007/08/08(水) 23:14:52
じゃあ、派遣クンの存在って意味ないんじゃね?
362デフォルトの名無しさん:2007/08/09(木) 13:21:10
そーです。その派遣クンは意味無いんでとっとと切るべき。
363デフォルトの名無しさん:2007/09/01(土) 15:47:54
でも派遣クンはしがみつくことに必死です。
364デフォルトの名無しさん:2007/09/02(日) 05:26:55
VARIANT って必ず
VariantInit(&hoge);
してから使って、
作業が終わったら
VariantClear(&hoge);
しないといけないのですか?
365デフォルトの名無しさん:2007/09/02(日) 07:48:55
それは空 (VT_EMPTY)のインスタンスを作るのが役目なので、
いきなり何か値を代入して初期化するなら、VariantInitは不要。

ATL::CComVariantもコンストラクタの種類によっては、
VariantInitを行わずに初期化していたはず。

VariantClearは、整数型など解放処理の必要のないデータが
入っていると確実に言えるのなら不要。
BSTR、SafeArray、IUnknown*などが格納されている場合に、
その解放処理を行うのがVariantClearの役目。
366デフォルトの名無しさん:2007/09/03(月) 22:48:27
そのようですね。
逆に考えて、
VARIANT って必ず毎回
VariantInit(&hoge);
してから使って、
作業が終わったら
VariantClear(&hoge);
すると何か問題あるのですか?
367デフォルトの名無しさん:2007/09/03(月) 23:18:21
俺には >>365 に答えがあるように見えるのだが…
368デフォルトの名無しさん:2007/09/04(火) 02:03:23
リファレンスカウンタの増減を管理して
いらないものは勝手に捨ててくれるから
VariantInit/VariantClearはちゃんと呼ぶべき
ってどっかに書いてあった
なんかウソっぽいんですが
369デフォルトの名無しさん:2007/09/04(火) 03:55:16
うそですよぇ
370デフォルトの名無しさん:2007/09/11(火) 01:59:48
スレ違いだったらごめん。
教えて欲しいことがあります。

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?
おしえてエロイ人
372デフォルトの名無しさん:2007/09/27(木) 22:01:03
1までで十分。そのためのVarinatClear
373デフォルトの名無しさん:2007/09/28(金) 10:23:56
ありがとうエロイ人
374デフォルトの名無しさん:2007/10/08(月) 08:33:07
Visual C++ 6.0でMFC ActiveXコントロールを作成しています。
テキストボックスを拡張したタイプです。
WM_DROPFILESイベントでOnDropFilesメソッドを作ったのですが
IEでこのコンポーネントを使った場合に、このイベントが発生してくれません。
VB6.0のフォームに貼り付けると問題ありません。
IEでもファイルのドロップイベントが発生するようにするためには
どうしたらよいでしょうか?

http://www.hi-ho.ne.jp/babaq/bfup.html
やりたいのは↑みたいなことなのですが
これはリストボックスにドラッグできますので
できないということはないはずなのですが・・・

よろしくお願いいたします。
375デフォルトの名無しさん:2007/10/19(金) 21:29:17
>>374
IEのセキュリティでActiveXがアクティブになってないんじゃないの?
HTMLのへ張り方みせてみな
376デフォルトの名無しさん:2007/11/13(火) 21:24:46
MFCを利用してActiveXコントロールを作成したいのですが、
コントロールで呼び出せるメソッドの引数として、
クラスのオブジェクトを渡せるようなコントロールを作る必要があります。

DISP_FUNCTIONのvtsParamsの値および
メソッドのプロトタイプ宣言の引数をどのように定義して、
どのような手続きになりますか?
377デフォルトの名無しさん:2007/11/13(火) 21:26:34
>>376
言語は、Visual C++ 6.0です。
378376:2007/11/13(火) 21:31:35
オブジェクトのポインタが渡せれば、コントロール側で受け取ったポインタを、
本来のクラスポインタへ代入して利用できれば良い
と思ったのですが、そもそもそんな事は許されてないのでしょうか。

イメージとしては、

コントロール側では、

void MyActiveX::Test( XXXXX *p )
{
CHoge *MyCls = p;

MyCls->hoge();
}

になり、
呼び出し側では、

CHoge hoge("test");
MyActiveX myCom;

myCom.Test( &hoge );

みたいにできるといいなと。
379デフォルトの名無しさん:2007/11/13(火) 22:51:18
>>376
ActiveXオブジェクト (IDispatch派生クラス)なら、
普通に受け渡しできると思うぞ。
380376:2007/11/13(火) 23:54:45
>>379

それは、渡したいオブジェクトでGetIDispatchでIDisptchを受け取って、
コントロール側では、VTS_DISPATCHをvtsParamsとするってことですか?

そうである場合はいいのですが、
仮にIDispatch派生でない場合はわかります?
381デフォルトの名無しさん:2007/11/14(水) 00:13:11
普通にできるよ。
VARIANT*でもなんでもActiveX引数にできるものに変換して受け渡しすればいいだけ。
382デフォルトの名無しさん:2007/11/14(水) 00:14:39
>>381

詳しく教えてください。
383デフォルトの名無しさん:2007/11/15(木) 20:48:47
void*でいけるんじゃない?
384デフォルトの名無しさん:2007/11/15(木) 23:48:39
VARIANT FAR*
でいけました!

尚、ActiveXコントロールからActiveXコントロールをCreateするには、
どうすればいいんでしょうか?CWndのポインタが取得できないようで。
385デフォルトの名無しさん:2007/11/21(水) 08:38:07
自作の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を作成したいです。
386デフォルトの名無しさん:2007/11/21(水) 15:21:00
VB/VBScriptで扱えるオブジェクトは、IDispatch派生の
ActiveXオブジェクトだけなのだから、
自作オブジェクトを表すActiveXオブジェクト(のクラス)が必要。

既存のコードを修正したくなければ、methodの引数のVARIANTが
VT_DISPATCHなどだったら上記のActiveXオブジェクト、
そうでなければ、既存の自作オブジェクトのクラスと見做すとでもしたらどうだろう?

ところで、そのコード中の「オブジェクト」がクラスへのポインタ型なら、
plValではなくbyrefへ代入し、vtはVT_BYREFだけにしたほうがいいと思う。
こうするとvoid*扱いになる(もちろんVB/VBSからは扱えないが)。
387デフォルトの名無しさん:2007/11/21(水) 15:59:58
つーか自作オブジェクトにIDispatch実装しとけばいいんじゃね
388デフォルトの名無しさん:2007/11/25(日) 22:19:25
質問です。XP、VC++ 2005 で開発を行っています。

IE 上に貼れる独自の ActiveX コントロールを作ろうと思ったのですが、
わけあって、これを MFC や ATL を使わずに、WinAPI を直叩きで作りたいのです。

一から ActiveX コントロールを作るための、何かよい資料はないでしょうか?(本やWebページなど)
.NET の普及のせいか、ActiveX 自体なかなか資料が見つかりません。
そもそも、これらを使わずに作るのはほぼ不可能なのでしょうか…。

現在は、MFC や ATL で自動生成されたコードとにらめっこしながらちまちま作っているのですが
どうにも層が深く、苦戦しております。
よろしくお願いします。
389デフォルトの名無しさん:2007/11/25(日) 23:42:55
390薄汚い派遣の国、日本:2007/12/27(木) 03:43:01
最近、職場で「出戻り寄生派遣」という言葉が囁かれています。
派遣契約を切られたにもかかわらず「次の派遣先でも切られてしまって生活できません」
などと 言って泣き落としで現場マネージャーにすら一切話がないまま再派遣契約した人のことです。
今月初め、半年前に切った派遣が出社してきてマネージャーも含めみんなびっくりしました。
影でコソコソ偉い人に泣きついて再契約したそうです。同じ部署の人には黙って・・・
そんなことまでして自宅の近くの派遣先にこだわって人間として恥ずかしくないのですか。

仕事に必要な技術がなく勉強する気もないのを逆手にとって
「私のような人の視点で仕事をすることも大切だと思います」と挨拶された時には
みんな凍りついていました。派遣でスキルアップとか言ってる癖に以前と同じように
技術を勉強する気はなく「それは私の仕事ではありません」の一点張り、
派遣で収入アップとか言ってる癖に時給は前回と同じで喜んで再契約。
結局、なんの努力もせずに派遣で安直に収入を得たいだけじゃないですか。

身分不相応な商品のローンを払うために派遣だと当然足りない収入は親にも寄生して、
いつ切られるんじゃないかとビクビクしながら人事権のある人間とだけ仲良くし、
契約終了を通知されれば泣き落とし。悲惨な人生ですね。
氏んだほうがいいんじゃないですか。
391デフォルトの名無しさん:2007/12/27(木) 03:51:28
TesTV⇒テスTV⇒超最新版テスト用TV <デバッグ中のTV>
http://testv.atspace.com/?S&1912501&166?V&v1649107HtgCy45f&278+V&vocaloid2?S&1928546&28@HiSpeedVisionStageOnAirTV
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で別ドメイン参照しているフレームなのでアクセスできないってことかな?
(同一ドメインだとアクセスできることは確認した)

なんとかフレームの中身を知る方法ないですかね?
399デフォルトの名無しさん:2008/01/23(水) 02:07:12
フレームを別に開く
400デフォルトの名無しさん:2008/02/10(日) 01:01:29
ODLはマイクロソフトの作ったものではないし、オートメーションはマイクロソフトの開発した技術だと理解しています。
で、属性でoleautomationというのがありますが、このようなキーワードがあると、まるで、ODLがオートメーションを想定し、
COMの一部としてオートメーションをサポートしているかのような印象を持ってしまいます。
でも、これはマイクロソフトが拡張した属性なのですよね??
COMは初心者で最初にやるのがマイクロソフトのプラットフォームなので良く分からず、変なことを聞いてるかもしれませんが。


401デフォルトの名無しさん:2008/02/10(日) 05:36:01
>>400
odlとはまた古いものを・・・
MSはCORBAの初期メンバーだったんだけど、
あまりに策定が遅いんでたもとを別れ独自のOLE2/COMへ進路をとることになった。
その関係でCOMとCORBAで共通の概念やキーワードを使ってる事がある。
まあそのくらいの関係なので基本的にMS独自と考えるべき。
402デフォルトの名無しさん:2008/02/10(日) 18:25:29
>>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オブジェクトの開発者がインスタンス作成手段を提供するのが一般的ですか?
404デフォルトの名無しさん:2008/02/16(土) 15:08:23
IClassFactoryの取得は、インプロセスサーバの場合、
DLLから公開されているDllGetClassObject関数を使う。
アウトプロセス鯖の場合はまた別だけど今は省略。

こいつからクラスファクトリを得るため、
IClassFactoryを実装したオブジェクトを公開する必要はない。
だからOleViewで探したって見付からないのも不思議ではない。
405デフォルトの名無しさん:2008/02/16(土) 15:10:17
>>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はそうすることで呼ぶ事はできないのでしょうか?

407デフォルトの名無しさん:2008/02/17(日) 04:35:58
>>406
望みの回答になっているかどうか分からないけど。

IDispatchインタフェースを提供しない Obj1 というオブジェクトがあって foo() というメソッドを持ち、
IDispatchインタフェースを提供する Obj2 というオブジェクトがあって bar() というメソッドを持つとき、

Obj2 では名前 "bar" をキーにしてメソッド bar() を呼び出すことができる(名前をID変換してから Invoke)が、
Obj1 では名前 "foo" をキーにしてメソッド foo() を呼び出すことはできない。

あくまで、自分のオブジェクトだけに関係するので、
Obj2がIDispatchインタフェースを持っているからといって Obj1 に対して何か(名前のID変換とかInvokeとか)できるということはない。
408名無し募集中。。。:2008/02/17(日) 07:48:25
DDEの質問はこのスレでいいですか?
409デフォルトの名無しさん:2008/02/17(日) 09:52:43
流石にそれは普通のWin32 APIスレで聞いたほうがいいと思う。
410デフォルトの名無しさん:2008/02/17(日) 12:54:04
>>407
ということは、あるオブジェクトがIDispatchを公開していれば、そのオブジェクトの他のインタフェースのメソッドも
文字列で呼び出せるってコトでしょうか?
411デフォルトの名無しさん:2008/02/17(日) 14:03:19
>>410
IDispatch派生インターフェイスを実装・公開していて、ほかのメンバにDISPIDが振ってあって、デュアルインターフェイスならOKじゃね?
場合によってはただのディスプインターフェイスだとほかのカスタムインターフェイスのメソッドに関連づいてないことはあるかもしれない。
412デフォルトの名無しさん:2008/02/17(日) 15:30:26
>>411
IDispatch派生インタフェース以外の、(同じオブジェクト上の)インタフェース上のメソッドも、DISPIDを振ることが出来るんですね。
すると、IDispatchだけを要求すれば、その他のインタフェースは要求しなくともその他のインタフェース上のメソッドが利用できると。
ついでにお聞きすると、デュアルインタフェースである必要があるのですか?

ところでIDispatchの仕組み(つまりオートメーション)とは単にVBやJavaScriptがCOMにアクセスするために用意された仕組みなのかな?
(C++だとvtblでアクセスできるし、好きなインタフェースをQueryInterfaceで要求できるし。
しかもVBの場合、内部でCoCreateInstanceを呼び出しを行い、その時に要求するインタフェースがIDispatchらしいし。
まさにVBの為にあるような印象。。)

413デフォルトの名無しさん:2008/02/17(日) 16:23:20
>>412
ごめん勘違いするようなこと書いた。
DISPIDはディスプインターフェイスかデュアルインターフェイスにしかつけられないはず。カスタムはだめ。
カスタムインターフェイスのメソッドが使いたいなら、ディスプインターフェイスやデュアルインターフェイスから間接的に呼ぶ必要がある、と思う。

オートメーションの考え方はスクリプト言語向けと考えていいと思うよ。
414デフォルトの名無しさん:2008/02/17(日) 17:13:13
>>413
ああ、なるほど、良く分かりました。
いろいろありがとうございます。

415デフォルトの名無しさん:2008/02/18(月) 13:19:49
>>412
idispatchは、まさにこのスレタイどおりオートメーションのための機能だよ
416302:2008/02/22(金) 16:34:45
ATLでActiveX コントロールの開発をしています。
ブラウザにてembedタグで埋め込んでおり、
そのとき "src"属性を使ってファイル名を渡していますが
そのパス名の命名則がよくわかりません。
たとえば、
"file://aaa/bbb"だとネットワーク上の"\\aaa\bbb"を表し、
"file:///c:/aaa/bbb.ccc"だとローカルの"c:\aaa\bbb"を表しているようですが
このへんのルールを調べるためのポインタをどなたか教えていただけないでしょうか?
417416:2008/02/22(金) 16:36:52
すみません、一部間違いがありました。

(誤) "file:///c:/aaa/bbb.ccc"だとローカルの"c:\aaa\bbb"を表しているようですが
(正) "file:///c:/aaa/bbb"だとローカルの"c:\aaa\bbb"を表しているようですが
418デフォルトの名無しさん:2008/02/25(月) 16:42:14
VISTAでのUACに関する質問です。
VC++2008で、ブラウザ(IE)から実行するMFC ActiveX(ocx)の開発をしています。
OCXでレジストリやファイルを操作したいので管理者権限で実行したいんですが
MANIFESTUACにrequireAdministratorを設定してリソースにマニフェストを埋め込んで
いるにもかかわらず、実行時に権限昇格のダイアログが出ません。
当然ですが、レジストリにアクセスする際にエラーが返ってきます。

IEを管理者権限で実行するか、UACを切れば問題なく動くのですが、事情がありユーザに
それを要請することができません。
実行ファイルではなくOCXやDLLで権限昇格させることはできないんでしょうか?
419デフォルトの名無しさん:2008/02/25(月) 22:09:45
そりゃ昇格はプロセス単位で行われるから、
例えIEから実行されるOCXでなくとも昇格できないだろうな。

とりあえず、(標準設定の)信頼済みサイトの中では、
保護モードオフだから普通のアプリケーション並の権限は得られる。
420418:2008/02/27(水) 00:45:59
>>419
どもです。やっぱ、ライブラリから昇格要求は無理ですよねぇ。。
仮想化をうまく使ってなんとか対処しようと思います
421デフォルトの名無しさん:2008/02/28(木) 23:39:22
>>420
具体的にどこを弄るのかにもよるけど
レジストリやファイルの読み書きの権限を変えてしまうって手もあるよ。
OSのなら非常識だけどね

422デフォルトの名無しさん:2008/03/02(日) 02:35:13
VC++2005を使ってIE上で動作するプラグインを作っています。

質問ですが、HTML上のJavaScriptから
 var f = function(){window.alert("ALERT");};
 axobject.AddListener(f);
のように任意のタイミングで実行したい関数を
リスナーとして設定する(ActiveXからJavaScriptの関数を実行する)ことはできるのでしょうか?

また、
 axobject.SetData({aaa: 'aaa', bbb: 'bbb'});
のようにJSON形式で渡したデータの中身を得る方法はありますでしょうか?

よろしくおねがいします。
423デフォルトの名無しさん:2008/03/02(日) 13:31:25
叶姉妹
424デフォルトの名無しさん:2008/03/02(日) 13:53:41
>>422
IActiveScriptでググれば、それなりにサンプルとか引っ掛かると思いまつ。
JSONでの受け渡しは無理っぽいような気もするけど、運が良ければ
VARIANT配列で渡ってくれるかも。
425デフォルトの名無しさん:2008/03/02(日) 17:01:23
>>422
JSONつーか、それ単なるJavaScriptのリテラルだから、最悪IDispatchで叩ける気がするが。
426デフォルトの名無しさん:2008/03/02(日) 18:19:41
>>425
kwsk plz
427デフォルトの名無しさん:2008/03/03(月) 01:23:06
VARIANTに入ってるIDispatchのInvokeをDISPATCH_PROPERTYGETで叩けば、とりあえず名前の分かってる値は取得できる。
428デフォルトの名無しさん:2008/03/17(月) 17:01:48
あるActiveXがあって、それをC++で利用したいのですが、
dllで提供されていて、
どのように自分のプログラムとリンクさせて使えばいいのか解りません。

通常、普通ならばヘッダファイルとlibが一緒に提供されてるので
それを使えばリンク可能だと思うのですが、
今回はdll単体しかありません。

こんなことは可能でしょうか?
429デフォルトの名無しさん:2008/03/17(月) 17:23:59
DLLにタイプライブラリが入ってれば、VC++なら
#import "hoge.dll"
とかやればいけたりもする。
430デフォルトの名無しさん:2008/03/17(月) 18:16:08
COMはlibでリンク不要なのが利点
431デフォルトの名無しさん:2008/03/17(月) 18:26:26
432デフォルトの名無しさん:2008/03/17(月) 20:38:53
利点なのか?libが無いとそんなにイイの?
俺はlibの方が埋め込まれたタイプライブラリよりずっといいと思うんだが
433デフォルトの名無しさん:2008/03/17(月) 21:36:29
タイプライブラリを埋める話なんてしてませんが
434デフォルトの名無しさん:2008/03/17(月) 22:52:30
個人的にはDLLをLoadLibraryして関数ポインタ取得するのがベスト
435デフォルトの名無しさん:2008/03/18(火) 04:53:30
dispatch + invoke でほとんど片付くよな
436デフォルトの名無しさん:2008/03/18(火) 20:36:06
質問。
VistaだとIShellFolderViewDual3にFilterViewというのがあって
これに"*.jpg"なんかを設定すると、*.jpgのみが表示されるエクスプローラーコントロールが使えるのだが
これをXPで実装するにはどうしたらいい?
http://msdn2.microsoft.com/en-us/library/bb761289(VS.85).aspx

437デフォルトの名無しさん:2008/03/18(火) 23:21:13
このスレの住人なら知っていますね、あの糞開発ツールのことを

・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている

糞だけど、政治的な理由で無理やり使わされているんですよね。
もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。

・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。
 バグレポートなどしてはいけません。改善要求などもってのほかです。
 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
 なんて話が出たら力強く机を叩き、会議室を出ましょう。
 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。

糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
438デフォルトの名無しさん:2008/03/19(水) 04:59:35
わかんないよ
439デフォルトの名無しさん:2008/03/20(木) 03:35:43
VistaのShell32.dllをコピー
440デフォルトの名無しさん:2008/04/12(土) 23:08:16
>>437
Eclipseのことですね。わかります。
441デフォルトの名無しさん:2008/04/21(月) 11:29:53
IDL の記述ってどこかで標準化されているの?
Microsoft 独自? CORBA なんかでも同じような
役割のファイルを見かけるけど拡張子だけ同じで
中身は異なるものなんでしょうか?
442デフォルトの名無しさん:2008/04/21(月) 18:47:17
>>441
IDLは一般名詞。Interface Definition Language。
OMG IDLはOMGが標準化したCORBA用のIDL。
MIDLはMSがCOMインターフェイスの記述用に作ったIDL。
XPIDLはMozillaで使われるXPCOM用のIDL。

少なくともOMG IDLはSUN-RPCのXDRがベースだった希ガス。
443デフォルトの名無しさん:2008/04/21(月) 19:00:32
>>441
>>401も参考になるかも。
444デフォルトの名無しさん:2008/04/21(月) 19:44:26
なるほど漠然とではあるけど事情がわかった気がする.
普段はMIDLしか使わないけど、最近は COM よりも
.NET が使われるようになってきてるし、一方で
Mozilla 系はまた別の仕掛けを使っているようなんで、
もうちょっと広く見てみることにします。
445デフォルトの名無しさん:2008/04/21(月) 23:07:50
元ネタは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)のイベントを受け取ることは可能でしょうか。
448デフォルトの名無しさん:2008/04/28(月) 22:50:36
>>447
できると思う。
449デフォルトの名無しさん:2008/05/02(金) 22:01:41
僕ハンゲームというゲームをしたいのですが、
そのためにはこれが必要で、調べてみると
「ActiveXの脆弱性」などとよく書いてあります。

どのような症状が、どれくらいの割合で起きるのでしょうか。
潰れて動かなくなったりするのでしょうか?
450デフォルトの名無しさん:2008/05/02(金) 22:48:00
PC初心者板行け。
451デフォルトの名無しさん:2008/05/07(水) 06:43:20
コンテナからDISPID_AMBIENT_SCALEUNITSで得られる文字列って何?
インチの場合は、inch?
どこかのヘッダに標準的なプロパティ値の定義ってないですか?
452デフォルトの名無しさん:2008/05/07(水) 23:25:39
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) );
以上でファイル内にプロパティーデータ領域を作り
プロパティにカスタムタブを作成したのですが、
プログラム上からカスタムタブにデータを書くのってどうしたらいいのでしょうか。
453デフォルトの名無しさん:2008/05/08(木) 23:45:22
>>425
FMTID_UserDefinedPropertiesとIPropertyStorageで。
454デフォルトの名無しさん:2008/05/08(木) 23:45:58
455デフォルトの名無しさん:2008/05/10(土) 11:15:43
<<453
ありがとうございます。
456デフォルトの名無しさん:2008/06/17(火) 19:13:04
javascriptからActiveXのメソッドを呼んで、
そのメソッド内で呼び元のIWebBrowser2インタフェースを取得する方法ってありますか?
あったらその方法を教えてください。
ググったんですけどわかりませんでした。
457デフォルトの名無しさん:2008/06/30(月) 17:41:45
javascriptでNew ActiveX Objectを使ってテキストファイルを操作するスクリプトを作成したんですけど、
オフラインでは動くんですけど、オンラインでは全く動きませんorz
どなたか、詳細がわかる人がいたら教えてください。
458デフォルトの名無しさん:2008/06/30(月) 17:47:42
>>467
セキュリティ上仕方ないのでは
459デフォルトの名無しさん:2008/06/30(月) 17:47:47
IEの設定はどうなってます?
460デフォルトの名無しさん:2008/06/30(月) 17:52:36
>>456
IWebBrowser2でぐぐったら山ほどサンプルが出てきたが
461デフォルトの名無しさん:2008/06/30(月) 17:53:18
>>458
僕へのレスでいいんですよね?

やっぱりセキュリティ上の問題でできないんですかね。
インターネットオプションで
「スクリプトを実行しても安全だとマークされていないActiveXコントロールの初期化とスクリプトの実行」を有効にすれば、オンラインでも使えるんすけど、安全マークの付け方がわからないんすよね…。
462デフォルトの名無しさん:2008/06/30(月) 17:56:36
安全マークなら
http://support.microsoft.com/kb/161873/ja
のとおりやればつけれるよ
463デフォルトの名無しさん:2008/06/30(月) 17:58:53
>>462
ありがとうございます!
早速やってみます!!
464デフォルトの名無しさん:2008/07/01(火) 00:27:39
MSペイントのオートメーションオブジェクトって
無いのでしょうか。
jpeg を開いて tiff で保存したい。
sendkey は泥臭いし。
465デフォルトの名無しさん:2008/07/01(火) 07:22:09
OpenCV使えばいいんじゃね
466デフォルトの名無しさん:2008/07/01(火) 08:47:33
GDI+使えばいいんじゃね
467デフォルトの名無しさん:2008/07/02(水) 00:41:25
ありがとう
468デフォルトの名無しさん:2008/07/04(金) 00:02:40
とは言うものの、会社のきまりで
妙なものはインストールできないんです。
「すでにあるもの」を使いたい、というわけでして
469デフォルトの名無しさん:2008/07/04(金) 00:26:21
GDI+はDLL一個をアプリと同じフォルダに置くだけで使える。
つか、Windowsフォルダ以下に置くのはMSが推奨してなかったと思うが。
470デフォルトの名無しさん:2008/07/04(金) 06:03:41
>MSペイントのオートメーションオブジェクト
ないようだね。

>GDI+
GDI+ならXPからデフォで入ってるし、MS謹製だから妙なものではない。
471デフォルトの名無しさん:2008/07/04(金) 23:12:23
ありがとう。
しみじみとうれしい
472マイク ◆yrBrqfF1Ew :2008/07/19(土) 07:14:06
  _   ∩
( ゚∀゚)彡 Automation! Automation!!
 ⊂彡
473デフォルトの名無しさん:2008/08/01(金) 11:40:29
自分が呼ばれた OBJECT タグの codebase の値って取れる?
474デフォルトの名無しさん:2008/08/05(火) 00:20:52
てすと
475デフォルトの名無しさん:2008/08/21(木) 22:26:38
>>120, >>148
アップロードしている物を見たかった…。
WSHでExcelのイベントをフックしたいのですが可能なのでしょうか?
476デフォルトの名無しさん:2008/08/22(金) 14:37:40
可能
WScript.CreateObject("Excel.Application","Excel_")
or
WScript.ConnectObject(Application,"Excel_")
477475:2008/08/22(金) 16:37:10
>>476
通常のオブジェクトはその方法、もしくは WSF で <object> タグでevents="true" とすることでイベント接続できるのは確認しています。
しかし Excel だとうまくいきません。
>>120 >>148 さんの仰っていたことも、そういうこと(通常の方法ではイベント接続できない)だと思うのですが…。
478デフォルトの名無しさん:2008/08/23(土) 00:28:22
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に対してオートメーションでやりたい操作があってもできません。
480デフォルトの名無しさん:2008/08/29(金) 00:35:58
一応、本家本元はここだけど。
http://msdn.microsoft.com/en-us/library/aa752127.aspx
481デフォルトの名無しさん:2008/08/29(金) 13:50:14
>
482デフォルトの名無しさん:2008/08/29(金) 13:51:12
>480
ありがとうございます。
表示させたホームページの文章をコピーするのはどうやるのですか?メソッドがありません…。
483デフォルトの名無しさん:2008/08/29(金) 18:28:04
最初パソコンを起動して立ち上げたときに
-2147024770:オートメーション エラーです。
指定されたモジュールが見つかりません。
と出てきます。
消しても数秒ごとにでてきてかなわない状態です。
一回ログオフして入ると出てはこないんですが。
どうしたら消えるんでしょうか?
悩んでいます。
484デフォルトの名無しさん:2008/08/29(金) 19:30:17
>>482
DocumentプロパティでHTML DOMが得られるから、煮るなり焼くなり好きにしろ。
485デフォルトの名無しさん:2008/08/29(金) 21:23:16
>>483
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1017432910
似たようなことが書いてあるけどちがう?
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 とだけ出力されます。
まさかと思いますが、関数テキストの出力はできないのでしょうか?
わかる方がおられましたら、回避策など教えていただけないでしょうか。
487デフォルトの名無しさん:2008/08/30(土) 12:01:56
普通式を設定するときは「Value」じゃなくて「Formula」に設定するんじゃないの?
488デフォルトの名無しさん:2008/08/30(土) 16:07:57
Formulaでも駄目でしたが、=を入れていたからかもしれません。
言われてみれば、Formulaってメンバがあるのだからこれを使えばできそうですね。
家には環境がないので、週明けに試してみます。
489デフォルトの名無しさん:2008/08/30(土) 18:10:46
>>485
解決しました〜
なんかスパイウェアのせいでなってたみたいで駆除した
後やってみると、みごとにパーフェクトでした。
490デフォルトの名無しさん:2008/12/13(土) 01:44:03
質問です。

今WSHでやっている処理のうち、あまりにも重い一部の処理を
ネイティブコードに移そうと考えています。
そのために、そのコードとのインターフェースを取るため、
これをCOMコンポーネント?にしたいのですが…

目的としては、単に処理をバイナリに移譲するだけなので、
filesystemオブジェクトのように不可視なものでよく、
単に数個の関数と、コールバックによるイベント処理と、
例外発生処理だけを実装したいのです。

なんか、良い資料とか、本とかないでしょうか?

教えてください偉い人。
491デフォルトの名無しさん:2008/12/13(土) 13:15:52
492デフォルトの名無しさん:2008/12/17(水) 01:17:39
>>491
どうも、
おかげで、jscriptから自作オブジェクトの関数が実行できました。

ただ、まだ自作オブジェクトからjscriptのメソッドをコールバックで
実行する方法がわかりません。
なにかヒントになるような情報を教えてください偉い人・・・
ちなみに、VC++.net 2003?使ってます…
493490=492:2008/12/17(水) 01:18:26
一応質問なんでageときます・・・
494デフォルトの名無しさん:2008/12/17(水) 02:04:58
jscriptのオブジェクトもIDispatchインターフェースを公開しているCOMだよ。
495 【大吉】 :2009/01/01(木) 18:58:30
>479 さんの質問と関連してるかもしれませんが
オブジェクトが持っているプロパティやメソッドを
一覧で取得するメソッドというものはあるのでしょうか?
496デフォルトの名無しさん:2009/01/01(木) 19:21:05
497デフォルトの名無しさん:2009/01/02(金) 21:04:37
>>495
昔、会社の後輩がVBScriptかVBAかを使ってやってたんだけど、やり方を聞くのを忘れてた…。
>>496ではRubyのCOMラッパを使ってるのかな。
498デフォルトの名無しさん:2009/01/03(土) 13:07:39
>>496-497
ありがとうございます
でも結局判りませんでした
ひきちぎりおねがいします
499497:2009/01/03(土) 14:21:54
>>498
>ひきちぎり
-> ひきつづき?
「タイプライブラリ」「取得」でググってみると、いくつかサイトが引っ掛かったんで
この辺を調べてみては?
ttp://homepage1.nifty.com/MADIA/vb/vb_bbs/200606/200606_06060024.html
ttp://homepage1.nifty.com/MADIA/vb/vb_bbs/200605/200605_06050064.html
ttp://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200205/02050070.txt
TLBINF32.DLLを使えば何とかなりそうだけど、逆に詳細が分かったら教えて欲しいかも…。
500デフォルトの名無しさん:2009/01/03(土) 16:46:16
ありがとうございます
なんとかなりそうです
うまくいったらご報告します
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
502デフォルトの名無しさん:2009/01/03(土) 22:05:32
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
503デフォルトの名無しさん:2009/01/03(土) 22:18:50
504デフォルトの名無しさん:2009/01/03(土) 23:14:39
505デフォルトの名無しさん:2009/01/04(日) 00:18:54
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
506デフォルトの名無しさん:2009/01/04(日) 00:19:35
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
507デフォルトの名無しさん:2009/01/04(日) 09:31:02
>>501-506
いただきました
ありがとうございます
508デフォルトの名無しさん:2009/02/09(月) 04:54:31
kaso
509デフォルトの名無しさん:2009/02/09(月) 16:15:46
chinko
510デフォルトの名無しさん:2009/06/19(金) 23:03:45
ActiveXコントロールからAfxThrowOleDispatchExceptionで、
VB6.0のフォームに例外を通知したとき、

オートメーションエラーのエラーコードとエラーディスクリプションになってしまうのですが、
AfxThrowOleDispatchExceptionのパラメータで設定した
エラーコード、エラーの説明は、どのようにしたら参照できるのでしょうか?

どなたかご存知の方教えて下さい。
511デフォルトの名無しさん:2009/06/22(月) 22:31:31
Visual Studio 2008のMFCでダイアログにHTML表示させたいので、
ActiveXのMicrosoft web browser貼り付けて、メンバ変数にして
Navigateしました。

ここまではちゃんと表示されてOKです。

次に、ブラウザ上で右クリで出るポップアップを出せないように
しようと思って、メンバ変数にしたやつのウインドウプロシージャーを

取り替えて(サブクラス化)WM_RBUTTONUPを捕まえようとしたのですが、
WM_RBUTTONUPが何故か来ません(他のメッセージ(WM_SIZEとか)は来ます)

当然、右クリするとポップが表示されてしまいます。

何かご存知の方いませんか?
512デフォルトの名無しさん:2009/06/23(火) 00:12:56
なんでもかんでもサブクラス化で解決しようとするな。
IDocHostUIHandler::ShowContextMenuつーのがちゃんと用意されとるわ
513511:2009/06/23(火) 16:42:03
ナイスなヒントに多謝!
514デフォルトの名無しさん:2009/06/29(月) 14:03:25
ActiveXコントロールにドラッグ&ドロップして、ドロップされたファイルを処理したいのですが、
htmlに貼り付けてブラウザでそこにドロップすると、ブラウザ側にドロップされちゃうのです。
とりあえず画像ファイルをコントロールに表示する予定なのですが、jpgとかを落とすと、
それがブラウザにドロップした事になって表示されちゃいます。
WM_DROPFILESのハンドラも、DragAcceptFiles()も立てています。
コントロールにドロップされるようにするにはどうすれば良いでしょうか?
515デフォルトの名無しさん:2009/06/30(火) 00:49:23
HTAにしたら?
516デフォルトの名無しさん:2009/06/30(火) 09:55:32
ありがとうございます。
HTAにしても同じでした..orz

517デフォルトの名無しさん:2009/06/30(火) 15:15:10
.RegisterAsDropTarget=False
518デフォルトの名無しさん:2009/07/01(水) 19:04:43
>>517
ありがとうございます。
調べてみます。
519デフォルトの名無しさん:2009/07/22(水) 13:35:30
>>518
できた?
520デフォルトの名無しさん:2009/07/28(火) 15:04:52
ActiveXでCoCreateInstanceで作成したインスタンスを
使ってWebの画面を画像化しようとしているのですが
IEを2つ起動している状態で2個目のIEでCoCreateInstanceをすると
なぜか1個目のIEに対してインスタンスを生成している様で
上手くいきませんどなたかこんな現象をご存知の方がいればお教えください。
521デフォルトの名無しさん:2009/07/31(金) 23:49:15
JavaScriptでScripting.FileSystemObjectを生成しようとすると
モジュールが見つかりません。
と出るのってどうしたら直るんですか?
522デフォルトの名無しさん:2009/08/01(土) 00:14:33
モジュールを入れる
523521:2009/08/02(日) 21:34:53
>>522
その方法が検索してもどうしても見つからないんです・・
524デフォルトの名無しさん:2009/08/03(月) 14:19:35
c:\windows\system32\scrrun.dll
525521:2009/08/03(月) 15:12:25
>>524
どうやって入れるのか?と思いましたがとりあえずregsvr32してみました。
そしたらエラー出なくなりました!ありがとうございました
526516:2009/08/04(火) 17:02:04
>>519
すまんす、レスが遅れて。
まで出来てないです。
RegisterAsDropTarget=False ってのは、IEのコントロールか何かの設定ですか?
今作っているActiveXを、htmlの<object>タグでCLSID指定してやって動かしてます。
それで自作のActiveXにドラッグ&ドロップしたいのですが、ブラウザ側にドロップされちゃいます。
527デフォルトの名無しさん:2009/08/05(水) 13:30:14
>>526
IDropTargetを実装してRegisterDragDrop()を呼ぶ。

ファイル名が取れればいいだけだからこんな素の方法は嫌だ
ってことかもしれんが、まぁ一方法として。
528デフォルトの名無しさん:2009/08/05(水) 14:52:27
>>526
http://www5.plala.or.jp/atata/com/chap7.html
これをまんま埋め込んだらできたよ
529デフォルトの名無しさん:2009/08/10(月) 01:26:57
ActiveXって現役の技術なの?古いイメージがあるんだけど、代替技術は存在しない?

今までMS系の技術なんて見向きもしなかったんだけど、
今度、VB6.0で動いていたアプリをIE向けのWebアプリに作り替えることになって、
ActiveXコントロールに替わる技術なんてあるんだっけ?と思って質問してみました。
ちなみに既存のVB6アプリでどんなActiveXコンポーネントを使っているのかはまだ不明。
判明するのは3か月以上先。

そもそもActiveXがよくわかっていなくて、
ActiveXの書籍は古いものばっかりだし、この技術ってレガシーコンポーネントを再利用するとき以外で用途あるの?
ローカルリソースを扱うなら必須の技術?

まぁ、先手を打って、勉強しておきたいっていうだけ。
530デフォルトの名無しさん:2009/08/10(月) 04:20:33
まだまだ現役なんじゃない?
代替技術もないんじゃない?
目的達成のための別の技術があるというだけで。
531デフォルトの名無しさん:2009/08/10(月) 15:44:45
FlashもActiveXコンポーネントだよね?
532デフォルトの名無しさん:2009/08/10(月) 17:31:32
許されるのは、FlashとAcroabat Readerのみ。
他はウィルス扱いw
533デフォルトの名無しさん:2009/08/12(水) 13:33:59
>>526
できた?
534デフォルトの名無しさん:2009/08/14(金) 02:04:44
>>530
なるほど
結局は、どんな手段で目的を解決するか、ですね。
選択の幅は広い方がいいんで、勉強してみる
Windowsの仕組みを知るいい機会だし
535this.is.a.tor.exit.router.www.torproject.org:2009/08/17(月) 17:39:59
Q. 自動保守#K9K?_D[L とは一体何なのか?
A. 外部サイトへの突撃大好きな真性厨房

韓国突撃でお馴染みの自動保守
最近は自動焼人 ★として2ちゃんねるのボランティアにも精を出す日々
だがそんな彼にも、人間らしい部分はあったのだ…

名言集
『アパッチ砲はワシが作った』
『お前が規制系キャップ取れるか審査してやるよ』
『いつもサボってばかりのキャップがウゼえ』
『俺、100人規模の集団サイバーテロの主犯だったこともあるんだぜ』
『俺の経歴カックイイだろ?』

最近のニュース
 8月15日の韓国突撃の際に歴史的大敗を喫する。ラジオでの敗戦宣言のときに声が震えていた
 本人は体調不良と言っているが…


----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/
にて自動焼人 ★までご連絡ください
536デフォルトの名無しさん:2009/08/20(木) 13:45:04
ちょっと質問いいかな?
VC++6.0でMFC ActiveX ControlWizardを開くと
最初に、プロジェクトに含まれるコントロールの数を聞かれるよね?
ここでコントロール数を2個にして作成するActiveXコントロールと同等のものを
.net2005で作成できる?
ActiveX今まで殆ど触った事なくて、どんな語から調べていけばいいのかわからない状態なんだ…
537デフォルトの名無しさん:2009/11/24(火) 18:22:43
OCXをCABファイルからインストールさせているのですが
64bitのIEでは、失敗します。
64bit用のINFファイルの書き方とかあるのでしょうか?
538デフォルトの名無しさん:2009/11/26(木) 20:57:47
>>537
問題ない。誰も64ビット版IEなんて使っていないから気にするな。
ところで、そのOCXは64ビットで作っている?
539デフォルトの名無しさん:2009/11/27(金) 14:58:43
OCXは64ビットで作っていません
だからダメなんでしょうか?

64ビットで作って試してみます。
540デフォルトの名無しさん:2009/12/02(水) 20:44:11
C#でOfficeオートメーションを使う仕事を割り振られたのですが、
ネットにあまり情報が落ちてないので、どこから勉強していいか解りません。

何か良い書籍があったら教えてください。
541デフォルトの名無しさん:2009/12/02(水) 21:27:23
オフィスオートメーション 【OA】

オフィスオートメーションとは、コピー機やFAX、コンピュータなどの情報機器を用いて、事務作業を効率化すること。


>>540
残念、微妙にスレ違いのようだ。
542デフォルトの名無しさん:2009/12/02(水) 21:50:55
>>540-541
OfficeとはMicrosoft Officeのことで、WordとかExcelの操作かもしれないではないか。
もし、そうだったらまずはVisual Studio Tools for Office関係を調べればいいと思う。
543デフォルトの名無しさん:2010/01/08(金) 09:55:39
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
545デフォルトの名無しさん:2010/03/01(月) 09:42:17
CでIEを利用して作っているウェブブラウザで
ブラウザのダブルクリック時の挙動を変えたいんですが
IHTMLDocument2のポインタを取得して
put_ondblclickで自前の関数を登録しようとして
ここで渡す自前の関数はどう宣言して渡せばいいんでしょうか?
546デフォルトの名無しさん:2010/03/17(水) 10:34:20
>>537-539
だいぶ前の話で恐縮ですが
64bitのOCXを作れば、64bit版IEでも動作しました。
ありがとうございます。
547デフォルトの名無しさん:2010/03/17(水) 18:48:26
C++で ActiveXコントロールを作成しています。
また、この ActiveX内から
DLL(VB.NET)の関数を呼んだりしています。

ここで質問なのですが
VB で RaiseEventしたイベントを、
C++の方で捕まえる方法はありますか?
548デフォルトの名無しさん:2010/07/12(月) 10:56:40
MFCでActiveXコントロールを作って、
ウィザードでプロパティを追加して、
PX_Hogeを追加して、
IEから<OBJECT><PARAM 〜></object>で読み込ませると・・・

PX_Hogeで指定した変数には値が設定されるんだが、
ウィザードで生成された関数は呼び出されない。
これってこういうもの? ちなみにMSVC2005。
549548:2010/07/12(月) 11:31:04
とりあえず解決した。
IPersistPropertyBag経由ではDoPropExchangeしか呼ばれない、
メソッド経由で呼ばれたときはウィザードが生成した関数しか呼ばれない、
でいいのかな。

仕方ないんで、DoPropExchangeの中で、pPX->IsLoding()だったら、
ウィザードが生成したOn〜Changedをごにょごにょと呼ぶことにした。
これが普通なのかしらん?
550デフォルトの名無しさん
ふぅ