Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2010, 19:22   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию Логарифм по основанию а от b

Вот есть такой простецкий кодик:
Код:
library ExtraCode;

uses
  SysUtils,
  Classes;

{$R *.res}

Function Log(A,B:Extended):Extended;stdcall;
Begin
      Result:=Ln(B)/Ln(A);
End;

Exports
        Log;
begin
end.
И такой код его использования:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TLog = function (A,B:Extended):Extended;
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Edit3: TEdit;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
    hndDll:THandle;
    res:TLog;
    A,B:Extended;
begin
      A:=StrToFloat(Edit1.Text);
      B:=StrToFloat(Edit2.Text);
      hndDll:=LoadLibrary('ExtraCode.dll');
      if hndDll<>0 Then
      Begin
            @res:=getProcAddress(hndDll,'Log');
            if addr(res)<>nil then
            Edit3.Text:=FloatToStr(Res(A,B))
            else
            showMessage('Function does not detected...');
      End
      Else
      ShowMessage('Dll is not detected!');
      freeLibrary(hndDll);
end;

end.
Но почему то выдаётся обратный результат, т.е. не логарифм b по основанию а, а наоборот(Логарифм 32 по основанию 2 равен 5, а в моей проге 0,2). Где я накосячил?


Хах, а теперь заметил, что если вызывать функцию
Код:
function Log(A,B:Extended):Extended;
begin
        result:=Ln(B)/Ln(A);
end;
Не из DLL, то всё прекрасно и правильно.


И ещё: при статической загрузке Dll результат не совпадает с результатом при динамической загрузке....

Последний раз редактировалось _-Re@l-_; 19.12.2010 в 19:40.
_-Re@l-_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Логарифм - Исключения[C++] ArniLand Общие вопросы C/C++ 2 04.05.2010 15:11
Как в С++ записывается логарифм по основанию? Гамбит Помощь студентам 27 14.03.2010 23:03
Вычитание чисел по основанию 4 и 16. Stager Общие вопросы C/C++ 1 21.01.2009 00:13
Логарифм в паскале gamer123 Помощь студентам 1 20.01.2008 15:15