Форум: "Начинающим";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
ВнизПодключение dll на C++ Builder к проекту на Delphi Найти похожие ветки
← →
Ivolg © (2008-08-30 13:37) [0]Привет всем. При подключении 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;
← →
Deltas © (2008-08-30 13:50) [1]The directives near, far, and export refer to calling conventions in 16-bit Windows programming. They have no effect in 32-bit applications and are maintained for backward compatibility only.
Попробуй использовать директиву stdcall:function Test (Source: string): string; stdcall; external "mydll.dll" name "Test";
← →
Ivolg © (2008-08-30 13:54) [2]Не работает (
← →
Deltas © (2008-08-30 14:07) [3]Вероятно, ошибка в экспорте функции из библиотеки
← →
palva © (2008-08-30 17:38) [4]Не может найти, значит такого имени нет. Загляните внутрь dll и посмотрите, в каком виде там лежит имя Test. Скорее всего оно дополнено там кучей символов, что по умолчанию делает C++.
← →
Ivolg © (2008-08-31 08:24) [5]Смотрел, вроде все норм.
← →
Ega23 © (2008-08-31 14:15) [6]
> Попробуй использовать директиву 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 17:34) [7]Сенк, все работает =) Функция в длл называлась _Test. A AnsiString если мне не изменяет память, это тоже самое что и String в делфи.
← →
Ivolg © (2008-08-31 18:24) [8]Возникла проблема, после передачи параметров в функцию Test и ее отработки, возникает ошибка "Access violation at 0x000000000"
← →
Ivolg © (2008-08-31 18:26) [9]Все ок. Использовал cdecl; вместо stdcall;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.054 c