4

我的 Visual Studio 2005 C# 项目有问题。从星期一开始,我一直在 Windows XP 下使用它。然后我的笔记本电脑坏了,在我的新笔记本电脑上我有 Windows 7 64 位,我仍在使用 VS 2005。

源代码的编译没有问题,但是当我运行程序时,它在下面的行中中断

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

我得到错误:

EnrtyPointNotFoundExcepition 未停止

无法在 DLL“kernel32.dll”中找到名为“InterlockedIncrement”的入口点

我正在尝试使用 PostgresODBC 64 位驱动程序连接 Postgres 8.4 数据库。

欢迎任何解决方案或解决方法。我需要强调的是,我正在构建的解决方案需要在 Windows XP 32 位下运行。

有关该问题的更新信息(来自我对评论的回复,但不仅如此):

  1. 当我尝试向我的 VS 项目添加新连接时,我收到消息ERROR [IM014] [Microsoft][ODBC Driver Manager] The specified DSN contains a architecture mismatch between Driver and Application。我使用 Windows 7 64 位,Postgres ODBC 64 位驱动程序版本。9.00.0200,Postgres 8.4 32 位。
  2. 我以前从未使用过Dependency Walker。但是我已经从\system32\SysWOW64打开kernel32.dll并且InterlockedIncrement存在于两个文件夹的文件中。
  3. 我有一些TableAdapters,我用它们从 Postgres 中获取数据。这是我在使用WinXP时设置的,现在仍然有效。另一方面,当在 VS2005 中的TableAdapter属性中单击Data->CommandText旁边的“ ... ”时,它会显示一条消息 Failed to call the ODBC driver connection utility。

编辑:我在上面添加了第 1-3 点。

4

4 回答 4

5

在 64 位窗口上,这些不是从 kernel32.dll 导出的真正函数 - 它们是编译器内在函数。P/Invoking 该函数的代码应该改用 Interlocked 托管类。

它们现在也是 32 位 Windows 上的内在函数,但是出于应用程序兼容性的原因,导出的函数仍然可以从 32 位 Windows 上的 kernel32.dll 获得。64 位不是问题,因为没有可兼容的应用程序。

于 2011-03-17T13:02:20.413 回答
5

我刚刚遇到了完全相同的问题,并找到了一个非常简单的解决方案:在导入中使用 System.Data.Odbc 而不是 Microsoft.Data.Odbc。

于 2012-03-12T17:14:06.433 回答
1

我猜你的司机有问题。我不能确定,但​​你可能想考虑使用其他东西。 Npgsql看起来相当不错,它是 100% 的 C# 代码,所以它应该可以在 Windows XP 32 位上运行而没有任何问题。

于 2011-03-17T13:02:12.040 回答
1

我想我已经解决了问题,虽然我不确定。但是,我安装了 32 位版本的 Postgres ODBC 驱动程序,并使用 32 位版本的 ODBC 管理员C:\Windows\SysWOW64\odbcad32.exe来配置连接。我在线程64-bit-odbc-exception中找到了有关 32bit ODBC Administrator 的信息,其中一位用户引用了MSDN:Managing Data Sources

我认为我需要与我的操作系统相同版本的 ODBC 驱动程序(关于位数)。我也尝试过 64 位版本的 Postgres 和 ODBC 驱动程序,但它也不想为我工作。唯一的解决方案是 32 位版本的 Postgres 和 ODBC,以及在32 位 ODBC Administrator中设置的连接

关于我的 VS 项目,我将Project->Properties->Build->Platform 目标设置为x86

希望它对将来的人有所帮助。

于 2011-03-17T16:25:18.883 回答