![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подключение 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';