4

Visual Studio 2005 C# プロジェクトに問題があります。月曜日からWindows XPで使用しています。その後、ラップトップが故障し、新しいラップトップに Windows 7 64 ビットがあり、まだ VS 2005 を使用しています。

ソースのコンパイルに問題はありませんが、プログラムを実行すると以下の行で壊れます

OdbcConnection cn;
cn = new OdbcConnection("dsn=My_dsn_name;");

エラーが発生します:

EnrtyPointNotFoundException の停止が解除されました

DLL 'kernel32.dll' に 'InterlockedIncrement' という名前のエントリ ポイントが見つかりません

PostgresODBC 64 ビット ドライバーを使用して Postgres 8.4 データベースに接続しようとしています。

解決策または回避策は大歓迎です。私が構築しているソリューションは、Windows XP 32 ビットで実行する必要があることを強調する必要があります。

問題に関する更新された情報(コメントへの私の応答からだけでなく):

  1. VS プロジェクトに新しい接続を追加しようとすると、メッセージERROR [IM014] [Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application が表示されました。Windows 7 64bit、Postgres ODBC 64bit Driver ver. 9.00.0200、Postgres 8.4 32 ビット。
  2. Dependency Walkerを使用したことがありません。しかし、 \system32\SysWOW64の両方からkernel32.dllを開きましたが、両方のフォルダーのファイルにInterlockedIncrementが存在します。
  3. いくつかのTableAdapterがあり、それらを使用して Postgres からデータをフェッチします。WinXPを使用していたときに設定されたもので、まだ機能しています。一方、VS2005 でTableAdapterのプロパティの [データ] - > [コマンドテキスト]の横にある [ ... ] をクリックすると、「 ODBC ドライバー接続ユーティリティの呼び出しに失敗しました」というメッセージが表示されます。

編集:上記のポイント1〜3を追加しました。

4

4 に答える 4

5

64 ビット ウィンドウでは、これらは kernel32.dll からエクスポートされた実際の関数ではなく、コンパイラの組み込み関数です。その関数を P/Invoking するコードは、代わりに Interlocked マネージ クラスを使用する必要があります。

これらは最近では 32 ビット ウィンドウでも組み込み関数ですが、エクスポートされた関数は、アプリの互換性の理由から、32 ビット ウィンドウの kernel32.dll から引き続き利用できます。対応するアプリがなかったので64bitなら問題ありません。

于 2011-03-17T13:02:20.413 に答える
5

まったく同じ問題が発生したばかりで、驚くほど簡単な解決策を見つけました。インポートで Microsoft.Data.Odbc の代わりに System.Data.Odbc を使用します。

于 2012-03-12T17:14:06.433 に答える
1

よくわかりませんが、問題は解決したと思います。ただし、Postgres ODBC ドライバーの 32 ビット バージョンをインストールし、32ビットバージョンの ODBC アドミニストレーターC:\Windows\SysWOW64\odbcad32.exeを使用して接続を構成しました。ユーザーの 1 人がMSDN: Managing Data Sourcesを参照しているスレッド64-bit-odbc-exceptionで、32 ビット ODBC アドミニストレーターに関する情報を見つけました。

OS と同じバージョンの ODBC ドライバー (ビット数に関して) が必要だと思いました。Postgres と ODBC ドライバーの 64 ビット バージョンも試しましたが、うまくいきませんでした。唯一の解決策は、32 ビット バージョンの Postgres と ODBC、および32 ビット ODBC アドミニストレーターで設定された接続でした。

私の VS プロジェクトに関しては、Project->Properties->Build->Platform ターゲットをx86に設定しています。

将来誰かに役立つことを願っています。

于 2011-03-17T16:25:18.883 に答える
1

私の推測では、ドライバーに問題があると思われます。確信は持てませんが、他のものを使用することを検討することをお勧めします。 Npgsqlはかなりまともなように見え、100% C# コードであるため、Windows XP 32 ビットで問題なく動作するはずです。

于 2011-03-17T13:02:12.040 に答える