Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

stdcall в D5 & D7... [D5, D7, Win2k, WinXP]


Jolik ©   (2004-09-28 12:17:00) 

Такая проблема:
есть проект, использует плугины в виде DLL. Все вызовы stdcall. Когда само приложение и DLL (и плугины) скомпилены в Delphi5 - все ОК. Если приложение скомпилить в Delphi7 а DLL оставить старые (скомпиленные в D5) - возникает ошибка доступа к памяти. Трассировка показывает, что ошибка при выходе из проц.расположенной в DLL - явно проблемы с типом вызова. Если плугиины перекомпилить в D7 все становится ОК. Неужели в D5 и D7 отличаются вызовы stdcall? Что предпринять?
Всякие выравнивания и оптимизации отключены...
Спасибо!


Amoeba   (2004-09-29 11:12:00) [1]


> Guru AV   (29.09.04 00:07) [12]

Директива farабсолютно ни к чему, поскольку она просто игнорируется компилятором (она оставлена лишь для обратной совместимости при использовании исходного кода написанного для 16-разрядной Windows).


Guru AV   (2004-09-29 00:07:00) [2]

:)
а ещё нада,
StdCall; far;export;
тоже где-то видел...


Mim1   (2004-09-28 18:03:00) [3]


> integer; StdCall; export;

и это наверное тоже отбалды потомучто видел гдето :)


Amoeba   (2004-09-28 13:37:00) [4]


> А за TControl спасибо... И как я раньше не догадался :)))

А следовало бы...


Jolik   (2004-09-28 13:32:00) [5]

stdcall "патамушта" некоторые функции вызываю из VC (безопасные конечно, без дельфийских классов) Потом точно запутаешься, где стивил стдкалл где нет - вот везде и поставил.

А за TControl спасибо... И как я раньше не догадался :)))


Digitman   (2004-09-28 13:17:00) [6]

точно ... stdcall понавтыкал без башни, просто "щоб було"


DiamondShark   (2004-09-28 13:10:00) [7]

Ыть...
Какие, нафиг, TControl между разными версиями?


Jolik   (2004-09-28 13:08:00) [8]

В осн. программе:


type
 TCompCreate         = function (AOwner: TControl; AName : PChar; AID : integer) : integer; StdCall;

var
 FCompCreate : TCompCreate;

begin
...
 @FCompCreate := GetProcAddress(FLibHandle, COMP_CREATE_FUNC_NAME);
     if @FCompCreate = nil then
       raise EComponentLibError.CreateFmt(
         'Error %d to link "%s" library', [GetLastError, COMP_CREATE_FUNC_NAME]);
...
end;



В DLL:


function ComponentCreate(AOwner: TControl; AName : PChar;
 AID : integer) : integer; StdCall; export;
begin
...
end;

exports
...
 ComponentCreate,
...
;


Digitman   (2004-09-28 13:06:00) [9]


> есть проект, использует плугины в виде DLL


проект дельфийский ? плагины - тоже дельфийские ? а нашута stdcall тогда ? щоб було ? или патамушта где-то когда-то у кого-то видел подобное в коде ?
убирай их нафих отовсюду, они как мертвому припарка


> возникает ошибка доступа к памяти


убирай ран-тайм пакеты из опций сборки ДЛЛ - будет тебе счастье, надеюсь


DiamondShark   (2004-09-28 12:50:00) [10]

Ты бы хоть заголовки функций показал...


Jolik   (2004-09-28 12:43:00) [11]

Я тоже так считал, что "stdcall он и в Африке stdcall". Даже DLL из VC++ подключал - все было ОК. А тут... Может Д5 и Д6 отличаются?
Ладно - будем считать что ошибка у меня в "17 строке"... Кстати - это прикол такой?


Amoeba   (2004-09-28 12:30:00) [12]

stdcall он и в Африке stdcall. А ошибка у тебя в 17-й строке твоего кода.


Lin7   (2004-09-28 12:25:00) [13]

У меня exe-шник собирается на D7, а все Dll и плагины на D6 - проблем никаких...


Наверх

Титульная страница Поиск, карта сайта Написать письмо