OLE, Stack Overflow.

rgreat
Дата: 14.08.2019 20:13:37
OLE сервер:
function TMP_DataInt.UniMessage(ParamIn1, ParamIn2: OleVariant): OleVariant;
begin
  Result:=UniMessageHandler(ParamIn1, ParamIn2);
end;


OLE клиент:
function TMBData.UniMessage(const Command: string; const Parameters: OleVariant): OleVariant;
begin
   Result:=DataInt.UniMessage(Command,Parameters); // <-- тут изредка падает, без возможности обработать ошибку.
end;

Как забороть Stack Overflow в клиенте на этой строке?
Какие причины могут быть?
kealon(Ruslan)
Дата: 15.08.2019 07:01:08
rgreat,
ты случайно это не в методах отрисовки вызываешь?
wadman
Дата: 15.08.2019 07:39:44
rgreat
const 

Может стоит привести к одному описанию?
rgreat
Дата: 15.08.2019 11:27:32
wadman
rgreat
const 

Может стоит привести к одному описанию?

Изначально без const было.
Это я уже пытался забороть stack overflow.
Не помогло.
rgreat
Дата: 15.08.2019 11:29:54
kealon(Ruslan),

Да, графика там может использоватся.
rgreat
Дата: 15.08.2019 11:31:50
Увеличение размера стека приводит к out of memory.

Причем передаваемые параметры не больше 100 кб суммарно.
wadman
Дата: 15.08.2019 11:43:37
rgreat
Это я уже пытался забороть stack overflow.

Для обеих функций const пробовал?
rgreat
Дата: 15.08.2019 11:49:18
wadman,

Как я в type library это сделаю?
Ну и опять таки в сервере ошибки не происходит.
kealon(Ruslan)
Дата: 15.08.2019 17:04:15
rgreat
kealon(Ruslan),

Да, графика там может использоватся.
в проце прорисовки нельзя вызвать методы COM-объектов из других потоков (соответственно и процессов)

WM_PAINT и ряд других сообщений обрабатываются во время ожидания внешней процедуры, соответственно и может получиться рекурсивный вызов с переполнением стека
rgreat
Дата: 15.08.2019 17:24:56
kealon(Ruslan)
в проце прорисовки нельзя вызвать методы COM-объектов из других потоков (соответственно и процессов)

WM_PAINT и ряд других сообщений обрабатываются во время ожидания внешней процедуры, соответственно и может получиться рекурсивный вызов с переполнением стека
Хм. Интересно.

Вроде у меня в процессе прорисовки оно не вызывается. Но гляну в эту сторону. Спасибо.