簡単に言えば、MS Access (.mdb) ファイルに接続してデータを読み取る VC++ dll があります。2 つの Perl スクリプトがこの同じ DLL をロードし、同じデータを読み取ります。唯一の違いは、perl スクリプトが別のフォルダー (フォルダー 'A' とフォルダー 'B' など) にあることです。
フォルダ 'A' の Perl スクリプトが DLL をロードし、データベース接続を開くと、成功です。
フォルダ 'B' の Perl スクリプトが DLL をロードしてデータベース接続を開くと、接続を開くことができません (例外が発生します)。
イベントビューアーを覗いてみると、以下のログがありました。
Faulting application name: perl.exe, version: 5.12.1.1201, time stamp: 0x4bed097d
Faulting module name: msjet40.dll, version: 4.0.9756.0, time stamp: 0x49246e48
Exception code: 0xc0000005
Fault offset: 0x0007128f
Faulting process id: 0x1634
Faulting application start time: 0x01cecb4f0080e109
Faulting application path: C:\Perl512\Perl\bin\perl.exe
Faulting module path: C:\Windows\SysWOW64\msjet40.dll
Report Id: 42f2cbc9-3742-11e3-91cd-001b2109685d
OS: Windows 7 プロフェッショナル 64 ビット
MS Office: MS Office 2007 Standard エディション (MS Access フルバージョンなし、Access Runtime Engine のみインストール)
接続文字列: strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"D:\\Documents\\LocalFile.mdb\"";
注: DLL は常に同じ MS Access ファイルに接続し、同じ接続文字列を使用します。
フォルダ「A」のスクリプトはデータベースに接続できるので、接続文字列に問題はないと思います。根本的な原因についてのアイデア/手がかりはありますか?
追加の詳細が必要な場合はお知らせください。前もって感謝します!