ターゲットプラットフォームが64ビットの時、EOleSysErrorを出さないようにするには?


kko  2014-04-09 16:25:41  No: 46224

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

以前、「64bitでタイプライブラリを読み込むには?」というタイトルで質問させていただいたkkoという者です。

現在、以前に質問させていただいた内容を進めて、タイプライブラリの64ビット対応化までは行えましたが、
ターゲットプラットフォームを64ビットにして、実行すると下記のアプリケーションエラーが発生します。
「EOleSysError がモジュール(実行ファイル名)の00000000000F2B1Bで発生しました。指定されたファイルが見つかりません。」
なお、ターゲットプラットフォームを32ビットにすると問題なく実行できます。
上記の件について、どなたか回避方法がわかる方がいましたら、教えて下さい。

なお、再現手順は以下の通りとなります。

(1).NETの環境でGUIをもつDLLを作成する。DLL作成には以下のURLのソースを元に、COM相互運用機能の登録で、
   DLLを作成する。なお、開発環境はVisual Studio 2010(C#)を使い、ターゲットプラットフォームは、
   AnyCPUにした。

  参考ソースURL
  http://www5.plala.or.jp/atata/download/axcontrol.net.lzh

(2)作成したDLLからDelphiにインポートするためのファイルを出力するため、作成したDLLを
64ビット版Tlibimp.exeがあるフォルダに保存し、インポートのためのファイルを下記のコマンドで出力する。

.\bin64\tlibimp.exe -P 作成したDLL

(3)出力したファイル(Accessibility_TLB、mscorlib_TLB、System_TLB、System_Windows_Forms_TLB、
(作成したDLL名)_TLB)を任意のフォルダに保存し、Delphiの[ファイルメニュー|コンポーネント]から、
コンポーネントのインストールを選択し、上記で出力したファイルを選択して、新規パッケージを作成する。
(4)新規パッケージを作成後は、下記のURLの手順を参考に、コンポーネントの64ビット化を行う。
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=1222
(5)64ビット対応まで出来たら、[ファイル|新規作成|VCLフォームアプリケーション]を選択して、
64ビット対応化したコンポーネントを貼り付けるためのフォームを作成する。
(6)作成したフォームのプロジェクトマネージャー内にある、ターゲットプラットフォームで、
右クリックを押し、プラットフォームの追加を選択して、64ビットのターゲットプラットフォームを追加する
(7)ターゲットプラットフォームをダブルクリックして64ビットにした後、作成したコンポーネントを貼りつけて、
ビルドして実行する
(8)ビルドは通るものの、EOleSysError〜というアプリケーションエラーが発生し、終了してしまう

以上、長文となりまして申し訳ございませんが、手順等に間違いがあるなどの心当たりがある方は、
ご助言をしていただければ幸いです。


Mr.XRAY  2014-04-17 07:52:18  No: 46225

放置なのかどうかは不明なので.とりあえず.

>EOleSysError がモジュール(実行ファイル名)の00000000000F2B1Bで発生しました。指定されたファイルが見つかりません。」

一般的に言うと,EOleSysError のエラーの特定は困難です.
メッセージ通りであれば,間違いなく必要なファイルがありません.
ファイルがないというのは 

(1) 本当にファイルがない
(2) ディクス上にファイルはあるが,システムまたは Delphi では認識できない

ということになります.
(2) の場合は,更に システムと Delphi のパスの設定等に分かれます.

ます,作成した XXXX_TLB.pas を 32 ビット環境で動作するか確認してみてくたさい.
この時は,XXX_TLB.pas は特に作成し直す必要はありませ.32 ビットと 64 ビットは兼用です.

このテストによって,システム側か,Delphi 側かを特定することが可能になるかも知れません.

釈迦に説法かも知れませんが,
タイプライブラリの取り込みで作成したものは,一般には COM オブジェクトの操作です.
したがって,DLL 等をシステムに登録する必要がある場合があります.
(不要の場合もあります.その DLL の説明で確認することになります)
32 アプリで使用するときは 32 ビット用として,64 ビットで使用する時は 64 ビット用としてです.
DLL の置き場所も 32 ビットアプリと 64 ビットアプリでは違います.


Mr.XRAY  2014-04-28 23:27:15  No: 46226

>作成した XXXX_TLB.pas を 32 ビット環境で動作するか確認してみてくたさい.

当然ですが,32 ビット版の DLL がないとテストできません.
ですが,前の質問で,32 ビットから 64 ビットのアプリへの移行ということでしたので.

# 以下に移動したようです.おそらく,多分.
http://qa.itmedia.co.jp/qa8549153.html


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

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






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