|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Проблема с процедурой в DLL
В общем моё первое знакомство с динамическими библиотеками потерпело фиаско... В библиотеке описана процедура в которую передаётся переменная типа HDC и хэндл... примерно так:
Код:
procedure MyProc(var myDC: HDC; H: HWND); stdcall; Код:
procedure MyProc(var myDC: HDC; H: HWND); stdcall; begin ... myDC:= GetDC(H); ... end; Цитата:
Что тут не так? Где то я читал что вроде в библиотеку передаются не сами параметры, а лишь ссылки на них, но не уверен... Как быть? |
#2
|
|||
|
|||
Так и есть, параметры не передаются. Передаются только ссылки на них. И если память для должна освобождаться тем же процессом, которым выделилась.
Такой код ведёт к гадским мессагам:: //app.exe:: A:=TSomeObj.create; DllProc(a); //lib.dll:: procedure DllProc(a:TSomeObj); begin ... A.free ... end; |
#3
|
||||
|
||||
Счас попробуем...
|
#4
|
||||
|
||||
Что то я не понял... "A" - это что? HDC? У HDC же нет ни Create, ни Free...
|
#5
|
|||
|
|||
попробуй убрать "var" ибо ты передаёш ссылку на ссылку !!!
помоему так ... и пытаешся обратиться для получения контекста к адресу где хранится адрес контекста )) Но я точно не уверен ... |
#6
|
||||
|
||||
Цитата:
Вполне логично... HDC - это ссылка на контекст устройства. И я передаю ссылку на неё... м-да... Только var тут не поможет. Может кто знает как передавать такие вещи... PS: Если я уберу var то не получу обратно myDC, если только не сделаю процедуру функцией и буду возвращать DC результатом. Но там есть ещё myRC: HGLRC; (ссылка на контекст воспроизведения) и тут та же беда... Две ссылки в результ не запихнёшь... если и одну вообще возможно. |
#7
|
||||
|
||||
Почему не запихнешь? Создай свой тип-запись и передавай в нем сколько хочешь ссылок.
Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |