Экспорт функций из DLL в Delphi
От: Gluk5000  
Дата: 17.10.04 17:34
Оценка:
Этот вопрос наверно уже 1000 раз задавался, но тем не менее.
Есть DLL, есть lib для VC++, есть хидер .h
Пример функции из хидера

#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)) && !defined(_NI_mswin16_)
#define _VI_FAR
#define _VI_FUNC __stdcall
#define _VI_FUNCC __cdecl
#define _VI_FUNCH __stdcall
#define _VI_SIGNED signed
#elif defined(_CVI_) && defined(_NI_i386_)
#define _VI_FAR
#define _VI_FUNC _pascal
#define _VI_FUNCC
#define _VI_FUNCH _pascal
#define _VI_SIGNED signed
#endif

typedef unsigned long ViUInt32;
typedef _VI_SIGNED long ViInt32;
typedef unsigned short ViUInt16;
typedef _VI_SIGNED short ViInt16;
typedef char ViChar;
typedef ViChar* ViString;
typedef ViString ViRsrc;
typedef double ViReal64;
typedef ViUInt16 ViBoolean;
typedef ViInt32 ViStatus;
typedef ViUInt32 ViSession;

ViStatus _VI_FUNC rsnrpz_init(
ViRsrc resourceName,
ViBoolean IDQuery,
ViBoolean resetDevice,
ViSession* pInstrumentHandle
);

Как лучше всего использовать сию DLL в проекте на Delphi. Использую JEDI версии 2.

Интересуют следующие вопросы:
1. Использовать статическое или динамическое подключение библиотеки? Как использовать и то, и то подключение?
2. Если использовать статическое подключение, то как переписывать хидер под Delphi? Как подключать DLL к проекту.
3. Если использовать динамическое подключение, то как передавать параметры в функцию из примера например? Как описать указатель на функцию?

Пытался использовать динамическое подключение. Сделал такой указатель:
type
Trsnrpz_init = function(
const resourceName: AnsiString;
IDQuery: Word;
resetDevice: Word;
var pInstrumentHandle: Cardinal): Smallint;
var
rsnrpz_init: Trsnrpz_init;

begin
if LoadModule(Module, 'rsnrpz_32.dll') then
begin
rsnrpz_init := GetModuleSymbol(Module, 'rsnrpz_init'); //Ищем функцию и даже находим
tst := rsnrpz_init('USB:*', 1, 1, RPZ_Session); //Все нормально, но такое чувство, что параметры неправильно передаются
end;
end;

Лишнее опустил. Можете попинать меня, но лучше напишите как надо делать. Если что могу дать ссылку на библиотечку.

P.S. На Delphi не пишу. Нет желания. Использую С и ASM и не под x86. Так что за незнание WinAPI не пинайте и т.д. и т.п. Соответственно в программировании под Windows я полный дуб. Но быстро учусь.
P.S.S. Если увидите ошибки в посте — не обессудьте. На клаве нет русских букв.
... << RSDN@Home 1.1.3 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.