Невозможно найти точку входа с именем «InterlockedIncrement» в DLL «kernel32.dll» - VS2005 @ Win7 64 бит - PullRequest
3 голосов
/ 17 марта 2011

У меня проблема с моим проектом Visual Studio 2005 C #. Я использую его под Windows XP, с понедельника. Затем мой ноутбук вышел из строя, и на моем новом я установил 64-разрядную версию Windows 7, и я все еще использую VS 2005.

Нет проблем с компиляцией исходного кода, но когда я запускаю программу, она разбивается на строку ниже

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

Я получаю ошибку:

EnrtyPointNotFoundExcepition не был заблокирован

Невозможно найти точку входа с именем «InterlockedIncrement» в DLL «kernel32.dll»

Я пытаюсь подключиться к базе данных Postgres 8.4 с помощью 64-разрядного драйвера PostgresODBC.

Любое решение или обходной путь приветствуются. Я должен подчеркнуть, что решение, которое я создаю, должно работать под Windows XP 32bit.

Обновлена ​​информация о проблеме (из моих ответов на комментарии, но не только):

  1. Когда я попытался добавить новое соединение в свой проект VS, я получил сообщение ОШИБКА [IM014] [Microsoft] [Диспетчер драйверов ODBC] Указанный DSN содержит несоответствие архитектуры между драйвером и приложением . Я использую 64-битную Windows 7, 64-битную версию Postgres ODBC Driver. 9.00.0200 , Postgres 8.4 32 бит.
  2. Я никогда раньше не пользовался Ходунком с зависимостями . Но я открыл kernel32.dll из обоих \ system32 и \ SysWOW64 и InterlockedIncrement присутствует в файлах из обеих папок.
  3. У меня есть TableAdapters , и я использую их для получения данных из Postgres. Он был установлен, когда я использовал WinXP, и он все еще работает. С другой стороны, когда в VS2005 в свойствах TableAdapter я нажимаю " ... " рядом с Data-> CommandText , отображается сообщение Failed вызвать утилиту подключения драйвера ODBC.

РЕДАКТИРОВАТЬ: я добавил пункты 1-3 выше.

Ответы [ 4 ]

5 голосов
/ 12 марта 2012

У меня точно такая же проблема, и я нашел удивительно простое решение: используйте System.Data.Odbc вместо Microsoft.Data.Odbc при импорте.

4 голосов
/ 17 марта 2011

В 64-битных окнах это не настоящие функции, экспортированные из kernel32.dll - вместо этого они являются встроенными функциями компилятора. Код, который вызывает P / Invoking этой функции, должен использовать управляемый класс Interlocked.

В настоящее время они также являются встроенными в 32-разрядных окнах, но экспортированные функции по-прежнему доступны из kernel32.dll в 32-разрядных окнах по соображениям совместимости приложений. Не проблема для 64-разрядных, потому что не было приложений, с которыми можно было бы работать.

1 голос
/ 17 марта 2011

Я думаю, что решил проблему, хотя я не уверен.Однако я установил 32-битную версию драйвера ODBC Postgres и Я использовал 32-битную версию администратора ODBC C: \ Windows \ SysWOW64 \ odbcad32.exe для настройки соединения.Я нашел информацию о 32-битном администраторе ODBC в потоке 64-bit-odbc-исключение , где один из пользователей ссылается на MSDN: управление источниками данных .

Я думал, что мне нужна та же версия драйвера ODBC (с учетом количества бит), что и моя ОС.Я также попробовал 64-битную версию Postgres и ODBC-драйвер, но он также не хотел работать для меня.Единственным решением были 32-битная версия Postgres, ODBC и набор соединений в 32-битный администратор ODBC .

Что касается моего проекта VS, у меня есть Project-> Свойства-> Сборка-> Цель платформы , установленная на x86 .

Надеюсь, это поможет кому-то в будущем.

1 голос
/ 17 марта 2011

Полагаю, что-то не так с вашим водителем. Я не могу быть уверен, но вы можете рассмотреть возможность использования чего-то еще. Npgsql выглядит довольно прилично, и это 100% код C #, поэтому он должен работать на 32-битной Windows XP без проблем.

...