![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 - проблем никаких...