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

Вниз

Импорт из DLL   Найти похожие ветки 

 
Eagle Owl ©   (2003-10-07 17:27) [0]

Доброго времени суток, мастера!
Проблема такая: есть DLL, написанная на С++ и есть
к ней заголовочный файл(см. ниже).
Как правильно импортировать из неё процедуру, а то я чё-то не пойму.

//--------------------------------------------------------------

#include <sysutils.hpp>
//--------------------------------------------------------------

struct TLosRec
{
int Year;
int Month;
int Day;
};
//--------------------------------------------------------------

struct TInputDates
{
TDateTime AppDate;
TDateTime MisDate;
};
//--------------------------------------------------------------

__declspec(dllimport) void CalcLos(
const TInputDates * AInputDates, const int AInputDates_Size,
TLosRec &ALosRec);
//--------------------------------------------------------------


 
clickmaker ©   (2003-10-07 17:33) [1]

type
TLosRec = record
Year: integer;
Month: integer;
Day: integer;
end;

TInputDates = record
AppDate: TDateTime;
MisDate: TDateTime;
end;

procedure CalcLos(const AInputDates: TInputDates; AInputDates_Size: integer; var ALosRec: TLosRec); external "DLLFILENAME.DLL";


 
Eagle Owl ©   (2003-10-07 17:47) [2]

Так пробовал...
Ошибка получается - "Точка входа в процедуру CalcLos не найдена в библиотеке DLL loslib.dll"


 
PVOzerski ©   (2003-10-07 17:47) [3]

Надо бы еще с calling conventions разобраться. Скорее всего, это значит найти определение __declspec(dllimport).


 
PVOzerski ©   (2003-10-07 17:50) [4]

Есть еще один момент - name mangling. Возьмите tdump и посмотрите, как фактически выглядит имя функции в dll-и. Если окажется, например, CalcLos@12 или _CalcLos, так и указывайте имя после ключевого слова name.


 
Eagle Owl ©   (2003-10-07 18:13) [5]

Посмотрел...
Фактически имя такое же, как и в заголовочном файле.
В чём же проблема...


 
clickmaker ©   (2003-10-07 18:30) [6]

Можно еще по индексу попробовать. tdump"ом определить.

procedure CalcLos(const AInputDates: TInputDates; AInputDates_Size: integer; var ALosRec: TLosRec); external "loslib.dll" index 1;


 
Eagle Owl ©   (2003-10-07 21:40) [7]

Спасибо, по индексу работает!
Но всё-таки интересно, почему по имени не получается...
Может кто знает?


 
Иван Шихалев ©   (2003-10-07 22:50) [8]

А если name явно прописать?


 
icWasya ©   (2003-10-08 09:52) [9]

[7]
>Но всё-таки интересно, почему по имени не получается...
а приведи текст, который выдаёт TDUMP


 
Eagle Owl ©   (2003-10-08 13:15) [10]

> icWasya © (08.10.03 09:52) [9]
> а приведи текст, который выдаёт TDUMP

TDUMP выдаёт CalcLos(const TInputDates *, const int, TLosRec&)
Пробовал указывать так-же(то-есть с параметрами)
name "CalcLos(const TInputDates *, const int, TLosRec&)"
всё равно не получается...



Страницы: 1 вся ветка

Текущий архив: 2003.10.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
8-65553
rog
2003-06-19 13:14
2003.10.20
RGB цвет в CMYK цвет


3-65393
Nick-From
2003-09-05 14:18
2003.10.20
Избежание переполнения таблиц


1-65483
Aleksandr
2003-10-08 16:03
2003.10.20
Как сделать счетчик сессий ActiveX объекта?


1-65500
Duckslayer
2003-10-07 02:30
2003.10.20
Чтение файлов


4-65680
й
2003-08-15 19:09
2003.10.20
Как найти в реестре строку?