![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нужна помощь в переводе файлов заголовков из С++ в Delphi [D7, Win95/98, WinME, NT4, Win2k, WinXP]
Zilog_ © (2006-07-05 10:13:00)Ребята! Кто может помочь переписать файлы заголовков DLL библиотеки из под C++ в Delphi. Нужно срочно, а то уволят на ф....г!!!!
evvcom (2006-07-07 14:18:00) [1]> Все-таки вчем приниципиальная разница директив stdcall и
> cdecl?
В том, какая из сторон чистит стек от параметров. В остальном одинаковы.
Ketmar (2006-07-07 13:55:00) [2]>Zilog_ © (06.07.06 11:23) [20]
натурально, перестала. потому как раньше у тебя тип вызова callback был register. но то, что нет AV, вовсе не значит, что работает верно.
Desdechado (2006-07-07 12:46:00) [3]> stdcall и cdecl
а справку почитать?
Zilog_ (2006-07-07 12:44:00) [4]Да, я заметил, то что через некоторое врем вылетает ошибка причем, ни каких действий не производиться. Соответственно, как тогда ее отловить не имею представления? Все-таки вчем приниципиальная разница директив stdcall и cdecl?
evvcom (2006-07-07 12:08:00) [5]> [20] Zilog_ © (06.07.06 11:23)
Рано или поздно ты ее словишь, так как со стеком происходят "невероятные" действия. Могут наблюдаться "неожиданные" изменения значений переменных и прочие "непонятные" вещи.
Zilog_ (2006-07-06 11:23:00) [6]
> icWasya © (05.07.06 16:19) [18]
> __declspec(dllexport) и __declspec(dllimport) всё-таки stdcall;
>
> <Цитата>
>
>
> evvcom © (05.07.06 17:12) [19]
> > [18] icWasya © (05.07.06 16:19)
>
> Значит в [15] автор только подумал, что проконало.
Ошибка с AV перестала вылетать, при обработке CallBack функции
evvcom (2006-07-05 17:12:00) [7]> [18] icWasya © (05.07.06 16:19)
Значит в [15] автор только подумал, что проконало.
icWasya (2006-07-05 16:19:00) [8]__declspec(dllexport) и __declspec(dllimport) всё-таки stdcall;
REA (2006-07-05 16:06:00) [9]extern "C" это [14], а формат вызова описан там, где определены __declspec(dllexport)
evvcom (2006-07-05 14:20:00) [10]> значит для всех функций нужно задавать такой параметр? cdecl
Откель я знаю, для всех или не для всех? Надо понимать, что это такое, и смотреть в сишные хедеры. Отсюда и делать выводы.
Только это не параметр. Это директива. См. соглашения о вызовах.
Zilog_ (2006-07-05 14:17:00) [11]
> procedure EventMessage(...); cdecl; и TEventMessage =procedure(.
> ..); cdecl;
Действительно проканало, значит для всех функций нужно задавать такой параметр? cdecl
Игорь Шевченко (2006-07-05 12:24:00) [12]
> По-моему, именно так надо понимать extern "C"
extern "C" надо понимать, как отсутствие манглинга, то есть, к имени функции компилятор не приделывает закодированный список параметров.
evvcom (2006-07-05 12:13:00) [13]> define SIPXTAPI_API extern "C" __declspec(dllimport)
Ну тогда function sipxLineListenerAdd(...): ...; cdecl;
По-моему, именно так надо понимать extern "C" __declspec.
Для пущей уверенности поищи еще CALLBACKPROC и если там тоже extern "C" __declspec, то и procedure EventMessage(...); cdecl;и TEventMessage =procedure(...); cdecl;
BiN (2006-07-05 12:02:00) [14]
> > А где сами то типы объявлены? А формат вызова точно stdcall,
>
> > а не cdecl?
> > unsigned int это все же word наверно
>
>
> А как это узнать? :)
unsigned int - это DWORD он же cardinal
Zilog_ (2006-07-05 11:51:00) [15]
> А где сами то типы объявлены? А формат вызова точно stdcall,
> а не cdecl?
> unsigned int это все же word наверно
А как это узнать? :)
Zilog_ (2006-07-05 11:48:00) [16]
> Важно также привести описания SIPXTAPI_API, SIPX_RESULT,
> а также твой TEventMessage. И учесть [6]
#if defined(_WIN32)
# ifdef SIPXTAPI_EXPORTS
# define SIPXTAPI_API extern "C" __declspec(dllexport) /**< Used for Win32 imp lib creation */
# else
# define SIPXTAPI_API extern "C" __declspec(dllimport) /**< Used for Win32 imp lib creation */
# endif
#else
# define SIPXTAPI_API extern "C" /**< Assume extern "C" for non-win32 platforms */
#endif
.....
typedef enum SIPX_RESULT
{
SIPX_RESULT_SUCCESS = 0, /**< Success */
SIPX_RESULT_FAILURE, /**< Generic Failure*/
SIPX_RESULT_NOT_IMPLEMENTED, /**< Method/API not implemented */
SIPX_RESULT_OUT_OF_MEMORY, /**< Unable to allocate enough memory to perform operation*/
SIPX_RESULT_INVALID_ARGS, /**< Invalid arguments; bad handle, argument out of range,
etc.*/
SIPX_RESULT_BAD_ADDRESS, /**< Invalid SIP address */
SIPX_RESULT_OUT_OF_RESOURCES, /**< Out of resources (hit some max limit) */
} SIPX_RESULT ;
Мое ....
TEventMessage =procedure (SIPX_CALL:cardinal; SIPX_LINE:cardinal; Major:integer; Minor:integer; UserData:pointer);
evvcom (2006-07-05 10:54:00) [17]> unsigned int это все же word наверно
DWORD или Longword тогда уж. Cardinal более правильно.
> [5] Zilog_ © (05.07.06 10:30)
Важно также привести описания SIPXTAPI_API, SIPX_RESULT, а также твой TEventMessage. И учесть [6]
REA (2006-07-05 10:44:00) [18]Не, cardinal правильнее наверно или Longword
REA (2006-07-05 10:41:00) [19]А где сами то типы объявлены? А формат вызова точно stdcall, а не cdecl?
unsigned int это все же word наверно
Ketmar (2006-07-05 10:40:00) [20]а для EventMessage кто будет соглашение указывать?