![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подключение DLL написаной на VC++ в проекте Delphi [D7, WinXP]
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';