いつもお世話になります。1点相談させてください。
http://www.gesource.jp/weblog/?p=4602
このページを参考に、簡単なアクティブXを作成し、
RegSvr32コマンドで、OSに登録しました。
その結果、ExcelVBAからは、参照設定して使うこともできるし、
CreateObjectして使うこともできるようになりました。
'参照設定の場合
Sub aaaa()
Dim a As New Project1.MyApp
a.Method1 ' ←単にShowMessageを出すだけのメソッド。この
' このアクティブXは、簡略化のため、このメソッドしか実装していない。
End Sub
'CreateObjectの場合
Sub bbbb()
Set aaa = CreateObject("Project1.MyApp")
aaa.Method1
End Sub
ですが、VBSからはいくらCreateObjectしようとしても、
「アクティブXはオブジェクトを作成できません。」というエラーが
出て、処理がストップしてしまいます。
UACあたりが悪さをしているのかと思い、一応無効化してみましたが、
それでもだめでした。VBAでは成功しているところを見ると、まるっきり
見当違いのことをしているとも思えないのですが…
どなたか、同様の事例にあたった方や、対応がわかるかたはいらっしゃい
ますでしょうか?よろしくお願いします。
申し訳ありません。環境が漏れていましたね。
環境はDelphi6Personal+Windows 7 Pro (64bit)です。
Delphi6は64Bitには対応していませんが、どのようにしてお使いですか?
こんにちは,Mr.XRAYです.
実際に試していないので,あくまでも推測ですが,
Delphi 6 で作成するActiveXは32bit版です.
32bitのActiveX,DLLやOCX等を使用するには,32bit版のアプリが必要です.
そこで,VBSを実行するアプリを指定します.
64bit版のWindows 7 のデフォルトでは,64bit版のプログラムが呼ばれてしまいますから,
以下の修正をやってみたらどうなるでしょう.
(1) 対象の.VBSファイルで,[プロパティ]ダイアログを開く
(2) [全般]タブで,プログラムの[変更]をクリック
(3) [このファイルを開くプログラムを選択してください]で[参照]ボタンをクリック
(4) C:\Windows\SysWOW64\CScript.exe を選択する
さて,どうなるか? 責任は持てませんです.
Windows7の64bit環境でもDelphi5が動いてますよ。もちろんXPモードではありません。
32bitのAPIを使用したソフトのコンパイル/実行ともに正常に動いてます。
ただ、
>RegSvr32コマンドで、OSに登録しました。
このときエラーとかはでませんでしたか?
Win7 64bit版には32bit版と64bit版のWSHがあって、64bit版のWSHで32bit版のコンポーネントは失敗するそうです。
今のところ、32bit版のWSHを使用するには、
%windir%\SysWOW64\wscript.exe hoge.vbs
のようにするしか思いつきません。
システムに勝手にリダイレクトしてほしいのですが、うまい方法がないものでしょうか...
せっかくなのでやってみました.
質問された方が提示した
http://www.gesource.jp/weblog/?p=4602
と全く同じ手順と同じ内容で作成してみました.
Windows 7 U64 + Delphi XE2(UP4)
32bitで作成した場合は,
「.... オブジェクトを作成できません」のエラー発生で.VBSは実行できませんでした.
64bitで作成した場合は,実行できました.
.VBSファイルの実行ファイル名は
C:\Windows\System32\WScript.exe です.
(CScript.exe ではなく,WScript.exe これがデフォルトの実行ファイル)
32bitでの修正実行を忘れていました.
同じく Windows 7 U64(SP1) + Delphi XE2(UP4) 32bit です.
Sample.vbsの[このファイルを開くプログラムを選択してください]を
(1) C:\Windows\SysWOW64\WScript.exe とした場合
エラー: ActiveX コンポーネントはオブジェクトを作成できません。: 'Project1.Example'
となりました.
(2) C:\Windows\SysWOW64\CScript.exe とした場合
実行できます.
ただし,コマンドプロンプトが表示されます.
以上です.
>(1) C:\Windows\SysWOW64\WScript.exe とした場合
> エラー: ActiveX コンポーネントはオブジェクトを作成できません。: 'Project1.Example'
> となりました.
気になってので調べてみました.
.VBSファイルをダブルクリックで実行した場合.
開くプログラムを,C:\Windows\SysWOW64\WScript.exe にしても,
実行時には,C:\Windows\System32\WScript.exe が使用されている
(タスクマネージャーで確認)
すでにレスがあるように,コマンドプロンプトから,
C:\Windows\SysWOW64\WScript.exe Sample.vbs
で実行すればOK
でした..VBSを単独で使用するのでなければ,使えるようです.
でも,何か納得いかない...
皆様、ご回答どうもありがとうございます。
しばらく不在にしていた間にたくさんのレスをいただき、本当にありがたく
思います。
●Delphiについては、確かにバージョンが最新のOSには対応していないもの
ですが、現実に稼働していますので、利用しております。
●RegSvr32については、batファイルに保存し、そのbatファイルを右
クリックで「管理者として実行」をしましたので、登録は問題なく
いった旨メッセージが出ました。エクセルVBAで実行できているので、
実際に登録もうまくいったのではないかと思います。
自分でも、皆様のヒントを元に、検索して調べてまいりました。
WScriptには64bit版と32bit版があり、それに対応するBitのアクティブX
が必要なのですね。Nov様やXRAY様がご提示してくださっている方法を
これから調べてみたいと思います。
ただ、こういう話だと、64bitOSでは過去の資産がますます使いにくくなり
そうで残念ですね。自作のツールならDelphiを購入してコンパイルし直し
もできましょうが、ほかの方が作成してくださっているアクティブXは
どうしようもないでしょうし…
ツイート | ![]() |