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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2014, 12:59   #1
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию Возникла проблема с dll

Вот код DLL

Код:
library ColorsToCodsColors;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  SysUtils,
  Windows,
  Dialogs,
  Graphics;

{$R *.res}

Type TCMYK = record
  C, M, Y, K: Byte;
end;
Type THLS = record
  H, L, S : byte;
end;

function max(P1, P2, P3: double): Double;
begin
  if (P1 > P2) then
  begin
    if (P1 > P3) then
    begin
      Result := P1;
    end
    else
    begin
      Result := P3;
    end;
  end
  else if P2 > P3 then
  begin
    result := P2;
  end
  else
    result := P3;
end;

function min(P1, P2, P3: double): Double;
begin
  if (P1 < P2) then
  begin
    if (P1 < P3) then
    begin
      Result := P1;
    end
    else
    begin
      Result := P3;
    end;
  end
  else if P2 < P3 then
  begin
    result := P2;
  end
  else
    result := P3;
end;

function RGBToHLS(R: byte; G: byte; B: byte): THLS;
var
  LR, LG, LB, LH, LL, LS, LMin, LMax: double;
  LHLS: THLS;
  i: Integer;
begin
  LR := R / 256;
  LG := G / 256;
  LB := B / 256;
  LMin := min(LR, LG, LB);
  LMax := max(LR, LG, LB);
  LL := (LMax + LMin) / 2;
  if LMin = LMax then
  begin
    LH := 0;
    LS := 0;
    Result.H := round(LH * 256);
    Result.L := round(LL * 256);
    Result.S := round(LS * 256);
    exit;
  end;
  if LL < 0.5 then
    LS := (LMax - LMin) / (LMax + LMin);
  if LL >= 0.5 then
    LS := (LMax - LMin) / (2.0 - LMax - LMin);
  if LR = LMax then
    LH := (LG - LB) / (LMax - LMin);
  if LG = LMax then
    LH := 2.0 + (LB - LR) / (LMax - LMin);
  if LB = LMax then
    LH := 4.0 + (LR - LG) / (LMax - LMin);
  Result.H := round(LH * 42.6);
  Result.L := round(LL * 256);
  Result.S := round(LS * 256);
end;

Function RGBTOCMYK(R: byte; G: byte; B: byte):TCMYK;
begin
  With Result do begin
    C := 255 - R;
    M := 255 - G;
    Y := 255 - B;
    if C < M then
      K := C
    else
      K := M;
    if Y < K then
      K := Y;
    if k > 0 then
    begin
      c := c - k;
      m := m - k;
      y := y - k;
    end;
  end;
end;

Function ColorToHex(Color:TColor):String;
Begin
  Result :=
      IntToHex(GetRValue(Color), 2) +
      IntToHex(GetGValue(Color), 2) +
      IntToHex(GetBValue(Color), 2) ;
end;

function GetXORColor(const aColor: TColor): TColor;
Type TRec=
   packed record
   r, g, b, dummy: byte
 end;
begin
 Result := aColor;
 with TRec((@Result)^) do
 begin
   if r > 127 then r := 0 else r := 255;
   if g > 127 then g := 0 else g := 255;
   if b > 127 then b := 0 else b := 255;
 end;
end;

function DesktopColor(const x,y: integer): TColor;
var
   c:TCanvas;
begin
   c:= TCanvas.Create;
   c.Handle:= GetWindowDC(GetDesktopWindow);
   result:= GetPixel(c.Handle, x, y);
   c.Free;
end;

function GetKAMColor(Color:TColor):String; stdcall;
begin
  Result :='[$'+
      IntToHex(GetBValue(Color), 2) +
      IntToHex(GetGValue(Color), 2) +
      IntToHex(GetRValue(Color), 2)+']';
end;
exports
  max, min, RGBToHLS, RGBTOCMYK, ColorToHex, GetXORColor,
  DesktopColor, GetKAMColor;
begin
end.
А вот проблемы
Build
[Warning] ColorsToCodsColors.dpr(101): Variable 'LH' might not have been initialized
[Warning] ColorsToCodsColors.dpr(103): Variable 'LS' might not have been initialized
[Hint] ColorsToCodsColors.dpr(73): Variable 'LHLS' is declared but never used in 'RGBToHLS'
[Hint] ColorsToCodsColors.dpr(74): Variable 'i' is declared but never used in 'RGBToHLS'
Alexandr17 вне форума Ответить с цитированием
Старый 15.02.2014, 13:03   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Первые два предупреждения - переменные не инициализированы.
Последние - переменные объявлены, но не используются.
Arigato вне форума Ответить с цитированием
Старый 15.02.2014, 15:59   #3
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

С последними понял и решил проблему а как с первыми быть
Alexandr17 вне форума Ответить с цитированием
Старый 15.02.2014, 16:09   #4
Vad33
Участник клуба
 
Аватар для Vad33
 
Регистрация: 24.07.2009
Сообщений: 638
По умолчанию

Код:
    LH := 0;
    LS := 0;
Перенести в самое начало функции.
** Удача терпелива. **
Vad3333@inbox.ru
Vad33 вне форума Ответить с цитированием
Старый 15.02.2014, 16:48   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
А вот проблемы
Это не проблемы. Проблемы еще будут и весьма вероятно очень большие. Комментарий в начале модуля dll для кого Дельфи пишет?
northener вне форума Ответить с цитированием
Старый 15.02.2014, 16:51   #6
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

пишу на Delphi 7

Скажите а как собственно использовать эти функции из программы но мне надо перед этим делать проверку есть она или нет ее если есть то делаем кнопку активной.

Последний раз редактировалось Stilet; 16.02.2014 в 12:03.
Alexandr17 вне форума Ответить с цитированием
Старый 15.02.2014, 17:20   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Чтобы проверить наличие функций, надо динамически DLL подключить в программу.
Arigato вне форума Ответить с цитированием
Старый 15.02.2014, 17:57   #8
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

Можете написать код но чтобы программа запускалась и работала и без этого длл

Цитата:
Сообщение от Alexandr17 Посмотреть сообщение
Можете написать код но чтобы программа запускалась и работала и без этого длл
Мне не нужно проверять функции мне нужно проверка длл. если он есть то кнопка активна если нет то заблокирована.

Последний раз редактировалось Stilet; 16.02.2014 в 12:04.
Alexandr17 вне форума Ответить с цитированием
Старый 15.02.2014, 18:14   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

TC, обратите внимание на пост #5 или воспользуйтесь переводчиком, http://translate.google.ru подойдет. Если и это не поможет, то подсказка - string -> pchar.

Цитата:
Можете написать код но чтобы программа запускалась и работала и без этого длл
А где тут знаки препинания? Неоднозначно воспринимается.

Цитата:
если он есть то кнопка активна если нет то заблокирована
fileexists(), как вариант. Либо проверка по loadLibrary().
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 15.02.2014 в 18:17.
raxp вне форума Ответить с цитированием
Старый 15.02.2014, 19:33   #10
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

Код:
procedure TMain1.ADDCOLORKAMExecute(Sender: TObject);
Var GetKAMColor: Function(Color:TColor):String;
  LibHandle: Hmodule;
begin
  LibHandle:=dsLoadLibrary('ColorsToCodsColors\ColorsToCodsColors.dll');
  if LibHandle <> 0 then
  begin
    @GetKAMColor:=GetProcAddress(LibHandle, 'GetKAMColor');
    if @GetKAMColor <> nil then
      If CD1.Execute Then
        MemoText.SelText:=GetKAMColor(CD1.Color);
    FreeLibrary(LibHandle);
  end;
end;

Function dsLoadLibrary(NameFile:String):Hmodule;
Begin
  Result:=Windows.LoadLibrary(PAnsiCHar(ExtractFilePath(ParamStr(0))+'library\'+NameFile));
end;


Как исправить и что я не так делаю
Alexandr17 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возникла проблема с++ GanJIk Помощь студентам 2 28.02.2012 23:45
Возникла проблема... ycropp HTML и CSS 4 16.11.2011 18:43
возникла проблема dvarv Общие вопросы C/C++ 7 19.04.2011 21:03
Возникла проблема! Файзулка Помощь студентам 1 22.11.2009 21:42