У меня возникла похожая проблема при подключении к 64-битной dll через библиотеку-заглушку.Для моего 32-разрядного приложения, связывающегося с 32-разрядной библиотекой, кажется, что declspec (dllimport) добавляет imp к именам функций, которые он ищет, но добавляет только * imp для 64-немного дллс
Например, "function1 ()" станет "_ imp _function1" и найден для моей 32-битной версии dll, но когда я связываю 64-битную версиюdll в мое 64-битное приложение, я получаю сообщение об ошибке:
неразрешенный внешний символ __imp_function ...
Обратите внимание на одну нижнюю черту, добавленную к __imp, по сравнению с двойной чертой для 32-битной версии,Когда мне не удается связать требуемую библиотеку в 32-разрядной версии, я получаю ошибку связи:
неразрешенный внешний символ _ imp _function ...
Я могу решить проблемупросто добавив _ к имени функции в моем заголовке (т. е. _function () вместо function (). Это кладжа, но это показывает, что действительно оформление отличается для 64-битной declspec (dllimport) по сравнению с 32-bit declspec (dllimport).
Я использую Visual Studio 2010 и связываюсь с dll, созданным с помощью gcc. Я где-то читал, что 64-битные dll, созданные в Visual Studio, украшены одиночной чертой, _ imp , поэтому, возможно, проблема в том, что gcc последовательно использует двойные черты до и после, но VS ожидает, что 32-битные библиотеки dll будут оформлены иначе, чем 64-битные библиотеки.
Мне не удалось найтиописание этого отличается на MSDN Microsoft. Может ли кто-нибудь подтвердить, что существует разница между 64 и 32-разрядными в том, как declspec (dllimport) украшает имена функций в Visual Studio?