Здравствуйте, MasterZiv, Вы писали:
MZ>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, уважаемые господа. На днях столкнулся с проблемой, суть следующая:
А>>Имеется dll и заголовочный файл к ней. В заголовочном файле все функции объявлены так:
А>>#define CALLCONV __stdcall
А>>….
А>>extern “C” RETURN_TYPE CALLCONV Fnc_Name(Parameters);
А>>Подключая библиотеку статически, я менял CALLCONV на __declspec(dllimport)
MZ>Ты делал это неправильно.
А>>Подключая динамически, делал так (меняя CALLCONV обратно на __stdcall):
MZ>Ты делал это тоже неправильно.
А>>В результате получал ту же самую ошибку. Как при статическом, так и при динамическом подключении вылетали не все функции. Некоторые выполнялись успешно.
MZ>Просто повезло.
MZ>А не так вот что: сначала нужно знать, что делаешь, потом делать.
MZ>Всю теорию сборки в С тебе тут излагать нет смысла -- её можно найти в книгах или инете.
Я понимаю, что без книжек далеко не уедешь. Прошу прощения за то, что не упомянул в первом посте про то, что я имею очень скудные познания в C, а теперь в этом нет смысла, т.к. это и так уже стало понятно. Но на чтение книжек уйдут месяцы, а эта библиотека нужна мне в рабочем состоянии чем быстрее, тем лучше. Поэтому я и не прошу Вас излагать тут всю теорию сборки C, а лишь «слегка», в двух словах, как это сделали первые ответившие, подсказать, что не так.
Также прошу прощения за синтаксические ошибки в своем первом посте, т.к. я писал его по памяти, не имея под рукой кода.
Сергей, uhaz, сбасибо большое, я понял ошибку — __stdcall в хэдере должен быть. Но непонятно, почему не работает случай динамического подключения. Ведь там хэдер от библиотеки вообще не используется, а __stdcall стоит в объявлении типа указателя на функцию. Подскажите пожалуйста… Провел довольно много времени за соответствующими статьями в инете, не нашел причину…
Код во вложении.
http://files.rsdn.ru/94922/DynamicCNC.cpp