Невозможно найти точку входа с именем "InterlockedIncrement" в DLL "kernel32.dll" - VS2005@Win7 64 бит
У меня проблема с моим проектом Visual Studio 2005 C#. Я использую его под Windows XP, с понедельника. Затем мой ноутбук вышел из строя, и на моем новом у меня установлена Windows 7 64-битная, и я до сих пор использую VS 2005.
Нет проблем с компиляцией исходного кода, но когда я запускаю программу, она разбивается на строку ниже
OdbcConnection cn;
cn = new OdbcConnection("dsn=My_dsn_name;");
Я получаю ошибку:
EnrtyPointNotFoundExcepition был удален
Невозможно найти точку входа с именем "InterlockedIncrement" в DLL "kernel32.dll"
Я пытаюсь соединиться с базой данных Postgres 8.4, используя 64-битный драйвер PostgresODBC.
Любое решение или обходной путь приветствуется. Я должен подчеркнуть, что решение, которое я создаю, должно работать под Windows XP 32bit.
Обновленная информация о проблеме (из моих ответов на комментарии, но не только):
- Когда я попытался добавить новое соединение в мой проект VS, я получил сообщение об ошибке [IM014] [Microsoft][ODBC Driver Manager] Указанный DSN содержит несоответствие архитектуры между драйвером и приложением. Я использую 64-разрядную версию Windows 7, 64-разрядную версию драйвера Postgres ODBC. 9.00.0200, Postgres 8.4 32 бит.
- Я никогда не использовал Dependency Walker раньше. Но я открыл kernel32.dll из обоих \system32 и \SysWOW64 и InterlockedIncrement присутствует в файлах из обеих папок.
- У меня есть некоторые адаптеры таблиц, и я использую их для получения данных из Postgres. Он был установлен, когда я использовал WinXP, и он все еще работает. С другой стороны, когда в VS2005 в свойствах TableAdapter я нажимаю "..." рядом с Data->CommandText, появляется сообщение "Не удалось вызвать утилиту подключения драйвера ODBC".
РЕДАКТИРОВАТЬ: я добавил пункты 1-3 выше.
4 ответа
Я думаю, что я решил проблему, хотя я не уверен. Однако я установил 32-битную версию драйвера Postgres ODBC и использовал 32- битную версию ODBC-администратора C:\Windows\SysWOW64\odbcad32.exe для настройки соединения. Я нашел информацию о 32 -битном администраторе ODBC в потоке 64-bit-odbc-exception, где один из пользователей ссылается на MSDN: Управление источниками данных.
Я думал, что мне нужна та же версия драйвера ODBC (с учетом количества бит), что и моя ОС. Я также попробовал 64-битную версию Postgres и ODBC-драйвер, но он также не хотел работать для меня. Единственным решением были 32-битная версия Postgres, ODBC и соединение, установленное в 32-битном ODBC Administrator.
Что касается моего проекта VS, у меня есть Project->Properties->Build->Platform target, установленный на x86.
Надеюсь, это поможет кому-то в будущем.
У меня точно такая же проблема, и я нашел удивительно простое решение: используйте System.Data.Odbc вместо Microsoft.Data.Odbc при импорте.
В 64-битных окнах это не настоящие функции, экспортируемые из kernel32.dll, а вместо этого встроенные функции компилятора. Код P/Invoking этой функции должен использовать управляемый класс Interlocked.
В настоящее время они также являются встроенными в 32-разрядных окнах, но экспортированные функции все еще доступны из kernel32.dll в 32-разрядных окнах по соображениям совместимости приложений. Не проблема для 64 бит, потому что не было приложений, с которыми можно было бы работать.
Я думаю, что-то не так с вашим водителем. Я не могу быть уверен, но вы можете рассмотреть возможность использования чего-то еще. Npgsql выглядит довольно прилично, и это 100% код C#, поэтому он должен работать на 32-битной Windows XP без каких-либо проблем.