![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| nas_alex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 8.6.2004 Репутация: нет Всего: нет |
каким образом перекомпилить DLL, которая была написана на Bulder, чтобы ее можно было использовать в VC6?
|
|||
|
||||
| Manve |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 30.7.2004 Репутация: нет Всего: 1 |
А зачем тебе компилить ее? Просто вызывай нужные функции из DLL.
|
|||
|
||||
| nas_alex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 8.6.2004 Репутация: нет Всего: нет |
я ошибся, DLL написана на DELFI, мне сказали, что так просто нельзя вызвать, что там другой порядок передачи параметров.
функции имеет параметры: (par1 string,par2 string,str pchar,kod word), как ее правильно вызвать? |
|||
|
||||
| Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
Другой порядок - это в смысле не __cdecl, а __pascal?
-------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
| Manve |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 30.7.2004 Репутация: нет Всего: 1 |
Вот читай:
__cdecl - стандартный вызов в Си. Параметры передаются через стек, справа налево, то есть первый параметр ляжет в стек последним. Вызывающая функция (та, из которой был инициирован вызов) "правит" стек. __stdcall - стандартный вызов Win32 функций - большая часть функций ядра windows используют именно его. Параметры передаются через стек справа налево. Вызываемая функция правит стек. __pascal - стандартный вызов в языке Pascal. Параметры передаются через стек слева направо. Вызываемая процедура правит стек. __thiscall - стандартный вызов языка C++. Параметры передаются через стек справа налево. В регистре ECX передается указатель this. Вызывающая функция правит стек. __fastcall - вызов используемый Borland C Builder и Delphi. Первый и второй параметры передаются в паре регистров ECX и EDX, остальные - через стек справа налево. Вызываемая функция правит стек Как уже видно из описания, наиболее быстрым в данном случае является вызов __fastcall т.к. первые два параметра передаются через соответствующие регистры, а не через стек. |
|||
|
||||
| Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: -1 Всего: 1 |
По-моему, вопрос был другой. Из уже готовой DLL-ки вызывать функции. Стало быть, они уже объявлены как __stdcall, или __pascal, или там еще как-то. Стало быть, к ним и нужно цепляться по их правилам. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
| Manve |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 30.7.2004 Репутация: нет Всего: 1 |
Пост выше это я из статьи вырезал.
Совершенно верно. Я так понимаяю что можно использовать __pascal в описании прототипа функции и работать с ней как с обычной функцией, а компилятор сам будет заниматься передачей параметров (или я что-то не так понимаю). |
|||
|
||||
| nas_alex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 8.6.2004 Репутация: нет Всего: нет |
так я все таки не понял, как правильно вызвать ф-цию, которая была написана на DILFI?
|
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Схема такая:
Правда я не знаю, что из себя представлят паскалевский тип string. Может быть он не совместим с char *. -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| nas_alex |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 8.6.2004 Репутация: нет Всего: нет |
ошибка выходит error C4226: nonstandard extension used : '__pascal' is an obsolete keyword |
||||
|
|||||
| Yuri Burger |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 11.5.2004 Репутация: нет Всего: нет |
не факт. если во вне выставлен плюсатый интерфейсто VC и Builder имеют разные схемы именования плюсатых функций. |
|||
|
||||
| Manve |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 30.7.2004 Репутация: нет Всего: 1 |
Да но ведь DLL на делфе написана, хотя, в принципе, и там могут быть свои заморочки с именованием функций.
|
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
c4226 - это не ошибка, а warning. У тебя наверное в настройках проекта стоит опция трактовать все варнинги как ошибки. -------------------- Не смей читать мою подпись!!! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |