А то когда я компилирую библиотеку, компилятор выдаёт такую ошибку:
Microsoft (R) Windows (R) Resource Compiler, Version 5.00.1823.1 - Build 1823
Copyright (C) Microsoft Corp. 1985-1998. All rights reserved.
Using codepage 1251 as default
Creating splash.RES
RC: RCPP -CP 1251 -f C:\Users\Denis\Desktop\ASM\Test\DLL_NEW\RCa03088 -g C:\User
s\Denis\Desktop\ASM\Test\DLL_NEW\RDa03088 -DRC_INVOKED -D_WIN32 -pc\:/ -E -I. -I
.
splash.rc.
Writing JPG:9000, lang:0x409, size 58964
Assembling: splash.asm
Creating library splash.lib and object splash.exp
splash.obj : error LNK2001: unresolved external symbol _gdiplusLoadBitmapFromRes
ource@16
SPLASH.DLL : fatal error LNK1120: 1 unresolved externals
C:\Users\Denis\Desktop\ASM\Test\DLL_NEW>
Код: Выделить всё
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include gdiplus.inc
;include gdiplusLoadBitmapFromResource.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdiplus.lib
gdiplusLoadBitmapFromResource proto :HMODULE, :LPSTR, :LPSTR, [arial]:D[/arial]WORD
GdiplusStartupInput struc
GdiplusVersion dd ?
DebugEventCallback dd ?
SuppressBackgroundThread BOOL ?
SuppressExternalCodecs BOOL ?
GdiplusStartupInput ends
.data
gdiplusToken dd ?
gdiplusSInput GdiplusStartupInput <1, NULL, FALSE, FALSE>
jpgImage dd NULL
jpgType db "JPG", 0
drawJpg BOOL FALSE
ClassName db "SplashWndClass",0
TimerID dd 0
.data
hInstance dd ?
.code
invoke GetModuleHandle, 0
mov hInstance, eax
; Initialize GDI+
invoke GdiplusStartup, addr gdiplusToken, addr gdiplusSInput, NULL
DllEntry proc hInst:DWORD, reason:DWORD, reserved1:DWORD
.if reason==DLL_PROCESS_ATTACH ; When the dll is loaded
push hInst
pop hInstance
call ShowBitMap
.endif
mov eax,TRUE
ret
DllEntry Endp
ShowBitMap proc
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG
LOCAL hwnd:HWND
mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW+1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,0
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
INVOKE CreateWindowEx,NULL,ADDR ClassName,NULL,\
WS_POPUP,CW_USEDEFAULT,\
CW_USEDEFAULT,250,250,NULL,NULL,\
hInstance,NULL
mov hwnd,eax
INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
.WHILE TRUE
INVOKE GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
INVOKE TranslateMessage, ADDR msg
INVOKE DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam
ret
ShowBitMap endp
WndProc proc hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
LOCAL ps:PAINTSTRUCT
LOCAL hdc:HDC
LOCAL hMemoryDC:HDC
LOCAL hOldBmp:DWORD
LOCAL bitmap:BITMAP
LOCAL DlgHeight:DWORD
LOCAL DlgWidth:DWORD
LOCAL DlgRect:RECT
LOCAL DesktopRect:RECT
.if uMsg==WM_DESTROY
.if jpgImage!=0
invoke GdiplusShutdown, gdiplusToken
.endif
invoke PostQuitMessage,NULL
.elseif uMsg==WM_CREATE
invoke GetWindowRect,hWnd,addr DlgRect
invoke GetDesktopWindow
mov ecx,eax
invoke GetWindowRect,ecx,addr DesktopRect
push 0
mov eax,DlgRect.bottom
sub eax,DlgRect.top
mov DlgHeight,eax
push eax
mov eax,DlgRect.right
sub eax,DlgRect.left
mov DlgWidth,eax
push eax
mov eax,DesktopRect.bottom
sub eax,DlgHeight
shr eax,1
push eax
mov eax,DesktopRect.right
sub eax,DlgWidth
shr eax,1
push eax
push hWnd
call MoveWindow
invoke gdiplusLoadBitmapFromResource, hInstance, 9000, addr jpgType, addr jpgImage
;mov hBitMap,eax
invoke SetTimer,hWnd,1,2000,NULL
mov TimerID,eax
.elseif uMsg==WM_TIMER
invoke SendMessage,hWnd,WM_LBUTTONDOWN,NULL,NULL
invoke KillTimer,hWnd,TimerID
.elseif uMsg==WM_PAINT
invoke BeginPaint,hWnd,addr ps
mov hdc,eax
; invoke CreateCompatibleDC,hdc
mov hMemoryDC,eax
; invoke SelectObject,eax,hBitMap
mov hOldBmp,eax
;invoke GetObject,hBitMap,sizeof BITMAP,addr bitmap
invoke gdiplusLoadBitmapFromResource, hInstance, 9000, addr jpgType, addr jpgImage
; invoke StretchBlt,hdc,0,0,250,250,\
; hMemoryDC,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY
; invoke SelectObject,hMemoryDC,hOldBmp
; invoke DeleteDC,hMemoryDC
invoke EndPaint,hWnd,addr ps
.elseif uMsg==WM_LBUTTONDOWN
invoke DestroyWindow,hWnd
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
WndProc endp
End DllEntry