![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||||
|
|||||
![]() В общем моё первое знакомство с динамическими библиотеками потерпело фиаско... В библиотеке описана процедура в которую передаётся переменная типа HDC и хэндл... примерно так:
Код:
Код:
Цитата:
Что тут не так? Где то я читал что вроде в библиотеку передаются не сами параметры, а лишь ссылки на них, но не уверен... Как быть? |
#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. Если вы программист - делать вид, что так было задумано. |
#8
|
||||
|
||||
![]() Цитата:
![]() |
#9
|
||||
|
||||
![]() AXS, приведите ВЕСЬ код процедуры, т.к. ошибка у вас явно не в этом месте. У меня этот код не вызывает никаких исключений.
Не профи, но и не чайник ![]() ![]() |
#10
|
||||
|
||||
![]() Код:
Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. Последний раз редактировалось The Shadow, 08.04.2008 в 11:29. |
#11
|
||||
|
||||
![]() Цитата:
Код библиотеки: Код:
|
#12
|
||||
|
||||
![]() Цитата:
Просто инициализируем OpenGL во время создания и отпускаем в конце работы (лишнее убрал. падает то при инициализации...) Код:
|
#13
|
|||
|
|||
![]() слушай - а не проще вообще то определить класс который будет отвечать за инициализацию и т.д. и т.п.
и из dll возвращать его как результат функции инициализации... помоему более просто и понятно ... и не нужно тягать отдельные параметры, да и инициализировать можно бут более гибко чтоль... ![]() |
#14
|
||||
|
||||
![]() Цитата:
![]() ![]() |
#15
|
||||
|
||||
![]() Ладно, с написанием класса я разобрался. Думаю смогу... Только не совсем догоняю чем это мне поможет?.. Если у вас есть мысли по поводу структуры класса - поделитесь пожалуйста. Но мне важно чтоб эти функции лежали вне самой программы т. к. программ-модулей использующих эти функции будет несколько и не хотелось бы писать их в каждой проге.
|