Здравствуйте, 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]