Форум TRACE MODE: техническая поддержка   
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 5 » TRACE MODE 5 бесплатная версия / TRACE MODE 5 Free version » DLL на Delphi

   
Автор / Author Тема / Topic: DLL на Delphi
ilya
Forum Professor / Завсегдатай форума
Участник № / Member № 469


Icon 1 отправлено / posted      Профиль для / Profile for ilya           Редактировать/удалить сообщение / Edit/Delete Post 
Здравствуйте уважаемые участники форума. Кто-нибудь из вас пытался перевести с 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 / молящийся]

Сообщения / Posts 216 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Черемнов Дмитрий
Junior Member / Новичок
Участник № / Member № 721


Icon 1 отправлено / posted      Профиль для / Profile for Черемнов Дмитрий           Редактировать/удалить сообщение / Edit/Delete Post 
В интерфейсе для 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);

Сообщения / Posts 2 | Из / From: Казахстан  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
ilya
Forum Professor / Завсегдатай форума
Участник № / Member № 469


Icon 1 отправлено / posted      Профиль для / Profile for ilya           Редактировать/удалить сообщение / Edit/Delete Post 
Здравствуйте Дмитрий. Большое спасибо за ответ. То что Вы предлагаете, конечно тоже вариант. Но мне все таки удалось перевести пример с 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?

Сообщения / Posts 216 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

   Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2