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

MPę*_*ski 3 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;");
Run Code Online (Sandbox Code Playgroud)

我收到错误:

EnrtyPointNotFoundExcepition未被取消

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

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

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

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

  1. 当我尝试向我的VS项目添加新连接时,我收到消息ERROR [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. 我有一些TableAdapter,我用它们从Postgres中获取数据.它是在我使用WinXP时设置的,它仍然有效.另一方面,当在VS2005中的TableAdapter属性中我点击Data-> CommandText旁边的" ... "时,它会显示一条消息无法调用ODBC驱动程序连接实用程序.

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

Ste*_*art 5

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

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

  • 我的没有。请记住,在 64 位 Windows 系统上有两个版本的 kernel32.dll - 32 位版本位于 c:\windows\SysWOW64,其中具有 InterlockedIncrement,而 64 位版本位于 c:\windows\system32哪个没有。您可能正在使用 32 位版本的depends.exe,出于某种原因(可能是文件重定向 - 如果是文件重定向,这可能是depends.exe 中的一个错误)甚至会加载 32 位版本的 DLL如果你从 c:\windows\system32 加载它 (2认同)

小智 5

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