Ciber SLasH

|
Posted: Thu Jul 25, 2013 22:40 Post subject: |
|
|
Ларчик просто открывался
Оказалось у меня вываливался в ошибки при закрытии SGViewer при статическом запуске библиотеки.
Перешёл на динамический запуск:
Code: | implementation
{$R *.dfm}
type
TListLoad = function (parentWnd: HWND; FileToLoad: PChar; ShowFlags: integer): HWND; stdcall;
TListCloseWindow = procedure (plugWnd: HWND); stdcall;
const
LCP_FITTOWINDOW = 2;
DLLName = 'SGViewer.wlx';
var
hPlug: HWND;
hDLL: THandle;
ListLoad: TListLoad;
ListCloseWindow: TListCloseWindow;
procedure TForm1.FormActivate(Sender: TObject);
begin
hDLL := LoadLibrary(DLLName);
@ListLoad := GetProcAddress(hDLL, 'ListLoad');
@ListCloseWindow := GetProcAddress(hDLL, 'ListCloseWindow');
hPlug := ListLoad(Form1.Handle, 'D:\tmp\1.bmp', LCP_FITTOWINDOW);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ListCloseWindow(hPlug);
FreeLibrary(hDLL);
end;
|
ошибки исчезли.
Никакие найденные окна не хотят работать с SGViewer-ом, т.е. при вызове ListLoad с передачей дескриптора найденного окна (FindWindow('TTOTAL_CMD', nil)) - картинка не загружается. Нужно создавать своё окно и передавать его дескриптор в ListLoad.
PS: OS Win2003 Server Enterprice R2 SP2 Ru x86
PPS: rundll32 и winapiexec не помогли в данном вопросе.
PPPS: вопрос темы решён написание своей программы (но можно заюзать WLX_Host, который тоже прекрасно справился с заданием), благодарю MVV за наводку на динамический запуск плагина. |
|