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

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

Подключение dll на C++ Builder к проекту на Delphi [D7, XP]


Ivolg ©   (2008-08-30 13:37:00) 

Привет всем. При подключении dll написаной на C++ Builder к проекту на Delphi возникает ошибка, что неможет найти точку входа в библиотеку ? В чем может быть проблема ? Пишу так:

C++ Builder:

extern "C" __declspec(dllexport) AnsiString Test (AnsiString);

AnsiString Test (AnsiString Source)
{
  ShowMessage(Source);
  return "1";
}

Delphi:

....
function Test (Source: String): String; pascal; far; external 'mydll.dll' name 'Test';

implementation

....

procedure TForm1.Button1Click(Sender: TObject);
begin
      Caption := Test ('aaaa');
end;


Ivolg   (2008-08-31 18:26:00) [1]

Все ок. Использовал cdecl; вместо stdcall;


Ivolg   (2008-08-31 18:24:00) [2]

Возникла проблема, после передачи параметров в функцию Test и ее отработки, возникает ошибка "Access violation at 0x000000000"


Ivolg   (2008-08-31 17:34:00) [3]

Сенк, все работает =) Функция в длл называлась _Test. A AnsiString если мне не изменяет память, это тоже самое что и String в делфи.


Ega23   (2008-08-31 14:15:00) [4]


> Попробуй использовать директиву stdcall:


Почему stdcall???

Где ты тут stdcall увидел?
extern "C" __declspec(dllexport) AnsiString Test (AnsiString);

AnsiString Test (AnsiString Source)
{
 ShowMessage(Source);
 return "1";
}


По сабжу:

1. Если речь о параметрах вызова, и если это Билдер, то попробуй директиву cdecl указать. У меня именно так работало.
2. Действительно просмотри заголовки функций в dll, вполне возможно, что вместо Test там будет Test## какой-нибудь.
3. А что такое в билдере AnsiString?


Ivolg   (2008-08-31 08:24:00) [5]

Смотрел, вроде все норм.


palva   (2008-08-30 17:38:00) [6]

Не может найти, значит такого имени нет. Загляните внутрь dll и посмотрите, в каком виде там лежит имя Test. Скорее всего оно дополнено там кучей символов, что по умолчанию делает C++.


Deltas   (2008-08-30 14:07:00) [7]

Вероятно, ошибка в экспорте функции из библиотеки


Ivolg   (2008-08-30 13:54:00) [8]

Не работает (


Deltas   (2008-08-30 13:50:00) [9]

The directives near, far, and export refer to calling conventions in 16-bit Windows programming. They have no effect in 32-bit applicationsand are maintained for backward compatibility only.
Попробуй использовать директиву stdcall:
function Test (Source: string): string; stdcall; external 'mydll.dll' name 'Test';


Наверх

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