Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1219221012
Petr V. Abramov
2008-08-20 12:30
2008.10.12
Wifi


2-1220262994
gln
2008-09-01 13:56
2008.10.12
Прокрутка RichEdit


15-1219388772
rx275d7_jedi
2008-08-22 11:06
2008.10.12
Delphi 7 or Delphi 2005


15-1219566032
@!!ex
2008-08-24 12:20
2008.10.12
Как правильно?


15-1219059232
Мозгобой
2008-08-18 15:33
2008.10.12
Проблема с DVD-Rom ом на ноутбуке.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский