Главная страница
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.011 c
3-1207905476
Новичек
2008-04-11 13:17
2008.10.12
Поля BOLLEAN в FireBird


2-1220814318
Age
2008-09-07 23:05
2008.10.12
Ребята, подскажите кто знает!


15-1219248023
sqler
2008-08-20 20:00
2008.10.12
простой SQL запрос


2-1220854065
Matveih1
2008-09-08 10:07
2008.10.12
Как при загрузке пакета использовать имеющееся подключение к БД?


15-1219385138
vajo
2008-08-22 10:05
2008.10.12
Про активацию Windows XP