Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подключение DLL написаной на VC++ в проекте Delphi [D7, WinXP]


Страницы:   1 2

LexusU ©   (2006-12-01 14:39:00) 

Имеются библиотеки написанные на VC++. Известно какие процедуры в этих библиотеках есть. пытаюсь подключить DLL в Delphi. Проект компилируется без ошибок. При запуске проекта выпадает ошибка - пишет что точка входа процедуры в DLL не найдена.

Привожу исходники:

{== Интерфейсный модуль ==}
{ Здесь описываю процедуры из DLL, затем этот модуль подключаю к основному}

unit UnitFromVC;

interface

{$IFNDEF FromVC}
procedure OpenExchange (Signature:string);stdcall;
{$ENDIF}

implementation

{$IFNDEF FromVC}
procedure OpenExchange; external 'IEC104Chan.dll' name 'OpenExchange';
{$ENDIF}

end.

...........................

{== Модуль основной  ==}
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
UnitFromVC ;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   sig:string;
begin

sig:='Test string';
OpenExchange(sig);

end;

end.

Что я не так делаю?


MBo   (2006-12-01 15:08:00) [21]

>Signature: string
Такого точно не должно быть

>точка входа процедуры в DLL не найдена
Используется ли в DLL искажение имен (Name Mangling)?
Если да (посмотри утилитой TDump из Delphi/bin), то имена функций будут типа _OpenExchange@8****


clickmaker   (2006-12-01 14:45:00) [22]


> {$IFNDEF FromVC}
> procedure OpenExchange (Signature:string);stdcall;
> {$ENDIF}

а это что? и зачем 2 раза
просто
procedure OpenExchange; stdcall; external 'IEC104Chan.dll' name 'OpenExchange';


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо