Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.04.2008, 18:42
Аватар для AXS
AXS AXS вне форума
Новичок
 
Регистрация: 26.11.2006
Адрес: РК г. Талдыкорган
Сообщения: 67
Репутация: 15
Вопрос Проблема с процедурой в DLL

В общем моё первое знакомство с динамическими библиотеками потерпело фиаско... В библиотеке описана процедура в которую передаётся переменная типа HDC и хэндл... примерно так:
Код:
procedure MyProc(var myDC: HDC; H: HWND); stdcall;
далее пытаемся заполучить нужный нам контекст:
Код:
procedure MyProc(var myDC: HDC; H: HWND); stdcall;
begin
  ...
  myDC:= GetDC(H);
  ...
end;
Вот при этом самом получении и вылазит гадкая мессага
Цитата:
Проект *******.exe вызвал исключение класса EAccessViolation с сообщением 'Access violation at address 003AE363 in module '******.dll'. Read of address 00000001'. Процесс остановлен. Используйте Шаг или Запуск для продолжения.

Что тут не так? Где то я читал что вроде в библиотеку передаются не сами параметры, а лишь ссылки на них, но не уверен... Как быть?
Ответить с цитированием
  #2  
Старый 02.04.2008, 19:16
hinst hinst вне форума
Прохожий
 
Регистрация: 02.04.2008
Сообщения: 2
Репутация: 10
Сообщение

Так и есть, параметры не передаются. Передаются только ссылки на них. И если память для должна освобождаться тем же процессом, которым выделилась.
Такой код ведёт к гадским мессагам::

//app.exe::
A:=TSomeObj.create;
DllProc(a);

//lib.dll::
procedure DllProc(a:TSomeObj);
begin
...
A.free
...
end;
Ответить с цитированием
  #3  
Старый 02.04.2008, 19:44
Аватар для AXS
AXS AXS вне форума
Новичок
 
Регистрация: 26.11.2006
Адрес: РК г. Талдыкорган
Сообщения: 67
Репутация: 15
По умолчанию

Счас попробуем...
Ответить с цитированием
  #4  
Старый 02.04.2008, 20:24
Аватар для AXS
AXS AXS вне форума
Новичок
 
Регистрация: 26.11.2006
Адрес: РК г. Талдыкорган
Сообщения: 67
Репутация: 15
По умолчанию

Что то я не понял... "A" - это что? HDC? У HDC же нет ни Create, ни Free...
Ответить с цитированием
  #5  
Старый 02.04.2008, 21:08
K735Demon K735Demon вне форума
Прохожий
 
Регистрация: 30.03.2008
Сообщения: 10
Репутация: 10
По умолчанию

попробуй убрать "var" ибо ты передаёш ссылку на ссылку !!!
помоему так ...
и пытаешся обратиться для получения контекста к адресу где хранится адрес контекста ))
Но я точно не уверен ...
Ответить с цитированием
  #6  
Старый 03.04.2008, 22:03
Аватар для AXS
AXS AXS вне форума
Новичок
 
Регистрация: 26.11.2006
Адрес: РК г. Талдыкорган
Сообщения: 67
Репутация: 15
По умолчанию

Цитата:
Сообщение от K735Demon
попробуй убрать "var" ибо ты передаёш ссылку на ссылку !!!
помоему так ...
и пытаешся обратиться для получения контекста к адресу где хранится адрес контекста ))
Но я точно не уверен ...

Вполне логично... HDC - это ссылка на контекст устройства. И я передаю ссылку на неё... м-да... Только var тут не поможет.
Может кто знает как передавать такие вещи...

PS: Если я уберу var то не получу обратно myDC, если только не сделаю процедуру функцией и буду возвращать DC результатом. Но там есть ещё myRC: HGLRC; (ссылка на контекст воспроизведения) и тут та же беда... Две ссылки в результ не запихнёшь... если и одну вообще возможно.
Ответить с цитированием
  #7  
Старый 04.04.2008, 20:02
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Почему не запихнешь? Создай свой тип-запись и передавай в нем сколько хочешь ссылок.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter