2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2006/01/21(土) 00:32:19
オートメーションって情報少ないからみんなで情報交換しよ><

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いいんじゃない?

12 :9: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が変えるのも確認しましたが・・・

17 :8: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でも
問題ないようにした人いる?

34 :31:2006/02/20(月) 12:14:59
>>32
ありがとうございます。infファイルの記述がおかしいのかなと思い、
infファイルを右クリック、インストールをすると目的のディレクトリに
ファイルがコピーされました。という事はhtmlだと思い、CLASSID等を
見直し、再作成を行いましたが、やはり問題解決には至りませんでした。
そして上記方法で分かった事が一つあります。infファイルから直接
インストールした後では、cabからのインストールは必要が無いので
codebaseを除いたhtmlでも実行できるはずだと思い、htmlを開いてみると
インストールしたファイルが消えてしまうのです。
開発したマシンではそのような動作はせず、他のマシンで行った時のみ
発生しました。この症状から何か原因わかりますでしょうか。

35 :デフォルトの名無しさん:2006/02/21(火) 01:22:50
inf晒しきぼん

36 :31: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

情報が少なくて申し訳ないのですが、何か分かる事があれば教えて下さい。

37 :31: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上でのイベントに追随する事はできているのですが、
本当のイベントをフックすることができないのです。

47 :http://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$は優れたドトネトを使わないから大丈夫。



68 :62:2006/04/18(火) 23:00:15
>>67
Office12(2007)って、.NETベースじゃないんですか?
リボンとか妙に(変に)凝ってるので、てっきり.NETベースだと思ってたんですが。

69 :デフォルトの名無しさん:2006/04/25(火) 23:19:14
C#からWordを操作したいと思っていろいろ試してます。
Rangeオブジェクトを使って find.Execute()して
文字列を検索したのですが、
見つけた文字列のページ番号や行番号を得る方法がわかりません。
どうすれば良いでしょうか?



70 :デフォルトの名無しさん:2006/04/26(水) 00:21:51
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
さすがエバンゲリオン役立たず

74 :71: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でデータを取り込めますか?


84 :75: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でフリースレッド何たらとか使ってる人ってどれくらいいるんだろ?

86 :83:2006/05/14(日) 21:09:23
Excelマクロフォームに、MSFlexGridコントロールのMSFlexGrid1と、
CommandButton1を貼り付け、
実行し、CommandButton1を押すと・・・
Private Sub CommandButton1_Click()
Dim con As New ADODB.Connection,RS As New ADODB.Recordset
Dim str As String,str2 As String
str = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & ";" & _
"Extended Properties=TEXT;"
con.ConnectionString = str
con.Open
str2 = "Select * From Test.csv"
RS.Open str2, con '実行時ココでエラー
Set MSFlexGrid1.DataSource = RS
RS.Close
CN.Close
End Sub

実行時エラー'91':
オブジェクト変数またはWithブロック変数が設定されていません。
とでます。どうすればエラーを取り除くことができますか?

87 :86:2006/05/14(日) 21:11:29
書き忘れたのですが、Test.csvはこのExcelブックと同じディレクトリにあります。

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
あぁ、シンク忘れてた。
それならできるね。

96 :91: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 :デフォルトの名無しさん:2006/06/04(日) 12:33:52
>>46 >>55
ちょっとやってみた。

こういう.JS(WSH)は完全に動く。

Excel = new ActiveXObject("Excel.Application");
FSO = new ActiveXObject("Scripting.FileSystemObject");
Folder = FSO.GetFolder("C:\\");
WScript.Echo(Folder.Files.Count);
Excel.InputBox("Hello");

こういう.HTMはFSOしか動かない。

<HTML>
<BODY>
<!-- Excel.Application --><OBJECT ID="Excel" CLASSID="CLSID:00024500-0000-0000-C000-000000000046"></OBJECT>
<!-- Scripting.FileSystemObject --><OBJECT ID="FSO" CLASSID="CLSID:0D43FE01-F093-11CF-8940-00A0C9054228"></OBJECT>
<SCRIPT><!--
Folder = FSO.GetFolder("C:\\");
alert(Folder.Files.Count);
Excel.InputBox("Hello");
//--></SCRIPT>
</BODY>
</HTML>

(ただし「インターネットオプション」のセキュリティ設定で「マイコンピュータゾーン」の「安全とマークされていないActiveXコントロール」を有効かダイアログ表示にしていないといけない。)

で、なぜFSOしか動かないか。

レジストリをいじって「HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\InprocHandler32」キーを「_InprocHandler32」に変えたら動く。
(変えたらちゃんと元に戻しておいてね)

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よく知らないんだけど・・・
多分、イベントを代理で受け取って、同じ名前のイベントを発行する、って意味だと思うんだけど、合言葉っぽくなってるのはなぜ?
有名なセリフなの?

109 :94:2006/06/04(日) 19:37:30
>>108
ごめん、前の会社の上司がふざけてよく「ファイアー!」って言ってたんで、
オイラもちょっと使ってみたくなって…。
ATLのイベント取得マクロがXXX_SINK_MAP、イベント発行(生成コード)関数が
Fire_XXXとなるので、シンクしてファイアーでも何となく通じるのかも…。

110 :デフォルトの名無しさん:2006/06/04(日) 19:57:53
You’re fired って言われたんだろ

111 :109:2006/06/05(月) 21:47:39
>>110
"君は首だ!"なんて言われてないっすよ。
なんか、ATL好きの人だった…。質問する度に
ATLのすばらしさを説かれてた…。
最近、.NETやらVistaやらで、COM作ってたベンダーって
どうなってくんだろう?

112 :デフォルトの名無しさん:2006/06/05(月) 23:47:22
.netとかが主流になっていくだけで、COM事態は消えないでしょ。
いまだに16bitAPI残してるMicrosoftがそう簡単にCOM捨てるわけないよ。


113 :111: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
普通にワークシートを作成するだけなら引数指定なしでいいと思う。

117 :114: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

126 :114:2006/06/13(火) 00:51:02
114です
>>ExcelのオートメーションをMFC(VC6)でやってます
>で、この書き込みを見るとうっすら同じような誤解を感じるのだが・・・気のせいか?

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

でも頭の中のイメージでは
「アプリの手動操作の代わりもできるオブジェクト(インターフェース?)」
ですね。確かに

127 :121:2006/06/15(木) 22:38:00
>>122
あれからいろいろ調べてAcitve Documentのサンプルも試してみた。
htmlの中にembededされたActiveDocumentを開くのではなく、
Active DocumentをBHOからプログラムで開きたいのだが、
どうすれば良いのかわからない・・・

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
>>129
これじゃダメ?

http://winscript.s41.xrea.com/upload/source/No_0012.lzh


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は呼ばれるんですが。
心当たりある人いますか?

155 :154: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 とかのデータバインド用に
カスタムデータソースオブジェクトを作るための
情報って何を見ればいいか知ってる方いらっしゃいますか?

175 :174:2006/07/22(土) 00:46:42
具体的には、javascript でローカルの .mdb を処理する
データソース準拠のオブジェクト作って、それをテーブルに
バインドできたら嬉しいな、とか思ってますけど、
やっぱCOMコンポーネントを作らないとだめだろうなあと
予想はしてます。

なんとか英文のリファレンス的のものくらいは見つけたんですけど、
チュートリアルとかもないようだしどうしていいやら…。

176 :デフォルトの名無しさん:2006/07/22(土) 10:12:02
ActiveXコントロールを作ったんですが、
HTMLのobjectタグでIE上に、このコントロールを表示したとき、
コントロール側からIWebBrowser2を得る方法ってありますか?

177 :176:2006/07/22(土) 11:27:38
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
は引数の話だからプロパティでも同じ

186 :183:2006/08/01(火) 00:52:41
>>184さん、>>185さん
"プロパティでも同じ"というところがよくわかりません。 ソースを載せるので見てもらっても良いですか??
VB側でActiveXに配列の参照渡しをして、 ActiveXでセットした値をVB側で取得します。
処理は以下のとおりで、 VB.6.0ではうまく値を取得できるのですがVB.Netでは出来ません。
ここでByVal/ByRefを使うと言う事は配列の宣言時に使うと言う事ですか?? BASIC初心者の質問で申し訳ないですが教えてください。

VC6.0で作成したプロパティの処理
int *InfAddr;
void CXCtrl::SetInfAddrV(const VARIANT FAR& newValue)
{
long *ip;
SAFEARRAY *psa;
psa=newValue.parray;
SafeArrayAccessData(psa, (void **)&ip);
InfAddr=(int *)ip;
SafeArrayUnaccessData(psa);
//以降でInfAddrに値をセットする
} //..................

VB6.0側の処理
Dim InfTbl As Variant
Dim InfDat(140) As Integer
InfTbl = InfDat()
X1.InfAddrV = InfTbl '配列InfDat()を参照するとActiveXでセットされた値が入っている!

VB.Netの処理(VB6.0のプロジェクトを変換)
Dim InfTbl As Object
Dim InfDat(140) As Integer
InfTbl = VB6.CopyArray(InfDat)
X1.InfAddrV = InfTbl '配列InfDat()を参照するとVCでセットされた値が入っていない!


187 :デフォルトの名無しさん:2006/08/01(火) 03:51:43
Integerって

188 :デフォルトの名無しさん:2006/08/01(火) 04:01:44
CopyArrayって字の如く配列をコピーしているのでは?
VB .NETはよく知らないけど、InfTbl = InfDatなどとしたらどうだろうか。

189 :183:2006/08/02(水) 00:48:37
>>185さん
それもやってみたんですがダメでした。
ActiveXがVariantなのにObjectで渡しているのが原因と思っているのですが、
VB.Net側での回避策ってないのでしょうか?

>>187さん
Integerだと何か良くないですか??


190 :デフォルトの名無しさん:2006/08/02(水) 02:39:46
Marshal

191 :183:2006/08/03(木) 00:15:46
>>190さん
Marshal.GetObjectsForNativeVariantsメソッドを使うってことですか??
詳しく教えてください。

192 :デフォルトの名無しさん:2006/08/03(木) 00:40:24
ちなみにX1.InfAddrV = InfDatだとどなる?

193 :183:2006/08/03(木) 00:58:38
>>192さん
今外に出ているのでうる覚えですが、
エラーになってしまった気がします…。


194 :デフォルトの名無しさん:2006/08/04(金) 14:55:25
CaptionやTextなんかのプロパティの文字列に日本語を入れたら文字化けするんですが
どのように対策をとれば日本語を扱えるのでしょうか?

現状:
アルファベットなら期待通りの動きをしています
「aaa」をセットした場合、正しく「aaa」と表示されますが、
「あああ」をセットしようとした場合、「あ¢」のような表示になります

カスタムプロパティで文字列(CComBSTR)の要素を追加し、それに対して上の「あああ」を実行すると
メンバ変数には期待通り「あああ」が設定されますが、表示が「あ¢」になってしまいます。

動作確認はActiveXコントロールテストコンテナとVBで行いました。

195 :デフォルトの名無しさん:2006/08/04(金) 16:08:51
>>194
ウニコードは?

196 :194: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の方法でできたぞ。

216 :211:2006/11/28(火) 22:47:34
>>212
うちでもCHtmlViewのポインタ取得してSetFocus()すればできたよ。
::GetFocus()した結果とCHtmlViewのHWND比較してみ。

もしかしてTABキーを押したときにViewのHTMLDocument内で
フォーカス移動するのがいやだとか?
ならPreTranslateMessage()でTABキーの押し下げを捕まえるしかないと思うよ。

217 :デフォルトの名無しさん:2006/11/28(火) 23:40:39
>>216
ども

(会社で)SPYしたのを見るとCHtmlViewをSetFocus()したのと
マウスでクリックした時のHWNDは違っていた

マウスでクリックしたのはCHtmlViewの小の小の小の小あたりだった


218 :デフォルトの名無しさん:2006/11/28(火) 23:42:14
>>216
PS.
単純にホイールでスクロールしたいだけです



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

普段使ってるマウスユーティリティは全てOFFにして確認したので
こちらの環境依存ではないと思うが・・・

220 :211:2006/11/29(水) 01:38:13
ちょっと補足だけど
「Internet Explorer_Server」のHWNDはFindWindowEx()で取れるね。

時間がないのであまり検証できないけど、
なんかの役に立つかもしれないので一応。

221 :デフォルトの名無しさん:2006/11/29(水) 08:19:10 ?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"); としとけばいい。

231 :227:2006/12/20(水) 11:09:12
>>230
BrowseForFolder.HTM V1.01 (C) yoshioka.teruo@xxx.xxxx 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のセキュリティホールをご存じありませんか?」


233 :227:2006/12/20(水) 15:50:37
>>231
>htaファイルに拡張子を変更すると,ユーザーは,IEのセキュ
>リティー設定の変更をしなくても良いのでしょうか?
htaに作り替えて,IE ver. 7のセキュリティ設定を元に戻して,確認してみました。

(1) 拡張子をhtaに変更してActiveXを使用したページを私のサイトで公開すると,
ユーザーが私のサイトを「信頼済みサイト」に加えれば,その中で使用されている
ActiveXが自由に使えるようです。

(2) 拡張子がhtmlだと,ユーザーが私のサイトを「信頼済みサイト」に加えて,
さらに,「信頼できるサイト」のセキュリティのレベルを<低>にして,
さらに,Internetのセキュリティ・レベルのカスタマズを開いて,「
スクリプトを実行しても安全だとマークされていないActiveXコントロール
の初期化と実行」を<有効>または<ダイアログを表示する>にする
必要がありました。

>「IEのセキュリティホールをご存じありませんか?」
htaもIE上で動くので,IEにセキュリティホールがあれば,htaのActiveXも
危険なはずなのに,ユーザーの設定が(1)で済むのが不思議です。

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のスレがあったりする。

237 :227: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 書き換えりゃいいんじゃね?

247 :244:2007/02/08(木) 20:52:46
>>245
その子ウインドウの検索をするメソッド名(?)を教えていただけないでしょうか?

もしくはその辺りの情報がひっかかる検索語句をお願いします。

248 :デフォルトの名無しさん:2007/02/08(木) 22:10:33
VisualStudioのSpy++でウィンドウ階層見れるから手動で少し調査してから
GetForegroundWindowかGetActiveWindowでIEかダイアログボックスのウィンドウハンドル拾って
FindWindowでボタンコントロールのウィンドウ探してPostMessage。

249 :244: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 が解るから、それで動作変えれば。

255 :252: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
捏造できる罠
そもそも配布方法に問題があるんじゃ?

259 :252: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
いやオートメーションの中で何を呼ぼうと自由では

95 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)