sciter + mingw = bug
От: alsemm Россия  
Дата: 15.10.10 17:55
Оценка: 40 (1)
Взял sciter sdk c сайте 14 октября. Попробовал собрать свое приложение с ним gcc-mingw. Собралось, но при запуске стало валиться.
Падения лечатся, если я у себя в коде заменяю:

extern "C" {
void EXTAPI
TIScriptLibraryInit(HVM hvm, tiscript_native_interface* piface)
{
...
}
}


на
extern "C" {
void __stdcall
TIScriptLibraryInit(HVM hvm, tiscript_native_interface* piface)
{
...
}
}


Раньше все работало (пару месяцев назад) и с EXTAPI. Полагаю, что проблемы из-за кривого объявления EXTAPI в tiscript.h:
#ifdef __GNUC__
#define TISAPI
#define EXTAPI
#else
#define TISAPI __cdecl
#define EXTAPI __stdcall
#endif


Проверять надо не __GNUC__, а _WIN32, потому что __stdcall — это фича платформы, а не компилятора. Кривость, наверное, влезла, когда влили Linux-овый порт в основные исходники.

Попробовал убрать #ifdef __GNUC__ из tiscript.h, а свой код вернуть в исходное (не хардкодить __stdcall). Опять стало валиться
Поискал, где еще используется EXTAPI, tiscript.h:
extern tiscript_native_interface* EXTAPI TIScriptAPI();


Убрал EXTAPI из объявления TIScriptAPI() и падения прекратились. В результате исправленный tiscript.h, с которым мой прожект собирается и работает gcc-mingw и msvc, получился такой:
$ diff tiscript.h.old tiscript.h
6c6
6c6
< #ifdef __GNUC__
---
> #ifndef _WIN32
263a264,266
> #ifdef __GNUC__
>   extern "C" tiscript_native_interface* TIScriptAPI();
> #else
264a268
> #endif


PS С чем связан фарш в сигнатуре TIScriptAPI(), я не понимаю. Должен быть способ объявить TIScriptAPI() без всяких #ifdef-ов чтобы и msvc и mingw-gcc нормально объявление обрабатывали.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.