Linux上のWineでOLEエラー8004013Fを解決する方法:ステップバイステップガイド
OLEエラー8004013Fとは何か?
GNU/Linuxディストリビューション上のWine環境でデータベースやマクロを実行しようとすると、エラーメッセージに遭遇することがあります。プログラムの実行中に「OLEエラー 8004013F」というダイアログが表示され、スクリプトが即座に停止してしまうケースです。このエラーが発生する場合、スクリプトの実行に必要なライブラリが不足している可能性が非常に高いといえます。
ネイティブなWindows環境では、これらのライブラリがファイル内のオブジェクトとその親アプリケーションを結び付ける役割を担っています。しかしLinuxでは、X Server上で動作する各プログラムがそれぞれ独自の方法で処理を管理するため、この仕組みが存在しません。
DelphiとExcelでの発生例
ネイティブなMicrosoft Windows環境では、DelphiからわずかなコードでExcelを開くことができます。埋め込みおよびリンクされたExcelインスタンスで各種オブジェクトを扱いたい場合、eclApp:=CreateOleObject('Excel.Application');というコードを使用したことがある方も多いでしょう。Linux上でOpenOfficeを同じ方法で操作しようとした経験がある方もいるかもしれません。
eclApp:=CreateOleObject('com.sun.star.ServiceManager');というコードでOLEオブジェクトを作成しようとした際にDelphiが8004013Fエラーを返す場合、同様の依存関係の問題に直面している可能性が高いです。まずはコードに誤字がないか確認しましょう。依存関係の問題以前に、スペルミスはエラーの最も一般的な原因です。コードが正しく記述されていることを確認できたら、必要なライブラリの復元作業に進みます。
必要なOLEライブラリ
Windows用アウトラインプロセッサ「KeyNote NF(keynote-nf)」を使用している場合にも、同じエラーが発生することがあります。その場合も、以下と同じ手順で解決できます。keynote.exeにはインストーラーが付属していないため、Program Filesディレクトリに直接コピーして使うのが一般的です。一応起動するものの、前述の8004013Fエラーや、別の80004001例外が発生することがあります。
いずれの場合も、mkdirコマンドまたはGUIのファイルマネージャーを使って、Program Files内に「KeyNote-NF」という名前のディレクトリを作成し、keynote.exeをその中へ移動してください。
WindowsパーティションからのDLLのコピー
Windows XP、Vista、7、8、8.1、10のパーティションにアクセスできる環境であれば、C:\Windows\system32\からmsftedit.dllを、先ほど作成したKeyNote-NFディレクトリへコピーしてみましょう。併せてmsls31.dllもコピーします。インストールCDから入手することも可能ですが、その場合はexpandコマンドを使ってファイルを展開する必要があります。いずれの方法でも、コピー後にプログラムを起動すれば、正常に動作するはずです。
ファイルマネージャーやターミナルからの実行
ThunarやNautilusなどのファイルマネージャーは、keynote.exeを「DOS実行ファイル」として認識しますが、これは無視して問題ありません。これまでどおり実行するだけです。右クリックでコンテキストメニューを開くと、「Wineで実行する」という項目が表示されることがあります。それを選択して起動しましょう。ターミナルから起動すれば、実行中に発生するエラーメッセージを確認できます。場合によっては、msftedit.dllやmsls31.dllとは別のファイル名を警告されることもあります。その際は、指示されたファイルを入手してください。Unixの依存関係の沼のように、さまざまなファイルを集める作業に時間を費やすことになる可能性もあります。
ExcelやDelphiコードで同じ問題が起きる場合
ExcelやDelphiのコードで同様の問題が発生している場合は、実行しようとしている実行ファイルが格納されているディレクトリへ移動し、2つのDLLファイルをそこに配置してください。~/.wine/drive_c/Windows/system32に置けばWine全体からアクセスできるようになりますが、Wineがデフォルトでインストールしたファイルを上書きしてしまう恐れがあるため注意が必要です。
これらのDLLは、Wineが使用するオープンソースの代替実装よりも優れている面があるため、他のプログラムでのオブジェクトのリンクにも役立ちます。しかし、クローズドソースのファイルでLinux環境を汚したくないと考えるユーザーも少なくありません。そのため、実際にプログラムが使用するディレクトリにだけ配置するのが最も良い解決策といえます。
別のパーティションからコピーしてきた実際のWindowsアクセサリ用に、専用のディレクトリを作成しても構いません。たとえば、bashスクリプトやDelphiコードで従来のWordPadを起動する際に、こうした問題が発生することがあります。Wineには独自のwrite.exeがインストールされていますが、「~/.wine/drive_c/Program Files/」内にディレクトリを作成し、write.exe、msftedit.dll、msls31.dllをそこへ置いて、コードからそのディレクトリを参照することも自由です。WineにはWindows NT由来の簡易的なcmdインタープリターも含まれているため、好みに応じてバッチファイルからこれらのプログラムを参照することもできます。その際は必ず冒頭に@ECHO OFFを付けてください。付けないと、コマンドラインで1行ずつ入力してEnterを押したかのように、各コマンドが次々と画面に表示されてしまいます。
DLLダウンロードサイトを利用する際の注意点
インターネット上にはDLLをダウンロードできるサイトが数多く存在し、別パーティションにWindows環境がない場合には、そうしたリポジトリを利用したくなるかもしれません。確かに便利ではありますが、この方法でmsftedit.dllやmsls31.dllを入手せざるを得ない場合は、必ずマルウェアスキャンを実施してください。Ubuntu、Debian、Fedoraといったプロジェクトが公式に提供するリポジトリと、これらのサイトを同じ感覚で扱ってはいけません。
また、この方法で入手せざるを得ない場合、コードを再配布する際にライセンス上の問題が生じる可能性があることも覚えておきましょう。さらに、そうしたサイトがインストールを促してくる実行ファイルは絶対にインストールしないでください。それらの多くは、本物のMicrosoft Windows環境のユーザーを狙ったアドウェアの一種です。この2つのDLL以外のライブラリを複数ダウンロードする必要が生じた場合も同様で、同じようにアドウェアの被害に遭う危険性があります。
まとめ
OLEエラー8004013Fの多くは、Wine環境に必要なDLLが不足していることが原因です。まずコードの誤字を確認し、その後、実際にプログラムが使用するディレクトリにmsftedit.dllとmsls31.dllを配置することで、多くのケースは解決します。DLLを入手する際は、出所の信頼性に加え、マルウェアやライセンス面のリスクにも十分注意してください。
著者について

Kevin Arrows(ケビン・アローズ)
Kevin Arrowsは、10年以上の業界経験を持つテクノロジースペシャリストです。Microsoft Certified Technology Specialist(MCTS)の資格を保有し、最新の技術動向を追い続けることに強い情熱を持っています。ソフトウェア開発、サイバーセキュリティ、クラウドコンピューティングなど、幅広い技術トピックについて数多くの記事を執筆しており、複雑な技術的概念を明快かつ簡潔に説明する能力で、同業者からも高い評価を得ています。
-
5つの簡単なステップでXAMPPコントロールパネル用のLinux .desktopランチャーを作成する方法
XAMPPは、Apache Friendsが配布する人気のオープンソースWebサーバースタックソリューションです。MariaDBデータベース、Apache HTTPサーバー、PerlインタープリターをPHPスクリプトインタープリターと統合しており、開発者はローカルサーバーを簡単に構築してWebコンテンツのテストやデプロイを行えます。このパッケージをインストールすると単一のコントロールパネルにアクセスできますが、残念ながらそのランチャーは自動的に作成されないことが少なくありません。 そこで役立つのが.desktopファイルです。これを作成すれば、XAMPPコントロールパネルへ瞬時にアクセスでき
-
【保存版】シンボリックリンクを削除する2つの方法|rm・unlinkコマンドの使い方を徹底解説
シンボリックリンク(ソフトリンク、symlinkとも呼ばれます)とは、別のファイルへの参照情報だけを持つ特殊なファイルのことです。これにより、元のファイルのフルパスを毎回入力しなくても、あたかもその場所に実体があるかのようにアクセスできます。通常のファイルにもディレクトリにもリンクを張ることができ、多くのOSやパッケージがこの仕組みを活用しています。たとえば、LinuxやFreeBSDでWineを使用している方なら、dosdevices というディレクトリを目にしたことがあるかもしれません。ここには、Windowsアプリを動作させるために作られた仮想MS-DOSドライブへのシンボリックリンクが