Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нужна помощь в переводе файлов заголовков из С++ в Delphi [D7, Win95/98, WinME, NT4, Win2k, WinXP]


Страницы:   1 2

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 кто будет соглашение указывать?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо