This is topic DLL на Delphi in forum TRACE MODE 5 бесплатная версия / TRACE MODE 5 Free version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/18/t/000114.html

Posted by ilya (Участник № / Member № 469) on :
 
Здравствуйте уважаемые участники форума. Кто-нибудь из вас пытался перевести с C++ на Delphi пример DLL сложения двух чисел? Третий день бьюсь. Пишу так:

library FBD1;

type
PDO_DEFAULT = ^DO_DEFAULT;
DO_DEFAULT = packed record
q_in:integer;
q_out:integer;
q_int:integer;
nftype:integer;
name:array[0..7] of char;
fname:array[0..7] of char;
end;

procedure zFBD_DLL_info(buf:Pointer);
var dd:PDO_DEFAULT;
begin
dd:=buf; //Получаю buf =$1B00, приводим к типу
//PDO_DEFAULT
dd^.q_in:=3;// Вот тут получаю:access [duno / незнайка]
//violation at
//0x01d08bfc:write
//of address 0x00001b00
dd^.q_out:=1;
dd^.q_int:=0;
dd^.nftype:=17;
dd^.name:='fbd0';
dd^.fname:='fbd0';
end;

exports
zFBD_DLL_info

end.

Буду рад если кто-нибудь прокомментирует это со знанием дела.
[prey / молящийся]
 
Posted by Черемнов Дмитрий (Участник № / Member № 721) on :
 
В интерфейсе для FBD-dll применяется иной тип
вызова функций - MSVisualC++ (не Borland'a).
Опишите FBD-dll на MSVisualC++, функциональность
задавайте в библиотеках Delphi, C++Buider'e,
из fbd.dll обьявите вызовы требуемых функций,
//---------------
//FBD0.CPP,
//импорт
extern "C" float __fastcall Summa(int,int);

__declspec(dllexport) int FBD_DLL( float*, float*, int*, int* );
__declspec(dllexport) void zFBD_DLL_info( void* );
__declspec(dllexport) void zFBD_DLL_varname( char* );

//---------------
//Ваша библиотека (C++Buider)
//export в fbd#.dll
extern "C" float __msfastcall __export Summa(unsigned short,unsigned short);
 
Posted by ilya (Участник № / Member № 469) on :
 
Здравствуйте Дмитрий. Большое спасибо за ответ. То что Вы предлагаете, конечно тоже вариант. Но мне все таки удалось перевести пример с C++ на Delphi напрямую, не используя промежуточное звено. Приведенный мною код правильный, а все дело в том, что функции моей библиотеки на Delphi вызывались не в том порядке [gigi / Гы-Гы]
После того как секция exports библиотеки на Delphi была переписана следующим образом:
exports
FBD_DLL index 1 name 'FBD_DLL',
zFBD_DLL_info index 2 name 'zFBD_DLL_info',
zFBD_DLL_varname index 3 name 'zFBD_DLL_varname';
end.
Да, и конечно же, все экспортируемые функции должны иметь директиву cdecl.

Кстати у Вас есть опыт разработки ActiveX компонентов на Delphi для Trace Mode?
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2