Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

stdcall в D5 & D7...   Найти похожие ветки 

 
Jolik ©   (2004-09-28 12:17) [0]

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


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

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


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

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


 
Jolik ©   (2004-09-28 12:43) [3]

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


 
DiamondShark ©   (2004-09-28 12:50) [4]

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


 
Digitman ©   (2004-09-28 13:06) [5]


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


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


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


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


 
Jolik ©   (2004-09-28 13:08) [6]

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


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,
...
;



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

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


 
Digitman ©   (2004-09-28 13:17) [8]

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


 
Jolik ©   (2004-09-28 13:32) [9]

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

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


 
Amoeba ©   (2004-09-28 13:37) [10]


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

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


 
Mim1 ©   (2004-09-28 18:03) [11]


> integer; StdCall; export;

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


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

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


 
Amoeba ©   (2004-09-29 11:12) [13]


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.10.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.061 c
1-1096479986
xman
2004-09-29 21:46
2004.10.17
TreeView


4-1095281568
Evg12
2004-09-16 00:52
2004.10.17
Как выполнить exe из ресурса


1-1096150607
Homa_Programer
2004-09-26 02:16
2004.10.17
Кнопочка


8-1090517330
fess
2004-07-22 21:28
2004.10.17
Как нарисовать вогнутую кривую от точки до точки срдствами Chart?


1-1096880871
}|{yk
2004-10-04 13:07
2004.10.17
CharToOem и Cp866-U