Re[2]: Не получается подключить dll
От: alexander51  
Дата: 01.12.10 11:12
Оценка:
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.