Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.12;
Скачать: CL | DM;

Вниз

Подключение 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
2-1220596870
_Alex
2008-09-05 10:41
2008.10.12
CreateFileMapping не возвращает ошибку, когда отключен swap-файл


15-1219251940
ProgRAMmer Dimonych
2008-08-20 21:05
2008.10.12
Своя замена для Windows Explorer


2-1220459844
Mariks
2008-09-03 20:37
2008.10.12
InternetOpenURL


15-1219053835
Vlad Oshin
2008-08-18 14:03
2008.10.12
Microsoft® Virtual PC 2007, что-то не получается сеть настроить


13-1120682255
VMcL
2005-07-07 00:37
2008.10.12
Замечания/пожелания