Delphi製のActivexがvbsから利用できない


まこと  2012-06-21 10:21:47  No: 42517

いつもお世話になります。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では成功しているところを見ると、まるっきり
見当違いのことをしているとも思えないのですが…
どなたか、同様の事例にあたった方や、対応がわかるかたはいらっしゃい
ますでしょうか?よろしくお願いします。


まこと  2012-06-21 15:44:16  No: 42518

申し訳ありません。環境が漏れていましたね。
環境はDelphi6Personal+Windows 7 Pro (64bit)です。


HOta  2012-06-21 17:41:43  No: 42519

Delphi6は64Bitには対応していませんが、どのようにしてお使いですか?


Mr.XRAY  2012-06-21 18:47:22  No: 42520

こんにちは,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 を選択する

さて,どうなるか? 責任は持てませんです.


take  2012-06-21 18:49:38  No: 42521

Windows7の64bit環境でもDelphi5が動いてますよ。もちろんXPモードではありません。
32bitのAPIを使用したソフトのコンパイル/実行ともに正常に動いてます。

ただ、
>RegSvr32コマンドで、OSに登録しました。
このときエラーとかはでませんでしたか?


Nov  2012-06-21 18:52:57  No: 42522

Win7 64bit版には32bit版と64bit版のWSHがあって、64bit版のWSHで32bit版のコンポーネントは失敗するそうです。
今のところ、32bit版のWSHを使用するには、
%windir%\SysWOW64\wscript.exe hoge.vbs
のようにするしか思いつきません。
システムに勝手にリダイレクトしてほしいのですが、うまい方法がないものでしょうか...


Mr.XRAY  2012-06-21 22:20:22  No: 42523

せっかくなのでやってみました.
質問された方が提示した

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 これがデフォルトの実行ファイル)


Mr.XRAY  2012-06-21 22:35:51  No: 42524

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 とした場合    
    実行できます.
    ただし,コマンドプロンプトが表示されます.
    
以上です.


Mr.XRAY  2012-06-22 04:39:52  No: 42525

>(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を単独で使用するのでなければ,使えるようです.
でも,何か納得いかない...


まこと  2012-06-23 05:15:37  No: 42526

皆様、ご回答どうもありがとうございます。
しばらく不在にしていた間にたくさんのレスをいただき、本当にありがたく
思います。

●Delphiについては、確かにバージョンが最新のOSには対応していないもの
  ですが、現実に稼働していますので、利用しております。

●RegSvr32については、batファイルに保存し、そのbatファイルを右
  クリックで「管理者として実行」をしましたので、登録は問題なく
  いった旨メッセージが出ました。エクセルVBAで実行できているので、
  実際に登録もうまくいったのではないかと思います。

自分でも、皆様のヒントを元に、検索して調べてまいりました。
WScriptには64bit版と32bit版があり、それに対応するBitのアクティブX
が必要なのですね。Nov様やXRAY様がご提示してくださっている方法を
これから調べてみたいと思います。
ただ、こういう話だと、64bitOSでは過去の資産がますます使いにくくなり
そうで残念ですね。自作のツールならDelphiを購入してコンパイルし直し
もできましょうが、ほかの方が作成してくださっているアクティブXは
どうしようもないでしょうし…


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加