Re[3]: как правильно вызвать функцию с аргументом TChar?
От: Ignoramus  
Дата: 06.01.04 11:41
Оценка: +1 :)
Здравствуйте, bipbip, Вы писали:

B>огромное человеческое спасибо! помогло!


А оценочку поставить?
Re: как правильно вызвать функцию с аргументом TChar?
От: Ignoramus  
Дата: 06.01.04 01:18
Оценка: 3 (1)
Здравствуйте, bipbip, Вы писали:

B>
B>Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
B>


Мне кажется, тут дело не в TCHAR, а в спецификаторе вызова функции. Насколько мне известно, паскаль и си используют разную схему (последовательность) занесения аргументов функции в стек и возвращения значения. Копать в строну __cdecl __stdcall и иже с ними. По умолчанию в си используется один из этих спецификаторов неявно, и это не всегда приемлемо.

У меня например такая ошибка выпала однажды, когда пытался импортировать функцию из dll, не указывая спецификатор вызова, а он оказался по умолчанию не таким как нужно.
как правильно вызвать функцию с аргументом TChar?
От: bipbip  
Дата: 05.01.04 17:52
Оценка:
есть функция (в dll) вида

boll func(TCHAR *var1);


как правильно ее вызвать?
теоретически в дельфи оно имеет вид


function func(var1: PChar) : boolean;

и вызывается просто


sVar1=PChar('dfsfsf');
func(sVar)

а как ее вызвать из visual c++?

у меня постоянно сваливается с ошибкой

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.


да, предполагается, что var1 функция будет менять.
Re[2]: как правильно вызвать функцию с аргументом TChar?
От: bipbip  
Дата: 06.01.04 06:14
Оценка:
Здравствуйте, Ignoramus, Вы писали:

I>Мне кажется, тут дело не в TCHAR, а в спецификаторе вызова функции. Насколько мне известно, паскаль и си используют разную схему (последовательность) занесения аргументов функции в стек и возвращения значения. Копать в строну __cdecl __stdcall и иже с ними. По умолчанию в си используется один из этих спецификаторов неявно, и это не всегда приемлемо.


огромное человеческое спасибо! помогло!
Re: как правильно вызвать функцию с аргументом TChar?
От: ilnar Россия  
Дата: 06.01.04 08:33
Оценка:
Здравствуйте, bipbip, Вы писали:

B>есть функция (в dll) вида


B>
B>boll func(TCHAR *var1);
B>


B>как правильно ее вызвать?

B>теоретически в дельфи оно имеет вид

ТАК ПОПРОБУЙ:

B>
B>function func(var1: PChar) : boolean; cdecl;
B>

B>и вызывается просто
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.