|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Дек 23, 2003 16:46:07
.686
.MMX
.XMM
.MODEL FLAT, STDCALL
OPTION CASEMAP:none
INCLUDE windows.inc
INCLUDE kernel32.inc
INCLUDE user32.inc
INCLUDE gdi32.inc
INCLUDE opengl32.inc
INCLUDE scrnsave.inc
INCLUDELIB kernel32.lib
INCLUDELIB user32.lib
INCLUDELIB gdi32.lib
INCLUDELIB scrnsave.lib
INCLUDELIB kernel32.lib
INCLUDELIB user32.lib
INCLUDELIB gdi32.lib
INCLUDELIB opengl32.lib
INCLUDELIB glu32.lib
INCLUDELIB scrnsave.lib
Start:
ScreenSaverProc proc EXPORT hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
invoke DefScreenSaverProc, hWnd, uMsg, wParam, lParam
ret
ScreenSaverProc endp
ScreenSaverConfigureDialog proc hWnd:DWORD, Msg:DWORD,wParam:DWORD, lParam:DWORD
xor eax,eax
ret
ScreenSaverConfigureDialog endp
end Start
Что то неверно? При запуске простит библиотеку scrnsave.dll Насколько я понимаю, модуль scrnsave.lib реализует DefScreenSaverProc - обработка завершающих событий, и анализ командной строки плюс создание окна с оконной процедурой определенной в коде под именем ScreenSaverProc и установкой родительского окна... Не получается что то у меня. Пример на C выглядит так:
/********************************************************************* *******
PROGRAM: SSAVER.C
PURPOSE: A bare bones shell for a Win32 screen saver
********************************************************************** ******/
#include <windows.h> /* required for all Windows applications */
#include <stdlib.h>
#include <scrnsave.h>
#include "resource.h"
#include "doframe.h"
HANDLE hInst; /* current instance */
UINT wTimer = 0; // Timer id
/*
* RegisterDialogClasses -- Entry point for registering window classes
* required by configuration dialog box.
*/
BOOL WINAPI RegisterDialogClasses(HINSTANCE hInst)
{
return 1;
}
/*
* ScreenSaverConfigureDialog -- Process the screen saver configuration
* messages for the config dialog
*
*/
BOOL CALLBACK ScreenSaverConfigureDialog(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK: // Exit the dialog
case IDC_EXIT:
EndDialog(hWnd, 42);
break;
}
break;
default:
return FALSE;
break;
}
return TRUE;
}
/********************************************************************* *******
FUNCTION: ScreenSaverProc(HWND, UINT, WPARAM, LPARAM)
PURPOSE: Processes screen saver messages
********************************************************************** ******/
LONG CALLBACK ScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg) {
case WM_TIMER:
// Show a frame of our animation
DrawFrame(hWnd);
return 0;
case WM_ERASEBKGND:
// Seed the random number generator
srand(GetTickCount());
// Tell windows to send us timer messages at 50ms intervals
wTimer = SetTimer(hWnd, 0, 50, NULL);
break;
case WM_DESTROY: /* message: window being destroyed */
if (wTimer) // Stop our timer if it was created
KillTimer(hWnd, wTimer);
break;
}
return DefScreenSaverProc(hWnd, msg, wParam, lParam);
}
|
|
|
Дата: Дек 24, 2003 09:10:17 vyacheslav Посмотри, в "исходниках" есть какой-то пример скринсейвера. |
|
|
Дата: Дек 24, 2003 12:35:04 · Поправил: q_q |
|
|
Дата: Дек 24, 2003 15:25:07 · Поправил: vyacheslav Потому что ... Start: ScreenSaverProc ... end Start Теорию я читал и не раз, и в том числе указанную ссылку, и писал на C работающие ScreenSaver. Ведь если бы теория была ясна, я бы не задавал вопрос. разве трудно указать где я ошибаюсь. Кстити и Start я тоже убрал, тогда при сборке линкер ругается, что нет точки входа. |
|
|
Дата: Дек 24, 2003 16:17:15 Теорию я читал и не раз ... и писал на C работающие ScreenSaver Не обижайся. Дело в том, что Си+scrnsave.lib скрывают от тебя часть работы. Внутри scrnsave.lib сидят некоторые необходимые для создания хранителя экрана функции. В том числе и WinMain, которая и является, с точки зрения разработчика на Си, стартовой функцией приложения. Поэтому от программиста требуется только реализовать приведенные тобой выше функции. Конкретно. Т.е. помимо реализации приведенных тобой asm-функций, твоя задача, как программиста на assemblere, отчасти повторить Си-startup-код, т.е. обеспечить вызов scrnsave.WinMain. |
|
|
Дата: Дек 24, 2003 18:19:08 vyacheslav Может быть это чем-нибудь поможет. Попробуйте либу в аттачменте, в ней, похоже, есть часть кода (dll не просит) У меня еще просит добавить "INCLUDELIB advapi32.lib" Но остается 3 unresolved externals: _RegisterDialogClasses@4 ; это есть в ссылке ^^ __except_handler3 ; возможно не сильно важны, судя по названиям __except_list ; но можно порыть в какой-то сишной dll _1057881919__scrnsave.lib |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.082 |