none
VS2013,.netFramework4.5におけるx86アプリに関して RRS feed

  • 質問

  • お世話になっております。

    現在、VisualStudio2008にて32Bit、64Bitで稼動可能だったアプリをVisualStudio2013にアップグレードし、

    ターゲットフレームワークを.NetFramework4.5.1にしてインストーラーの稼動確認を行っています。

    32bit端末では稼動できるのですが、64Bit端末では下記のエラーが発生しております。

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

    エラーが発生しました。

    System.Runtime.InteropServices.COMException (0x80040154): クラスが登録されていません (HRESULT からの例外:0x80040154 (REGDB_E_CLASSNOTREG))

       場所 System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object punkOuter, Int32 context, Guid& iid)

       場所 System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid)

       場所 System.Windows.Forms.AxHost.CreateInstanceCore(Guid clsid)

       場所 System.Windows.Forms.AxHost.CreateInstance()

       場所 System.Windows.Forms.AxHost.GetOcxCreate()

       場所 System.Windows.Forms.AxHost.TransitionUpTo(Int32 state)

       場所 System.Windows.Forms.AxHost.CreateHandle()

       場所 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)

       場所 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)

       場所 System.Windows.Forms.AxHost.EndInit()

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

    上記エラーが発生している箇所は、フォームデザイナーで自動生成されているコーディング箇所で、

    AxComctLib.AxToolbarのオブジェクトに対し、

    「CType(Me.tbToolBar, System.ComponentModel.ISupportInitialize).EndInit()」と

    コーディングされている箇所になります。

    元々、VB6で作成されていたアプリをVB6⇒VB2003⇒VB2008とアップグレードしているため、VB6のコントロールを使用しています。

    そのため、インストールする端末においてはVB6のライセンス用のレジストリKEYの追加及びコントロールの配置を行っています。

    32Bit、64Bit双方の稼動確認端末において、必要なコントロールに関しては同じ設定を行っている上で、

    VB2008(.netFrameWork3.5.1)アプリでは32Bit、64Bit双方の端末で稼動可能で、

    VB2013(.netFrameWork4.5.1)アプリでは64Bitのみエラーが発生する、ということは、

    .netFramework4.5.1だと32Bitと64Bitの互換性が100%ではない、とい事になるのでしょうか。

    もしくは、何か開発側で回避できる方法があるのでしょうか。

    以下、開発環境の詳細になります。

    何か、情報をお持ちの方がいましたら、教えて頂きますよう、お願い致します。

    【開発環境】

    ・端末:Windows7 32Bit

    ・開発環境:Visual Studio Professional2013

    ・ターゲットフレームワーク:.NetFramework4.5.1

    2014年6月12日 5:47

回答

  • 基本的なこととして、64bit OSでは32bitアプリケーション、64bitアプリケーション双方を動作させることができます。

    その前提で、質問者さんの作成したアプリケーションはVS2008を使用した際には64bit動作させていたのでしょうか? またVS2013でエラーになったアプリケーションはVS2008と同じでしょうか?
    それとは別に、質問者さんは64bit OS上で、64bit動作させたいですか? それとも32bit動作させたいですか?

    以上のことが質問文から読み取れませんでした。

    またAxComctLibはVS2008 / VS2013どちらにも含まれていないコンポーネントであり、サポート範囲が異なります。

    • 回答としてマーク 星 睦美 2014年6月24日 4:13
    2014年6月12日 10:05
  • VB6 付属の ActiveX コントロールだというのであれば、64bit OS 上で 64bit プロセスとして使うことはできないでしょう。
    今まで 64bit OS で動かせていたのは、64bit OS 上で 32bit プロセスとして動かしていたからでしょうから、アプリケーションプロジェクトのターゲットプラットフォームが x86 になっていることを確認することからでしょうか。

    なお、VB6 に付属していたものはあくまで VB6 とセットでの開発・頒布を想定しているはずです。
    使用許諾から、再頒布する権利について再確認してください。

    ところで、ToolBar とのことですが、ActiveX コントロールを使わないといけない理由はあるのでしょうか。
    ないのであれば、ここらで .NET Framework が用意しているクラスに乗り換えを検討した方がよいのでは。

    • 回答としてマーク 星 睦美 2014年6月24日 4:13
    2014年6月12日 13:48
    モデレータ
  • すでに他の回答者の方から回答が出ていますが、アプリの 32/64-bit 対応について参考になると思われる記事を紹介しておきます。

    Part 1. 64 ビット Windows OS の基本知識
    http://blogs.msdn.com/b/nakama/archive/2008/10/30/part-1-64-windows-os.aspx

    Part 2. .NET Framework 2.0 アプリケーションの 64 ビット対応
    http://blogs.msdn.com/b/nakama/archive/2008/11/06/part-2-net-framework-2-0-64.aspx

    Part 3. ASP.NET 2.0 Web アプリケーションの 64 ビット対応
    http://blogs.msdn.com/b/nakama/archive/2008/11/13/part-3-asp-net-2-0-web-64.aspx


    > VB6のコントロールを使用しています。

    Part 3 の Step 15 の記述によると、VB6 ランタイムは 32-bit 版しかないそうです。


    > VB2008(.netFrameWork3.5.1)アプリでは32Bit、64Bit双方の端末で稼動可能で、

    どうしてそれが可能だったかは Part 2 の Step 8 あたりに書いてあります。

    • 回答としてマーク 星 睦美 2014年6月24日 4:14
    2014年6月13日 1:52

すべての返信

  • 基本的なこととして、64bit OSでは32bitアプリケーション、64bitアプリケーション双方を動作させることができます。

    その前提で、質問者さんの作成したアプリケーションはVS2008を使用した際には64bit動作させていたのでしょうか? またVS2013でエラーになったアプリケーションはVS2008と同じでしょうか?
    それとは別に、質問者さんは64bit OS上で、64bit動作させたいですか? それとも32bit動作させたいですか?

    以上のことが質問文から読み取れませんでした。

    またAxComctLibはVS2008 / VS2013どちらにも含まれていないコンポーネントであり、サポート範囲が異なります。

    • 回答としてマーク 星 睦美 2014年6月24日 4:13
    2014年6月12日 10:05
  • VB6 付属の ActiveX コントロールだというのであれば、64bit OS 上で 64bit プロセスとして使うことはできないでしょう。
    今まで 64bit OS で動かせていたのは、64bit OS 上で 32bit プロセスとして動かしていたからでしょうから、アプリケーションプロジェクトのターゲットプラットフォームが x86 になっていることを確認することからでしょうか。

    なお、VB6 に付属していたものはあくまで VB6 とセットでの開発・頒布を想定しているはずです。
    使用許諾から、再頒布する権利について再確認してください。

    ところで、ToolBar とのことですが、ActiveX コントロールを使わないといけない理由はあるのでしょうか。
    ないのであれば、ここらで .NET Framework が用意しているクラスに乗り換えを検討した方がよいのでは。

    • 回答としてマーク 星 睦美 2014年6月24日 4:13
    2014年6月12日 13:48
    モデレータ
  • すでに他の回答者の方から回答が出ていますが、アプリの 32/64-bit 対応について参考になると思われる記事を紹介しておきます。

    Part 1. 64 ビット Windows OS の基本知識
    http://blogs.msdn.com/b/nakama/archive/2008/10/30/part-1-64-windows-os.aspx

    Part 2. .NET Framework 2.0 アプリケーションの 64 ビット対応
    http://blogs.msdn.com/b/nakama/archive/2008/11/06/part-2-net-framework-2-0-64.aspx

    Part 3. ASP.NET 2.0 Web アプリケーションの 64 ビット対応
    http://blogs.msdn.com/b/nakama/archive/2008/11/13/part-3-asp-net-2-0-web-64.aspx


    > VB6のコントロールを使用しています。

    Part 3 の Step 15 の記述によると、VB6 ランタイムは 32-bit 版しかないそうです。


    > VB2008(.netFrameWork3.5.1)アプリでは32Bit、64Bit双方の端末で稼動可能で、

    どうしてそれが可能だったかは Part 2 の Step 8 あたりに書いてあります。

    • 回答としてマーク 星 睦美 2014年6月24日 4:14
    2014年6月13日 1:52
  • 佐祐理 様

    ご回答、ありがとうございます。

    現在、対応しているアプリケーションのターゲットは32Bitです。よって。ターゲットCPUをx86に指定しビルドしています。

    VB2013 とVB2008で稼動確認しているアプリケーションは同じになります。

    VB2008で元々上記設定で稼動していたソリューションを、VB2013でコンバージョンし、ターゲットフレームワークを4.5.1に変更しております。

    ActiveXコントロールのオブジェクトに問題がありそう、という事までは分かったのですが、

    フレームワークとActiveXの組合せの問題ならば、32Bit端末&.NetFramework4.5.1でもエラーになるはず。

    64Bit端末とActiveXの組合せの問題ならば、64Bit端末&VB2008でもエラーになるはず。

    と考え、そうすると、

    64Bit端末&NetFramework4.5.1&ActiveXコントロールでエラーになるならば、

    NetFramework4.5.1に32Bitと64Bitとで何か違いがあるのか、という所に思考が行きました。

    ActiveXコントロールのサポート範囲に関して、調査してみます。

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


    • 編集済み TSK33 2014年6月19日 6:55
    2014年6月19日 1:33
  • Azulean 様

    ご回答、ありがとうございます。

    再度、ビルド構成のターゲットプラットフォーム及び、プロジェクトプロパティ画面→コンパイル画面の対象CPUがx86になっていることを確認致しました。

    ご指摘のとおり、ActiveX を使用しないでフレームワークを利用することが、正攻法な対応だと思いますが、

    200を超えるFormにてActiveXを使用しているため、何とか対応できないかと考えていました。

    こちらのフォーラムにて皆様からの回答を参考にさせて頂き、もう少しだけ、ねばってみようと思います。

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


    • 編集済み TSK33 2014年6月19日 6:56
    2014年6月19日 1:41
  • SurferOnWww 様

    ご回答、ありがとうございます。

    貴重な情報、ありがとうございます。

    ご紹介頂いたサイトをピックアップ頂いStepだけでなく、全て読んで勉強致します。

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

    2014年6月19日 7:01