Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.04.2009, 09:29
vl1639 vl1639 вне форума
Прохожий
 
Регистрация: 16.01.2009
Сообщения: 5
Репутация: 10
По умолчанию Есть ли различие в использовании .dll

Можно ли использовать .dll, созданные в C++ или вообще неизвестно где, при написании программы в Дельфи и наоборот. Будет ли доступна процедура помещенная в библиотеку создаваемую Дельфи при написании программы на других языках.
Реально столкнулся со следующей проблемой - просят написать простенькую программку, реализующую процедуру, чисто вычислительную. На входе несколько вещественных чисел - результат - код, размером в один байт. Ее будут использовать какие-то програмеры в своей большой проге. Как будет писаться прога - неизвестно. Варианты с обменом через память и похожие - не проходят, так как программеры недоступны и согласовать с ними ничего не получится.
Можно ли как-нибудь автономно эту проблемку решить.
Ответить с цитированием
  #2  
Старый 09.04.2009, 10:47
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Сообщение от vl1639
Можно ли использовать .dll, созданные в C++ или вообще неизвестно где, при написании программы в Дельфи и наоборот. Будет ли доступна процедура помещенная в библиотеку создаваемую Дельфи при написании программы на других языках.
Реально столкнулся со следующей проблемой - просят написать простенькую программку, реализующую процедуру, чисто вычислительную. На входе несколько вещественных чисел - результат - код, размером в один байт. Ее будут использовать какие-то програмеры в своей большой проге. Как будет писаться прога - неизвестно. Варианты с обменом через память и похожие - не проходят, так как программеры недоступны и согласовать с ними ничего не получится.
Можно ли как-нибудь автономно эту проблемку решить.
вызывать функции DLL созданные на одном языке можно созданной программой\библиотекой в другом языке программирования, только насколько я помню у Delphi есть свои директивы (pascal), но если они сильно не нужны их можно заменить другими (stdcall, cdecl).
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #3  
Старый 09.04.2009, 11:04
vl1639 vl1639 вне форума
Прохожий
 
Регистрация: 16.01.2009
Сообщения: 5
Репутация: 10
По умолчанию

Функции DLL , созданные в какой среде более универсальны, т.е. могут использоваться во всех языках, включая Маткад и пр. Или в Дельфи достаточно указать директиву стандартного вызова и остальное не брать в голову.
Ответить с цитированием
  #4  
Старый 09.04.2009, 11:42
Аватар для AleD
AleD AleD вне форума
Активный
 
Регистрация: 21.02.2009
Адрес: г.Краснокаменск
Сообщения: 383
Репутация: 91
По умолчанию

Цитата:
Сообщение от vl1639
Функции DLL , созданные в какой среде более универсальны, т.е. могут использоваться во всех языках, включая Маткад и пр. Или в Дельфи достаточно указать директиву стандартного вызова и остальное не брать в голову.
это неправильное суждение, функции везде одинаковые, различие лишь в способе очистке стеков, ведь что такое DLL? - это тот же машинный код как и ЕХЕ. Вы вообще пробовали или пока что только теорию шпрэхайте?
Вот так в DLL записывается внешние функции:
Код:
...
function Subtract(a,b: Integer): Integer; stdcall;
begin
  Result := a - b;
end;
...
exports Subtract;
...

А так читаются из DLL:
Код:
...
function Subtract(a,b: Integer): Integer; external 'mylib.dll';
...
или так:
Код:
...
const
  mylib = 'mylib.dll';
...
var
  extfunc: function(a,b: Integer): Integer; external mylib;
...
procedure TForm1.FormCreate(Sender: TObject);
var
  lib: Cardinal;
begin
  lib := LoadLibrary(mylib);
  try
    extfunc := GetProcAddress(lib,pchar('Subtract'));
  finally
    FreeLibrary(lib);
  end;
end;
...
__________________
TAleD = class(TUser)
public
function HelpMe(ASubject, ARequest: String): String;
function GiveMeExample(ASubject: String): TStringList;
procedure WriteReview(APost: Integer; ADescription: TStringList);
end;
Ответить с цитированием
  #5  
Старый 09.04.2009, 17:40
vl1639 vl1639 вне форума
Прохожий
 
Регистрация: 16.01.2009
Сообщения: 5
Репутация: 10
По умолчанию

Я в Дельфи могу и написать и использовать dll-ки. И это довольно просто для моего варианта. Я посмотрел как работают с dll в С++ и увидел, что там все гораздо сложнее и различается для разных версий языка (MS, Borland, Dev..). Мне надо сделать dll-ку с использованием такого варианта языка, чтобы ее можно было по возможности просто применять в разных вариантах программ.
Ответить с цитированием
  #6  
Старый 09.04.2009, 17:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Синтаксис импорта dll зависит от языка. А вот сама dll от языка не зависит. Не очень понятно написал...

Короче, если формат описания функции в dll соответсвует некоторому общепринятому формату, то не важно на каком языке написана сама dll и программа, ее использующая. Наиболее универсальное соглашение для Дельфей stdcall (аналог PASCAL в C/C++).
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:17.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025