Re[2]: Выполнение процедур из другого приложения.
От: vasko  
Дата: 10.06.04 01:33
Оценка:
Здравствуйте, Nuald, Вы писали:
дело в том что я пишу на делфях и не знаком с си++
ф структура вызова длл следующая: вызываем из *.dpr файла и ставим обработчик событий

procedure ShowDLLForm(hWnd: THandle);
type
  // Прототип функции из DLL. Напрямую написать Uses нельзя, т.к.
  // при этом в проект скомпилируется и форма.
  TDoDLLForm = function (lpNewHint: PChar; iSize: Integer): Boolean; stdcall;
const
  FormRunning: Boolean = FALSE;
  // Флаг "Форма загружена". Для предотвращения повторной загрузки
  // формы
var
  hDLL: THandle;
  DoDLLForm: TDoDLLForm;
  Buffer: array[0..50] of Char;
begin
  if FormRunning then
    Exit;
  hDLL := LoadLibrary('resurs.dll');
  if hDLL = 0 then
    MessageBox(0, 'No library resurs.dll found', NIL, MB_OK)
  else begin
    DoDLLForm := GetProcAddress(hDLL, 'DoDLLForm');
    if Assigned(DoDLLForm) then begin
      try
        lstrcpy(Buffer, Hint);
        // Функции StrCopy требуют uses SysUtils, что сразу
        // увеличивает EXE файл на 25 Кбайт. Используем API
        // аналоги
        if DoDLLForm(@Buffer, SizeOf(Buffer)) then begin
          lstrcpy(Hint, Buffer);
          TaskBarModifyIcon(hWnd, 1, NIF_TIP, 0, Hint);
        end;
      finally
      end;
    end;
  end;
  FreeLibrary(hDLL);
end;

обработчик событий:

[pascal]

  Application.Initialize;
  dm:=Tdm.Create(nil);
  ShowWindow(hWnd, SW_HIDE);
  Application.Run;
  // Цикл обработки сообщений
  while GetMessage(Msg, 0, 0, 0) do begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;


[/pascal]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.