tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル64bitOSでのCreateObject
記事No15437
投稿日: 2012/02/22(Wed) 20:42
投稿者マカロニ
いつも参考にさせていただいております。
マカロニと申します。

目的としては「Windows7 64bit版」でVB6のexeを動かしたいのです。

作業の流れとしては下記の通りです。
@ WindowsXP端末でプログラム
A ディストリビューションウィザードでパッケージ化
B AのパッケージをWinsows7にて展開
C 実行

上記の通り実行すると
Cで実行エラー'429'になります。


ソースの流れは↓の通りです。
***************************************************************

Public WithEvents WinSockControl As MSWinsockLib.Winsock

Private Sub Form_Load()

    MsgBox ("このメッセージはテストです(始)")
    Set WinSockControl = CreateObject("MSWinsock.Winsock.1")    ←★
    MsgBox ("このメッセージはテストです(終)")

End Sub

***************************************************************

★部分で実行エラー'429'となる事が判りました。


試した事
・32bit版のregsvr32で登録
 cd windir\syswow64
 regsvr32 mswinsck.ocx
・互換モードで実行
 exeを【右クリック】【プロパティ】で互換性モード(XP SP3)で実行
・古いOCXが残っている可能性があるので
 一度 regsvr32 /u mswinsck.ocx で削除してもう一度登録し直す

他には判らなかったのでここまでしかできていません。


ディストリビューションウィザードで環境作った時
SysWow64にmswinsck.ocxが登録されるので
【32bitアプリ】―【64bitOS】の互換性が
問題なのでは?と目星はつけて
いるのですが、この後の対策がわかりません。


回答いただけたら幸いです。
よろしくお願い致します。


アプリ作成端末
Windows XP 32bit版 SP3

アプリ実行端末
Windows 7  64bit版 SP1

VB暦
3ヶ月

[ツリー表示へ]
タイトルRe: 64bitOSでのCreateObject
記事No15438
投稿日: 2012/02/23(Thu) 01:04
投稿者魔界の仮面弁士
> 目的としては「Windows7 64bit版」でVB6のexeを動かしたいのです。

VB6 では、どうやっても Win32 Application しか作成できないため、
Win7 x64 側では、WoW64 上にて 32bit アプリとして動作させることになります。


> Set WinSockControl = CreateObject("MSWinsock.Winsock.1")    ←★

ActiveX コントロールを使う場合は、CreateObject するのではなく、
ActiveX コントロールをフォームに貼り付けて利用する必要があります。

これは、生成作業(CreateObject、フォームへの貼り付け、Controls.Add 等)には
実行時ライセンス(ランタイムライセンス)ではなく
開発時ライセンス(デザインタイムライセンス)が必要とされるためです。

[ツリー表示へ]
タイトルRe^2: 64bitOSでのCreateObject
記事No15439
投稿日: 2012/02/23(Thu) 10:02
投稿者マカロニ
魔界の仮面弁士様

早速の回答ありがとうございます。

> これは、生成作業(CreateObject、フォームへの貼り付け、Controls.Add 等)には
> 実行時ライセンス(ランタイムライセンス)ではなく
> 開発時ライセンス(デザインタイムライセンス)が必要とされるためです。

納得しました。
全然32bit 64bitの話ではなかったですね。
VB6の動きが全然分かっていませんでした。。。
回答頂いた事を踏まえ、プログラム修正を行いたいと思います。
ありがとうございました。

[ツリー表示へ]