无法在DLL'kernel32.dll'中找到名为'InterlockedIncrement'的入口点 - VS2005 @ Win7 64 bit

时间:2011-03-17 12:54:51

标签: c# postgresql 64-bit odbc kernel32

我的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 32bit下运行。

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

  1. 当我尝试向VS项目添加新连接时,我收到消息错误[IM014] [Microsoft] [ODBC驱动程序管理器]指定的DSN包含驱动程序和应用程序之间的体系结构不匹配。我使用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 旁边的“ ... ”显示消息无法调用ODBC驱动程序连接实用程序。
  4. 编辑:我在上面添加了第1-3点。

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

我认为我需要与我的操作系统相同版本的ODBC驱动程序(重新分配位数)。我也尝试过64位版本的Postgres和ODBC驱动程序,但它也不想为我工作。唯一的解决方案是32位版本的Postgres和ODBC,以及 32位ODBC管理员中的连接集

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

希望它能在将来帮助某人。