<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://community.devpinoy.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Nanoseconds Network</title><link>http://community.devpinoy.org/blogs/cvega/default.aspx</link><description>Random technical stuffs</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Linear Gradient Fill example for MASM</title><link>http://community.devpinoy.org/blogs/cvega/archive/2009/02/26/linear-gradient-fill-example-for-masm.aspx</link><pubDate>Fri, 27 Feb 2009 04:08:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:34475</guid><dc:creator>cvega</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=34475</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2009/02/26/linear-gradient-fill-example-for-masm.aspx#comments</comments><description>&lt;p&gt;This is an old example I&amp;#39;ve created for MASM, which was posted in MASM32 forum 2 years ago:&lt;br /&gt;&lt;a href="http://www.masm32.com/board/index.php?topic=5944.0"&gt;http://www.masm32.com/board/index.php?topic=5944.0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It has a simple approach of double buffering and working with MSIMG32 for the gradient fills.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://devpinoy.org/cfs-filesystemfile.ashx/__key/CommunityServer.Components.PostAttachments/00.00.03.44.74/gradientXP.JPG" style="max-width:550px;" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;#39;re into drawing in windows (Win32), and you like to program in assembly language; this is example is for you.&lt;br /&gt;Download the source from attachment, or copy the source codes below.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cheers,&lt;/p&gt;
&lt;p&gt;-chris&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;LinearGradient.asm&lt;/h3&gt;
&lt;p&gt;&lt;br /&gt;.386&lt;br /&gt;
.model flat, stdcall&lt;br /&gt;
option casemap:none&lt;br /&gt;
option proc:private&lt;br /&gt;
&lt;br /&gt;
include windows.inc&lt;br /&gt;
&lt;br /&gt;
include user32.inc&lt;br /&gt;
include kernel32.inc&lt;br /&gt;
include gdi32.inc&lt;br /&gt;
include msimg32.inc&lt;br /&gt;
&lt;br /&gt;
includelib user32.lib&lt;br /&gt;
includelib kernel32.lib&lt;br /&gt;
includelib gdi32.lib&lt;br /&gt;
includelib msimg32.lib&lt;br /&gt;
&lt;br /&gt;
include MsgCrack.inc&lt;br /&gt;
&lt;br /&gt;
; ==========================================================&lt;br /&gt;
; Protos&lt;br /&gt;
; ==========================================================&lt;br /&gt;
WinMain proto :HINSTANCE, :HINSTANCE, :LPSTR, :dword&lt;br /&gt;
WndProc proto :HWND, :UINT, :WPARAM, :LPARAM&lt;br /&gt;
DrawFancyDivider proto :HDC, :ptr RECT&lt;br /&gt;
&lt;br /&gt;
; ==========================================================&lt;br /&gt;
; MessageHandlers Protos&lt;br /&gt;
; ==========================================================&lt;br /&gt;
WmDestroy proto :HWND&lt;br /&gt;
WmCommand proto :HWND, :word, :HWND, :word&lt;br /&gt;
WmPaint proto :HWND&lt;br /&gt;
&lt;br /&gt;
option dotname&lt;br /&gt;
&lt;br /&gt;
; ==========================================================&lt;br /&gt;
; Local Macros&lt;br /&gt;
; ==========================================================&lt;br /&gt;
m2m&amp;nbsp;&amp;nbsp;&amp;nbsp; macro mem32A, mem32B&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; mem32B&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pop&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mem32A&lt;br /&gt;
endm&lt;br /&gt;
&lt;br /&gt;
func macro functionName:req, functionParams:vararg&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; functionName, functionParams&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; exitm&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;eax&amp;gt;&lt;br /&gt;
endm&lt;br /&gt;
&lt;br /&gt;
; ==========================================================&lt;br /&gt;
; Data&lt;br /&gt;
; ==========================================================&lt;br /&gt;
.data?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; hInstance&amp;nbsp;&amp;nbsp;&amp;nbsp; dd ?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; hFont&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; HFONT ?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
.data&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; szClassName db &amp;quot;ChrisVega.WinLion&amp;quot;, 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; szWndText&amp;nbsp;&amp;nbsp;&amp;nbsp; db &amp;quot;Win32 Assembly ROCK!&amp;quot;, 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lgFont&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LOGFONT &amp;lt;-19, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, &amp;quot;Arial&amp;quot;&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; szText&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; db &amp;quot;Linear GradientFill sample program by Chris Vega&amp;quot;, 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; szTextLen&amp;nbsp;&amp;nbsp;&amp;nbsp; dd $-szText-1&lt;br /&gt;
&lt;br /&gt;
.const&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; WND_WIDTH&amp;nbsp;&amp;nbsp;&amp;nbsp; = 540&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; WND_HEIGHT&amp;nbsp;&amp;nbsp;&amp;nbsp; = 180&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mnuFileExit = 2001&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mnuHelpAbout= 3001&lt;br /&gt;
&lt;br /&gt;
; ==========================================================&lt;br /&gt;
; Entry Point&lt;br /&gt;
; ==========================================================&lt;br /&gt;
.code&lt;br /&gt;
start:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; WinMain, func(GetModuleHandle, 0), NULL, NULL, SW_SHOW&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; ExitProcess, 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
; ==========================================================&lt;br /&gt;
; WinMain&lt;br /&gt;
; ==========================================================&lt;br /&gt;
WinMain proc uses edi esi hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR, CmdShow:dword&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; local&amp;nbsp;&amp;nbsp;&amp;nbsp; hwnd:HWND&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; local&amp;nbsp;&amp;nbsp;&amp;nbsp; msg:MSG&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; local&amp;nbsp;&amp;nbsp;&amp;nbsp; hMenu:HANDLE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; local&amp;nbsp;&amp;nbsp;&amp;nbsp; wc:WNDCLASSEX&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Register the class&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; m2m&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wc.hInstance, hInst&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wc.lpszClassName, offset szClassName&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wc.lpfnWndProc, offset WndProc&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wc.style, CS_PARENTDC or CS_HREDRAW or CS_VREDRAW&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wc.cbSize, sizeof WNDCLASSEX&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wc.hIcon, func(LoadIcon, hInst, 100)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wc.hIconSm, eax&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wc.hCursor, func(LoadCursor, NULL, IDC_ARROW)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wc.lpszMenuName, NULL&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wc.cbClsExtra, 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wc.cbWndExtra, 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; wc.hbrBackground, NULL&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; .if&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; !func(RegisterClassEx, addr wc)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ret&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; .endif&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Create the window&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edi, func(GetSystemMetrics, SM_CXSCREEN) &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; shr&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edi, 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax, WND_WIDTH&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; shr&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax, 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; sub&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edi, eax&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; esi, func(GetSystemMetrics, SM_CYSCREEN)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; shr&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; esi, 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax, WND_HEIGHT&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; shr&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax, 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; sub&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; esi, eax&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; CreateWindowEx,\&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WS_EX_APPWINDOW or WS_EX_WINDOWEDGE, \&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; addr szClassName,\&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; addr szWndText,\&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WS_OVERLAPPEDWINDOW,\&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edi,\&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; esi,\&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WND_WIDTH,\&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; WND_HEIGHT,\&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; NULL,\&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; func(LoadMenu, hInst, 1000),\&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; hInst,\&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; NULL&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; hwnd, eax&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Set the window font&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; hFont, func(CreateFontIndirect, addr lgFont)&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Make the window visible&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; SendMessage, hwnd, WM_SETICON, ICON_BIG or ICON_SMALL, func(LoadIcon, hInst, 1000)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; ShowWindow, hwnd, CmdShow&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; UpdateWindow, hwnd&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Messageloop (with IsDialogMessage)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; .while TRUE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; invoke GetMessage, addr msg, hwnd, 0, 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .break .if eax!=TRUE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .if !func(IsDialogMessage,hwnd,addr msg)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; TranslateMessage, addr msg&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; DispatchMessage, addr msg&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .endif&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; .endw&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Exit WinMain&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov eax, msg.wParam&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ret&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
WinMain endp&lt;br /&gt;
&lt;br /&gt;
; ==========================================================&lt;br /&gt;
; Window Procedure&lt;br /&gt;
; ==========================================================&lt;br /&gt;
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; .handle_msg_begin&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .handle_msg WM_DESTROY, WmDestroy&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .handle_msg WM_COMMAND, WmCommand&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; .handle_msg WM_PAINT, WmPaint&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; .handle_msg_end&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; DefWindowProc, hWnd, uMsg, wParam, lParam&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ret&lt;br /&gt;
&lt;br /&gt;
WndProc endp&lt;br /&gt;
&lt;br /&gt;
; ==========================================================&lt;br /&gt;
; DrawFancyDivider&lt;br /&gt;
; ==========================================================&lt;br /&gt;
DrawFancyDivider proc uses ebx edi hdc:HDC, lpRect:ptr RECT&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; local&amp;nbsp;&amp;nbsp;&amp;nbsp; pen:HPEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; local&amp;nbsp;&amp;nbsp;&amp;nbsp; pen2:HPEN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ebx, lpRect&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; assume&amp;nbsp;&amp;nbsp;&amp;nbsp; ebx: ptr RECT&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; CreatePen, PS_SOLID, 1, 00404040h&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pen, eax&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; CreatePen, PS_SOLID, 1, 00707070h&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pen2, eax&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectObject, hdc, pen&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; eax&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edi, [ebx].top&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; add&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edi, 3&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveToEx, hdc, [ebx].left, edi, NULL&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; LineTo, hdc, [ebx].right, edi&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; dec&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edi&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectObject, hdc, pen2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveToEx, hdc, [ebx].left, edi, NULL&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; LineTo, hdc, [ebx].right, edi&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; sub&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edi, 2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectObject, hdc, pen2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveToEx, hdc, [ebx].left, edi, NULL&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; LineTo, hdc, [ebx].right, edi&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; inc&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edi&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectObject, hdc, func(GetStockObject, WHITE_PEN)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveToEx, hdc, [ebx].left, edi, NULL&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; LineTo, hdc, [ebx].right, edi&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; DeleteObject, pen&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; DeleteObject, pen2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pop&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectObject, hdc, eax&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ret&lt;br /&gt;
DrawFancyDivider endp&lt;br /&gt;
&lt;br /&gt;
; ==========================================================&lt;br /&gt;
; WmDestroy : Handles WM_DESTROY message&lt;br /&gt;
; ==========================================================&lt;br /&gt;
WmDestroy proc hWnd:HWND&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; PostQuitMessage, 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ret&lt;br /&gt;
WmDestroy endp&lt;br /&gt;
&lt;br /&gt;
; ==========================================================&lt;br /&gt;
; WmCommand : Handles WM_COMMAND message&lt;br /&gt;
; ==========================================================&lt;br /&gt;
WmCommand proc hWnd:HWND, id:word, hwndCtl:HWND, codeNotify:word&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ----------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; .if id==mnuFileExit&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; hWnd&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; call&amp;nbsp;&amp;nbsp;&amp;nbsp; WmDestroy&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ----------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; .elseif id==mnuHelpAbout&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; MessageBox, hWnd, addr szText, addr szWndText, MB_ICONINFORMATION&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ----------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; .endif&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ret&lt;br /&gt;
WmCommand endp&lt;br /&gt;
&lt;br /&gt;
; ==========================================================&lt;br /&gt;
; WmPaint : Handles WM_PAINT message&lt;br /&gt;
; ==========================================================&lt;br /&gt;
WmPaint proc uses ebx hWnd:HWND&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; local hdc:HDC&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; local rect:RECT&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; local sz:SIZEL&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; local memDC:HDC&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; local memBM:HBITMAP&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; local mesh:GRADIENT_RECT&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; local vertex[3]:TRIVERTEX&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get the handle to the device context&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; hdc, func(GetDC, hWnd)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Get the client rectangle&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; GetClientRect, hWnd, addr rect&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Create an off-screen device context (double buffering) [1]&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; memDC, func(CreateCompatibleDC, hdc)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; memBM, func(CreateCompatibleBitmap, hdc, rect.right, rect.bottom)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectObject, memDC, memBM&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Populate vertex 1 structure&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; lea&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ebx, vertex&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; assume&amp;nbsp;&amp;nbsp;&amp;nbsp; ebx: ptr TRIVERTEX&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; m2m&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [ebx].x, rect.left&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; m2m&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [ebx].y, rect.top&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [ebx].Alpha, 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [ebx].Red, 07d00h&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [ebx].Green, 0aa00h&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [ebx].Blue, 0c300h&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Populate vertex 2 structure&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; add&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ebx, sizeof TRIVERTEX&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; m2m&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [ebx].x, rect.right&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; m2m&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [ebx].y, rect.bottom&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [ebx].Alpha, 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [ebx].Red, 00100h&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [ebx].Green, 02a00h&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [ebx].Blue, 04400h&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Set the mesh (gradient rectangle) point&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mesh.UpperLeft, 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mesh.LowerRight, 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Call GradientFill function&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; GradientFill, memDC, addr vertex, 2, addr mesh, 1, GRADIENT_FILL_RECT_V&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Draw the text, centered to the window&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; SetBkMode, memDC, TRANSPARENT&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; SelectObject, memDC, hFont&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; GetTextExtentPoint32, memDC, addr szText, szTextLen, addr sz&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; SetTextColor, memDC, 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax, sz.x&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; shr&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax, 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sz.x, eax&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax, sz.y&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; shr&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax, 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sz.y, eax&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax, rect.right&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; sub&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax, rect.left&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; shr&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax, 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; sub&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax, sz.x&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edx, rect.bottom&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; sub&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edx, rect.top&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; shr&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edx, 1&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; sub&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edx, sz.y&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; eax&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; push&amp;nbsp;&amp;nbsp;&amp;nbsp; edx&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; TextOut, memDC, eax, edx, addr szText, szTextLen&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; SetTextColor, memDC, 00f0f0f0h&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pop&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edx&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; pop&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; sub&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; edx, 2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; sub&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; eax, 2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; TextOut, memDC, eax, edx, addr szText, szTextLen&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Draw some fancy divider&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; DrawFancyDivider, memDC, addr rect&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Flush the result to the window&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; BitBlt, hdc, 0, 0, rect.right, rect.bottom, memDC, 0, 0, SRCCOPY&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Release all the resources we&amp;#39;ve used&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; DeleteDC, memDC&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; DeleteObject, memBM&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Release the device context&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; ---------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke&amp;nbsp;&amp;nbsp;&amp;nbsp; ReleaseDC, hWnd, hdc&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Notes:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp;&amp;nbsp; [1] We need to create an off-screen device context for this demo,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this is because filling a rectangle with GradientFill function &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; will take some time to complete, and shows a lot of flickering&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if we let the function use the window&amp;#39;s DC.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ret&lt;br /&gt;
WmPaint endp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
end start&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=34475" width="1" height="1"&gt;</description><enclosure url="http://community.devpinoy.org/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.03.44.75/Gradient.zip" length="29334" type="application/force-download" /><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/Assembly+Language/default.aspx">Assembly Language</category><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/MASM/default.aspx">MASM</category></item><item><title>Using CIL to set/get values from fields and properties</title><link>http://community.devpinoy.org/blogs/cvega/archive/2009/02/13/using-cil-to-set-get-values-from-fields-and-properties.aspx</link><pubDate>Fri, 13 Feb 2009 18:58:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:34391</guid><dc:creator>cvega</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=34391</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2009/02/13/using-cil-to-set-get-values-from-fields-and-properties.aspx#comments</comments><description>&lt;p&gt;




&lt;/p&gt;
&lt;h3 style="margin:5pt 0in;"&gt;&lt;b&gt;&lt;span style="font-size:13.5pt;"&gt;Background: &lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;I&amp;#39;m currently working on a freelance project to optimize
(yay, optimization again!) a &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;&lt;span style="color:blue;"&gt;.NET Entity Persister library&lt;/span&gt;&lt;/a&gt; of a Software
Development firm here in Makati City -- much like a custom built &lt;a href="http://sourceforge.net/projects/nhibernate"&gt;&lt;span style="color:blue;"&gt;NHibernate&lt;/span&gt;&lt;/a&gt;,
but heavily dependent on reflection to get/set field values (their library has
no support for Properties). They hired me because they kind of complaining that
their system is so slow, it is taking about several seconds (to minutes) just
to retrieve some thousand records -- considering the internals of their library
is built on top of &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.idatareader.aspx"&gt;&lt;span style="color:blue;"&gt;DataReader&lt;/span&gt;&lt;/a&gt; (Imagine, looping &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.idatareader.aspx"&gt;&lt;span style="color:blue;"&gt;DataReader&lt;/span&gt;&lt;/a&gt; to fill a collection of Entities).
According to their big boss, using thrid party &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;&lt;span style="color:blue;"&gt;O/R solution&lt;/span&gt;&lt;/a&gt; is not an option, they have to put a
fix to their current library.&lt;br /&gt;&lt;/p&gt;
&lt;h3 style="margin:5pt 0in;"&gt;&lt;b&gt;&lt;span style="font-size:13.5pt;"&gt;Looking at the problem:&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p class="MsoNormal" style="margin:5pt 0in;"&gt;Assuming we have an entity class&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;"&gt;
&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#2b91af;"&gt;SampleEntity&lt;/span&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;"&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:5pt 0in;"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp; public&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
&lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SampleEntity&lt;/span&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt;
stringField = &lt;span style="color:#a31515;"&gt;&amp;quot;Sample Value&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt;
StringProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;;
}&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;}&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:5pt 0in;"&gt;and here&amp;#39;s how they are setting the field:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;///&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; Dynamic field setter&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp; public&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
&lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;FieldSetter&lt;/span&gt;
{&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; Set field
dynamically&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt;
&lt;span style="color:blue;"&gt;void&lt;/span&gt; SetField(&lt;span style="color:blue;"&gt;object&lt;/span&gt;
instance, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; fieldName, &lt;span style="color:blue;"&gt;object&lt;/span&gt;
value) {&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; t = instance.GetType();&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; fieldInfo =
t.GetField(fieldName, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public);&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (fieldInfo == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;There is no publicly accessible &amp;quot;&lt;/span&gt; + &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;fieldName +
&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot; field found in &amp;quot;&lt;/span&gt; + t.FullName + &lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;b&gt;fieldInfo.SetValue(instance, value);&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
}&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;the library is actually doing this in loop to setup an
entire entity instance, and they repeatedly doing it until the &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.idatareader.aspx"&gt;&lt;span style="color:blue;"&gt;DataReader&lt;/span&gt;&lt;/a&gt; says stop:&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; Get all entities from underlying data store.&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;nbsp; ///&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp; public&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;T&amp;gt; SelectAll() {&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; Open();&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; selectAll = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
&lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt;(BuildSelectStatement&amp;lt;T&amp;gt;(),
Connection);&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; reader = selectAll.ExecuteReader();&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; list = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
&lt;span style="color:#2b91af;"&gt;List&lt;/span&gt;&amp;lt;T&amp;gt;();&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (reader != &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;while&lt;/span&gt; (reader.Read()) {&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; entity = &lt;span style="color:blue;"&gt;default&lt;/span&gt;(T);&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;for&lt;/span&gt; (&lt;span style="color:blue;"&gt;var&lt;/span&gt; i = 0; i &amp;lt; reader.FieldCount; i++) {&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt;
fieldName = reader.GetName(i);&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; data
= reader.GetData(i);&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color:#2b91af;"&gt;FieldSetter&lt;/span&gt;.SetField(entity,
fieldName, data);&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; Close();&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; list;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:5pt 0in;"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
}&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
the only problem I&amp;#39;ve notice that may be the cause of slow execution is the use
of reflection.&lt;br /&gt;&lt;/p&gt;
&lt;h3 style="margin:5pt 0in;"&gt;&lt;b&gt;&lt;span style="font-size:13.5pt;"&gt;Doing it the hard way, and maybe the
faster way:&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;If you play long enough with reflection, you will get the
experience that it is a slow&amp;nbsp;because of internal loop overheads (search
for matching name and binding attributes).&lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;The approach I thought to workaround the problem is to emit &lt;a href="http://en.wikipedia.org/wiki/Common_Intermediate_Language"&gt;&lt;span style="color:blue;"&gt;CIL codes&lt;/span&gt;&lt;/a&gt; directly and call them as &lt;a href="http://msdn.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod.aspx"&gt;&lt;span style="color:windowtext;text-decoration:none;"&gt;dynamic
method&lt;/span&gt;&lt;/a&gt;, something that look like:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&amp;nbsp; public&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; SetField(&lt;span style="color:#2b91af;"&gt;SampleEntity&lt;/span&gt; instance, &lt;span style="color:blue;"&gt;string&lt;/span&gt;
value) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; instance.&lt;b&gt;&lt;span style="color:red;"&gt;stringField&lt;/span&gt;&lt;/b&gt;
= value;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;In &lt;a href="http://en.wikipedia.org/wiki/Common_Intermediate_Language"&gt;&lt;span style="color:blue;"&gt;CIL&lt;/span&gt;&lt;/a&gt;, this is how it is coded:&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:#1000a0;"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;.method&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:#1000a0;"&gt;public&lt;/span&gt;
&lt;span style="color:#1000a0;"&gt;hidebysig&lt;/span&gt; &lt;span style="color:#1000a0;"&gt;instance&lt;/span&gt;
&lt;a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Void"&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt;&lt;/a&gt; &lt;b&gt;&lt;a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://ClassLibrary1:1.0.0.0/ClassLibrary1.Setter/SetProperty%28ClassLibrary1.SmapleEntity,String%29"&gt;&lt;span style="color:blue;"&gt;SetField&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;(&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#1000a0;"&gt;class&lt;/span&gt;
&lt;a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://ClassLibrary1:1.0.0.0/ClassLibrary1.SmapleEntity"&gt;&lt;span style="color:blue;"&gt;SampleEntity&lt;/span&gt;&lt;/a&gt; instance, &lt;a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.String"&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;/a&gt; &amp;#39;value&amp;#39;)&lt;span style="color:#1000a0;"&gt; cil
managed&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#1000a0;"&gt;.maxstack&lt;/span&gt;
8 &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp; &lt;/span&gt;SEG_0001: &lt;span style="color:#548dd4;"&gt;0x0003&lt;/span&gt;
&amp;nbsp;ldarg.0 &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&amp;nbsp;SEG_0002: &lt;span style="color:#548dd4;"&gt;0x0004&lt;/span&gt;&amp;nbsp;
ldarg.1 &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&amp;nbsp;SEG_0003: &lt;span style="color:#548dd4;"&gt;0x007&lt;/span&gt;&amp;nbsp;&amp;nbsp;
stfld &lt;a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.String"&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&lt;/a&gt; &lt;a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://ClassLibrary1:1.0.0.0/ClassLibrary1.SmapleEntity"&gt;&lt;span style="color:blue;"&gt;SampleEntity&lt;/span&gt;&lt;/a&gt;::&lt;b&gt;&lt;span style="color:red;"&gt;&lt;a href="http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://ClassLibrary1:1.0.0.0/ClassLibrary1.SmapleEntity/stringField:String"&gt;&lt;span style="color:red;"&gt;stringField&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SEG_0008: &lt;span style="color:#548dd4;"&gt;0x002&lt;/span&gt;&amp;nbsp;&amp;nbsp;
ret &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The lines I highlighted in &lt;span style="color:red;"&gt;red &lt;/span&gt;are
the lines I&amp;#39;m interrested in making dynamic, so let&amp;#39;s work on a &lt;a href="http://msdn.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod.aspx"&gt;&lt;span style="color:blue;"&gt;DynamicMethod&lt;/span&gt;&lt;/a&gt; for doing just that:&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp; // We still need to get the field information from reflection&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp; var&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
fieldInfo = t.GetField(fieldName, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public);&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp; if&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
(fieldInfo == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;There
is no publicly accessible &amp;quot;&lt;/span&gt; + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;fieldName
+&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot; field found in &amp;quot;&lt;/span&gt; + t.FullName + &lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:5pt 0in;"&gt;&lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;We only need to get the field information once, during the
setup of our &lt;a href="http://msdn.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod.aspx"&gt;&lt;span style="color:blue;"&gt;DynamicMethod&lt;/span&gt;&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size:9pt;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp; var&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
setter = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;__set_field_&amp;quot;&lt;/span&gt; + fieldName, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;null&lt;/span&gt;, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;[] { t, fieldInfo.FieldType }, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;FieldSetter&lt;/span&gt;));&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp; var&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
setterIL = setter.GetILGenerator();&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;br /&gt;
This is because we need the FieldInfo as a parameter to stfld:&lt;br /&gt;
&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// ldarg.0 -
load argument 1 to eval.stack.0&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;// ldarg.1 - load argument 2 to
eval.stack.1&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ldarg_1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// stfld f -
set the field f of instance stack.0&lt;/span&gt;&amp;nbsp;&lt;br /&gt;
&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
with the value from stack.1&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:5pt 0in;"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Stfld,
fieldInfo);&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;span style="color:green;"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;//
ret&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - exit the method&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;br /&gt;
&amp;nbsp; setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ret);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;br /&gt;
If you take a closer look at the emitted &lt;i&gt;OpCodes&lt;/i&gt;, you&amp;#39;ll see that it is
simply a replica of &lt;a href="http://en.wikipedia.org/wiki/Common_Intermediate_Language"&gt;&lt;span style="color:blue;"&gt;CIL&lt;/span&gt;&lt;/a&gt; above,&amp;nbsp;but with a little twist --&amp;nbsp;
the &lt;span style="font-size:10pt;"&gt;fieldInfo&lt;/span&gt; we&amp;#39;ve taken from given &lt;span style="font-size:10pt;"&gt;fieldName&lt;/span&gt;.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;That means we are almost done, we just have to call the
DynamicMethod we&amp;#39;ve created for assigning value to field like this:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:10pt;line-height:115%;"&gt;&lt;span style="font-size:9pt;line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
setter.Invoke(&lt;span style="color:blue;"&gt;null&lt;/span&gt;, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;
&lt;span style="color:blue;"&gt;object&lt;/span&gt;[] { t, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;Kamusta mundo, ok ka lang ba?&amp;quot;&lt;/span&gt; });&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;line-height:115%;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 style="margin:5pt 0in;"&gt;&lt;b&gt;&lt;span style="font-size:13.5pt;"&gt;Saving it for succeeding calls:&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;There&amp;#39;s not much improvement at all if we are going to
create &lt;a href="http://msdn.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod.aspx"&gt;&lt;span style="color:blue;"&gt;DynamicMethod&lt;/span&gt;&lt;/a&gt; repeatedly, in fact that&amp;#39;s even
slower than using reflection. We have to save the created &lt;a href="http://msdn.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod.aspx"&gt;&lt;span style="color:blue;"&gt;DynamicMethods&lt;/span&gt;&lt;/a&gt; for succeeding calls.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;br /&gt;
Saving it to Dictionary and then retrieving it every time we have a need for
it, will boost the&lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; &lt;/span&gt;performance real fast (because we only have to create &lt;a href="http://msdn.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod.aspx"&gt;&lt;span style="color:blue;"&gt;DynamicMethod&lt;/span&gt;&lt;/a&gt; once for every field we want to set
value).&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Summing it all together, with addition of &lt;i&gt;controlling the
creation of setter &lt;a href="http://msdn.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod.aspx"&gt;&lt;span style="color:blue;"&gt;DynamicMethods&lt;/span&gt;&lt;/a&gt;&lt;/i&gt;, we will be able to write a
new&lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;
&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:#2b91af;"&gt;FieldSetter&lt;/span&gt;&lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; &lt;/span&gt;class:&lt;span style="font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt; public&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
&lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;FieldSetter&lt;/span&gt;
{&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt;
&lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt; GetFieldSetterMethod(&lt;span style="color:blue;"&gt;object&lt;/span&gt; instance, &lt;span style="color:blue;"&gt;string&lt;/span&gt;
fieldName) {&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; t = instance.GetType();&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; key = (t.FullName + &lt;span style="color:#a31515;"&gt;&amp;quot;_&amp;quot;&lt;/span&gt; + fieldName).Replace(&lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;_&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt;
(!fieldSetter.ContainsKey(key)) {&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;lock&lt;/span&gt; (fsync) {&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color:green;"&gt;// We still need to get the field
information from reflection&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; fieldInfo =
t.GetField(fieldName, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public);&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (fieldInfo == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;There is no publicly accessible &amp;quot;&lt;/span&gt; + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;fieldName + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot; field found in &amp;quot;&lt;/span&gt; + t.FullName + &lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; setter = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;__set_field_&amp;quot;&lt;/span&gt; + key, &lt;span style="color:blue;"&gt;null&lt;/span&gt;, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;[] { t, fieldInfo.FieldType },&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;FieldSetter&lt;/span&gt;));&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; setterIL =
setter.GetILGenerator();&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// ldarg.0
- load argument 1 to eval.stack.0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp; setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// ldarg.1 - load
argument 2 to eval.stack.1&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ldarg_1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;span style="color:green;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//
stfld f - set the field f of instance stack.0&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; with the
value from stack.1&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Stfld, fieldInfo);&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
&lt;span style="color:green;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//
ret&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - exit the method&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ret);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp; &amp;nbsp; fieldSetter.Add(key, setter);&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; fieldSetter[key];&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; Set the
field value of given instance, using the name of the field.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&amp;quot;instance&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The instance.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&amp;quot;fieldName&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The name of the field.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name=&amp;quot;value&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:green;"&gt;The value to set.&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt;
&lt;span style="color:blue;"&gt;object&lt;/span&gt; SetFieldValue(&lt;span style="color:blue;"&gt;object&lt;/span&gt;
instance, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; fieldName, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;object&lt;/span&gt; value) {&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt;
GetFieldSetterMethod(instance, fieldName)&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.Invoke(&lt;span style="color:blue;"&gt;null&lt;/span&gt;, &lt;span style="color:blue;"&gt;new&lt;/span&gt;[] {
instance });&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt;
&lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;&amp;gt;
fieldSetter = &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt;
&lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt;
fsync = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt;();&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
}&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin:5pt 0in;"&gt;That&amp;#39;s about it; I hope you guys find it useful for your own
purpose.&lt;/p&gt;
&lt;h3 style="margin:5pt 0in;"&gt;&lt;b&gt;&lt;span style="font-size:13.5pt;"&gt;Did it worked?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;After I&amp;#39;ve delivered the code to them, they immediately
tested it.., and tested it.., and tested it more. Long story short, I guess I
made them happy because I&amp;#39;ve got an extra from the paycheck, and the another
deal to support property on their custom &lt;a href="http://en.wikipedia.org/wiki/Object-relational_mapping"&gt;&lt;span style="color:blue;"&gt;EntityPerstister&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I&amp;#39;ll be working more with their library, specifically the adding of support to &lt;i&gt;Property&lt;/i&gt;
and &lt;i&gt;Method with one parameter&lt;/i&gt;. That&amp;#39;s not much of a work left, and I
think I almost got everything (except for the &lt;i&gt;method with one parameter&lt;/i&gt;,
but it&amp;rsquo;s practically the same as Property &lt;i&gt;since properties are methods too&lt;/i&gt;!).&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;h3 style="margin:5pt 0in;"&gt;&lt;b&gt;&lt;span style="font-size:13.5pt;"&gt;More codes:&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p class="MsoNormal"&gt;Here, take a look at the classes I&amp;#39;ve put-up for
setting/getting field and property (if you don&amp;#39;t know how I&amp;rsquo;ve implemented it,
you can re-read this post, or read more about &lt;a href="http://en.wikipedia.org/wiki/Common_Intermediate_Language"&gt;&lt;span style="color:blue;"&gt;CIL&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod.aspx"&gt;&lt;span style="color:blue;"&gt;DynamicMethod&lt;/span&gt;&lt;/a&gt;):&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;//
FieldSetter.cs&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp; public&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
&lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;FieldSetter&lt;/span&gt;
{&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt;
&lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt; GetFieldSetterMethod(&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;object&lt;/span&gt; instance, &lt;span style="color:blue;"&gt;string&lt;/span&gt;
fieldName) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; t = instance.GetType();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; key = (t.FullName + &lt;span style="color:#a31515;"&gt;&amp;quot;_&amp;quot;&lt;/span&gt; + fieldName).Replace(&lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;_&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt;
(!fieldSetter.ContainsKey(key)) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;lock&lt;/span&gt; (fsync) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// We still
need to get the field information from reflection&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt;
fieldInfo = t.GetField(fieldName, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt;
(fieldInfo == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;throw&lt;/span&gt;
&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;There is no publicly &amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt; +&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;accessible &amp;quot;&lt;/span&gt; + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;fieldName + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot; field found in &amp;quot;&lt;/span&gt; + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;t.FullName + &lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; setter = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;__set_field_&amp;quot;&lt;/span&gt; + key, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;null&lt;/span&gt;, &lt;span style="color:blue;"&gt;new&lt;/span&gt;[] { t,
fieldInfo.FieldType }, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;FieldSetter&lt;/span&gt;));&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; setterIL =
setter.GetILGenerator();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;// ldarg.0
- load argument 1 to eval.stack.0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// ldarg.1 - load
argument 2 to eval.stack.1&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ldarg_1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// stfld f - set
the field f of instance stack.0&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; with the
value from stack.1&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Stfld, fieldInfo);&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color:green;"&gt;// ret&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -
exit the method&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ret);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp; fieldSetter.Add(key, setter);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; fieldSetter[key];&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; SetFieldValue(&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;object&lt;/span&gt;
instance, &lt;span style="color:blue;"&gt;string&lt;/span&gt; fieldName, &lt;span style="color:blue;"&gt;object&lt;/span&gt; value) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; GetFieldSetterMethod(instance, fieldName)&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.Invoke(&lt;span style="color:blue;"&gt;null&lt;/span&gt;, &lt;span style="color:blue;"&gt;new&lt;/span&gt;[] {
instance, value });&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt;
&lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;&amp;gt;
&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;fieldSetter = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt;
&lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt;
fsync = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt;();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
}&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:10pt;line-height:115%;"&gt;&lt;span style="font-size:11pt;line-height:115%;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;//
FieldGetter.cs&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp; public&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
&lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;FieldGetter&lt;/span&gt;
{&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt;
&lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt; GetFieldGetterMethod(&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;object&lt;/span&gt; instance, &lt;span style="color:blue;"&gt;string&lt;/span&gt;
fieldName) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; t = instance.GetType();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; key = (t.FullName + &lt;span style="color:#a31515;"&gt;&amp;quot;_&amp;quot;&lt;/span&gt; + fieldName).Replace(&lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;_&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt;
(!fieldGetters.ContainsKey(key)) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;lock&lt;/span&gt; (fsync) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; fieldInfo =
t.GetField(fieldName, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (fieldInfo
== &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;throw&lt;/span&gt;
&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;There is no publicly &amp;quot; &lt;/span&gt;&lt;span style="color:black;"&gt;+&lt;/span&gt;&lt;span style="color:#a31515;"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&amp;quot;accessible &amp;quot;&lt;/span&gt; + fieldName + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot; field found in &amp;quot;&lt;/span&gt; + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;t.FullName + &lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; getter = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;__get_field_&amp;quot;&lt;/span&gt; + key, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;fieldInfo.FieldType, &lt;span style="color:blue;"&gt;new&lt;/span&gt;[] { t }, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;FieldGetter&lt;/span&gt;));&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; getterIL =
getter.GetILGenerator();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//
ldarg.0&amp;nbsp; - load argument 0 to eval.stack.0&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp; getterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// ldfld f&amp;nbsp; -
get the value of field from &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// instance in eval.stack&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;span style="color:green;"&gt;and store it &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// on top of eval.stack&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; getterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ldfld,
fieldInfo);&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;// ret&amp;nbsp;- return what&amp;#39;s on top of
eval.stack &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;getterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ret);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; fieldGetters.Add(key, getter);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color:blue;"&gt;return&lt;/span&gt; fieldGetters[key];&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt;
&lt;span style="color:blue;"&gt;object&lt;/span&gt; GetFieldValue(&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;object&lt;/span&gt;
instance, &lt;span style="color:blue;"&gt;string&lt;/span&gt; fieldName) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color:blue;"&gt;return&lt;/span&gt; GetFieldGetterMethod(instance,
fieldName)&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.Invoke(&lt;span style="color:blue;"&gt;null&lt;/span&gt;, &lt;span style="color:blue;"&gt;new&lt;/span&gt;[] {
instance });&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;&amp;gt;
&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;fieldGetters = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt; fsync
= &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt;();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
}&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;//
PropertySetter.cs&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp; public&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
&lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PropertySetter&lt;/span&gt;
{&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt; GetPropertySetterMethod(&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;object&lt;/span&gt; instance, &lt;span style="color:blue;"&gt;string&lt;/span&gt;
propertyName) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; t = instance.GetType();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; key = (t.FullName + &lt;span style="color:#a31515;"&gt;&amp;quot;_&amp;quot;&lt;/span&gt; + propertyName).Replace(&lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;_&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt;
(!propertySetter.ContainsKey(key)) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;lock&lt;/span&gt; (fsync) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt;
propertyInfo = t.GetProperty(propertyName, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (propertyInfo == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;There is no publicly &amp;quot; &lt;/span&gt;&lt;span style="color:black;"&gt;+ &lt;br /&gt;
&lt;/span&gt;&lt;span style="color:#a31515;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&amp;quot;accessible &amp;quot;&lt;/span&gt; + propertyName + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot; property found in &amp;quot;&lt;/span&gt; + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;t.FullName + &lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!propertyInfo.CanWrite)&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;The property &amp;quot;&lt;/span&gt; + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;propertyName + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot; has no publicly accessible setter.&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; setter = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;__set_property_&amp;quot;&lt;/span&gt; + key, &lt;span style="color:blue;"&gt;null&lt;/span&gt;,&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;new&lt;/span&gt;[] { t, propertyInfo.PropertyType }, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;PropertySetter&lt;/span&gt;));&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; setterIL =
setter.GetILGenerator();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//
ldarg.0&amp;nbsp;&amp;nbsp;&amp;nbsp; - load argument 1 to eval.stack.0&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp; &amp;nbsp; setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//
ldarg.1&amp;nbsp;&amp;nbsp;&amp;nbsp; - load argument 2 to eval.stack.1&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ldarg_1);&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color:green;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//
callvirt p - call set_* method to set the &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// value from eval.stack.1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp; &amp;nbsp; setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Callvirt,
propertyInfo.GetSetMethod()); &lt;br /&gt;
&lt;br /&gt;
&lt;span style="color:green;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//
ret&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - exit the method&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp; setterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ret);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp; &amp;nbsp; propertySetter.Add(key, setter);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; propertySetter[key];&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; SetPropertyValue(&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;object&lt;/span&gt;
instance, &lt;span style="color:blue;"&gt;string&lt;/span&gt; propertyName, &lt;span style="color:blue;"&gt;object&lt;/span&gt; value) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; GetPropertySetterMethod(instance, propertyName)&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.Invoke(&lt;span style="color:blue;"&gt;null&lt;/span&gt;, &lt;span style="color:blue;"&gt;new&lt;/span&gt;[] {
instance, value });&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;&amp;gt;
&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;propertySetter = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt; fsync
= &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt;();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
}&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;//
PropertyGetter.cs&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:blue;"&gt;&amp;nbsp; public&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;
&lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PropertyGetter&lt;/span&gt;
{&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt; GetPropertyGetterMethod(&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;object&lt;/span&gt; instance, &lt;span style="color:blue;"&gt;string&lt;/span&gt;
propertyName) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; t = instance.GetType();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; key = (t.FullName + &lt;span style="color:#a31515;"&gt;&amp;quot;_&amp;quot;&lt;/span&gt; + propertyName).Replace(&lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;_&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt;
(!propertyGetters.ContainsKey(key)) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;lock&lt;/span&gt; (fsync) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; propertyInfo =
t.GetProperty(propertyName, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (propertyInfo == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;There is no publicly &amp;quot; &lt;/span&gt;&lt;span style="color:black;"&gt;+&lt;/span&gt;&lt;span style="color:#a31515;"&gt; &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&amp;quot;accessible &amp;quot;&lt;/span&gt; + propertyName + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot; property found in &amp;quot;&lt;/span&gt; + &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;t.FullName + &lt;span style="color:#a31515;"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!propertyInfo.CanRead)&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ArgumentException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;The property &amp;quot;&lt;/span&gt; + propertyName &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;+ &lt;span style="color:#a31515;"&gt;&amp;quot; has no publicly accessible getter.&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; getter = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;__get_property_&amp;quot;&lt;/span&gt; + key, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;propertyInfo.PropertyType, &lt;span style="color:blue;"&gt;new&lt;/span&gt;[] { t }, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;PropertyGetter&lt;/span&gt;));&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;var&lt;/span&gt; getterIL =
getter.GetILGenerator();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// ldarg.0 - load
argument 0 to eval.stack.0&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp; &amp;nbsp; getterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ldarg_0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// callvirt m - a
call to get_* method to get &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// the property value&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp; &amp;nbsp; getterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Callvirt,
propertyInfo.GetGetMethod()); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;// ret&amp;nbsp;- return the result of get_*
call&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp; &amp;nbsp; getterIL.Emit(&lt;span style="color:#2b91af;"&gt;OpCodes&lt;/span&gt;.Ret);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;color:green;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; propertyGetters.Add(key, getter);&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
}&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;return&lt;/span&gt; propertyGetters[key];&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt; SetPropertyValue(&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;object&lt;/span&gt;
instance, &lt;span style="color:blue;"&gt;string&lt;/span&gt; propertyName) {&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; &amp;nbsp; return GetPropertyGetterMethod(instance, propertyName)&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.Invoke(&lt;span style="color:blue;"&gt;null&lt;/span&gt;, &lt;span style="color:blue;"&gt;new&lt;/span&gt;[] {
instance });&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
&amp;nbsp; }&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;&amp;gt;
&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;propertyGetters = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;DynamicMethod&lt;/span&gt;&amp;gt;();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt; fsync
= &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt;();&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;
}&lt;/span&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;"&gt;&lt;br /&gt;
&lt;/span&gt;I hope this still fall under the category of assembly language &lt;img src="http://devpinoy.org/emoticons/emotion-2.gif" alt="Big Smile" /&gt; &lt;br /&gt;
(even though &lt;a href="http://en.wikipedia.org/wiki/Common_Intermediate_Language"&gt;&lt;span style="color:blue;"&gt;CIL&lt;/span&gt;&lt;/a&gt; is not exactly assembly language)&lt;br /&gt;
&lt;br /&gt;
See you again next time.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:10pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=34391" width="1" height="1"&gt;</description><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/CIL/default.aspx">CIL</category></item><item><title>Optimization Manuals Updated</title><link>http://community.devpinoy.org/blogs/cvega/archive/2009/01/26/optimization-manuals-updated.aspx</link><pubDate>Mon, 26 Jan 2009 07:22:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:34306</guid><dc:creator>cvega</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=34306</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2009/01/26/optimization-manuals-updated.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;&lt;a href="http://agner.org"&gt;Agner Fog&lt;/a&gt;&lt;/b&gt; have updated his amazing set of optimization manuals, do check them out!&lt;br /&gt;&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;1. &lt;b&gt;Optimizing software in C++:
An optimization guide for Windows, Linux and Mac platforms&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;This is an optimization manual for advanced C++ programmers.
Topics include: The choice of platform and operating system. Choice of
compiler and framework. Finding performance bottlenecks.
The efficiency of different C++ constructs. Multi-core systems.
Parallelization with vector operations. CPU dispatching. Efficient
container class templates. Etc.
&lt;br /&gt;&amp;nbsp;&lt;br /&gt;
&lt;span style="text-decoration:underline;"&gt;File name&lt;/span&gt;: optimizing_cpp.pdf, size: 703576, last modified: 2009-Jan-23.&lt;br /&gt;
&lt;a href="http://agner.org/optimize/optimizing_cpp.pdf"&gt;Download&lt;/a&gt;.
&lt;br /&gt;&amp;nbsp;&lt;/dd&gt;&lt;dt&gt;2. &lt;b&gt;Optimizing subroutines in assembly language:
An optimization guide for x86 platforms&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;This is an optimization manual for advanced assembly language programmers
 and compiler makers.
Topics include: C++ instrinsic functions, inline assembly and stand-alone assembly.
Linking optimized assembly subroutines into high level language programs.
Making subroutine libraries compatible with multiple compilers and operating systems.
Optimizing for speed or size. Memory access. Loops. Vector programming (XMM, SIMD).
CPU-specific optimization and CPU dispatching.
&lt;br /&gt;&amp;nbsp;&lt;br /&gt;
&lt;span style="text-decoration:underline;"&gt;File name&lt;/span&gt;: optimizing_assembly.pdf, size: 757202, last modified: 2009-Jan-23.&lt;br /&gt;
&lt;a href="http://agner.org/optimize/optimizing_assembly.pdf"&gt;Download&lt;/a&gt;.
&lt;br /&gt;&amp;nbsp;&lt;/dd&gt;&lt;dt&gt;3. &lt;b&gt;The microarchitecture of Intel and AMD CPU&amp;rsquo;s:
An optimization guide for assembly programmers and compiler makers&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;This manual contains details about the internal working of various microprocessors
from Intel and AMD. Topics include: Out-of-order execution, register renaming,
pipeline structure, execution unit organization and branch prediction algorithms
for each type of microprocessor. Describes many details that cannot be found
in manuals from microprocessor vendors or anywhere else.  The information is
based on my own research and measurements rather than on official sources.
This information will be useful to programmers who want to make CPU-specific
optimizations as well as to compiler makers and students of microarchitecture.
&lt;br /&gt;&amp;nbsp;&lt;br /&gt;
&lt;span style="text-decoration:underline;"&gt;File name&lt;/span&gt;: microarchitecture.pdf, size: 1093888, last modified: 2009-Jan-23.&lt;br /&gt;
&lt;a href="http://agner.org/optimize/microarchitecture.pdf"&gt;Download&lt;/a&gt;.
&lt;br /&gt;&amp;nbsp;&lt;/dd&gt;&lt;dt&gt;4. &lt;b&gt;Instruction tables:
Lists of instruction latencies, throughputs and micro-operation
breakdowns for Intel and AMD CPU&amp;#39;s&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;Contains detailed lists of instruction latencies, execution unit throughputs,
micro-operation breakdown and other details for all application instructions
of most microprocessors from Intel and AMD. Intended as an appendix to the
preceding manuals.
&lt;br /&gt;&amp;nbsp;&lt;br /&gt;
&lt;span style="text-decoration:underline;"&gt;File name&lt;/span&gt;: instruction_tables.pdf, size: 982795, last modified: 2008-Aug-24.&lt;br /&gt;
&lt;a href="http://agner.org/optimize/instruction_tables.pdf"&gt;Download&lt;/a&gt;.
&lt;br /&gt;&amp;nbsp;&lt;/dd&gt;&lt;dt&gt;5. &lt;b&gt;Calling conventions for different C++ compilers and operating systems&lt;/b&gt;&lt;/dt&gt;&lt;dd&gt;This document contains details about data representation,
function calling conventions, register usage conventions, name mangling schemes,
etc. for many different C++ compilers and operating systems. Discusses compatibilities
and incompatibilities between different C++ compilers. Includes information that
is not covered by the official Application Binary Interface standards (ABI&amp;#39;s).
The information provided here is based on my own research and therefore
descriptive rather than normative.
Intended as a source of reference for programmers who want to make function
libraries compatible with multiple compilers or operating systems and for
makers of compilers and other development tools who want their tools to be
compatible with existing tools.
&lt;br /&gt;&amp;nbsp;&lt;br /&gt;
&lt;span style="text-decoration:underline;"&gt;File name&lt;/span&gt;: calling_conventions.pdf, size: 328903, last modified: 2009-Jan-23.&lt;br /&gt;
&lt;a href="http://agner.org/optimize/calling_conventions.pdf"&gt;Download&lt;/a&gt;.
&lt;/dd&gt;&lt;dd&gt;&lt;/dd&gt;&lt;/dl&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;&lt;img src="http://devpinoy.org/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=34306" width="1" height="1"&gt;</description><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/Assembly+Language/default.aspx">Assembly Language</category></item><item><title>Setting-up your MASM32 development environment</title><link>http://community.devpinoy.org/blogs/cvega/archive/2009/01/24/setting-up-your-masm32-development-environment.aspx</link><pubDate>Sat, 24 Jan 2009 13:18:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:34295</guid><dc:creator>cvega</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=34295</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2009/01/24/setting-up-your-masm32-development-environment.aspx#comments</comments><description>&lt;p&gt;To start programming assembly language in windows, you need to first setup your development environment. Hopefully, this post may help you get started.&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;Getting an Assembler/Linker:&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;I previously posted the list of assemblers/linker and where you can get them, &lt;a href="http://devpinoy.org/forums/t/927.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For this post, since I use MASM most of the time, I will be walking you through getting the &lt;a href="http://www.masm32.com"&gt;MASM32 SDK package&lt;/a&gt;, as it contain lots of useful procedures, include files, libraries, help files, examples, tools and more.. At the time of writing, the SDK version is 10, get it &lt;a href="http://www.masm32.com/"&gt;here&lt;/a&gt;. Work around your way to the download area, and get the latest installer package (&lt;a href="http://website.assemblercode.com/masm32/m32v10r.zip"&gt;SDK version 10&lt;/a&gt; is around 4MB).&lt;/p&gt;
&lt;p&gt;Be sure to read and understand the license: &lt;a href="http://www.masm32.com/mlicence.htm"&gt;http://www.masm32.com/mlicence.htm&lt;br /&gt;&lt;/a&gt;Then regularly check the &lt;a href="http://devpinoy.org/forums/84.aspx"&gt;devpinoy assembler forum&lt;/a&gt;, as we regularly post updates, so you&amp;#39;ll get only the latest.&lt;br /&gt;&lt;br /&gt;Once you&amp;#39;re done downloading the Masm32 SDK10 installer, run &lt;i&gt;&lt;b&gt;install.exe&lt;/b&gt;&lt;/i&gt; and follow the direction. Make sure you&amp;#39;re installing it in a directory with &lt;i&gt;&lt;b&gt;no space in directory name&lt;/b&gt;&lt;/i&gt;, like &amp;quot;c:\masm32&amp;quot;, not &amp;quot;c:\Program Files\mask32&amp;quot; -- this is because the assembler/linker that is included in the package is an old one who will throw an error if found spaces in paths. I suggest don&amp;#39;t change the default installation folder, which is in %root%\masm32, where %root% is the root of your selected drive (e.g., C:\)&lt;/p&gt;
&lt;div class="CommonImageDownloadLink"&gt;&lt;a href="http://devpinoy.org/controlpanel/media/p/34291/download.aspx"&gt;
&lt;div&gt;&lt;img src="http://devpinoy.org/controlpanel/resized-image.ashx/__size/500x400/__key/CommunityServer.Components.PostAttachments/00.00.03.42.91/masm32install.jpg" border="0" alt="" /&gt;&lt;/div&gt;
&lt;/a&gt;&lt;a href="http://devpinoy.org/controlpanel/media/p/34291/download.aspx"&gt;
                                        &lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt; The first thing the installer will tell you is about some faulty anti-virus scanner who often flag MASM32 as infected or potentially dangerous, while it is &lt;i&gt;really safe: &lt;br /&gt;&lt;br /&gt;&amp;quot;Some AV scanners do not have properly developed heuristic scanning and produce false positives when scanning very small files that are common in assembler programming. This is unfortunately a consequence of rushed commercial demand and lack of programming skills on the part of some AV vendors who attempt to impose a subset of the Microsoft Portable Executable specifications for 32 bit Windows executable files to cover some of their own technical shortcomings.&lt;br /&gt;&lt;br /&gt;The MASM32 SDK has been built in a fully isolated environment from its original source code in text format and has been successfully installed on millions of computers around the world and it does not contain any viral infection or trojan code.&lt;br /&gt;&lt;br /&gt;If you installation is damaged or interfered with by an installed AV scanner you may need to change the settings so that it does not delete or damage files in the MASM32 installation&amp;quot;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;This is your hint to turn-off your anti-virus scanner for a while., only during installation. Don&amp;#39;t worry, as I said, &lt;b&gt;it is safe&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;After installation, you&amp;#39;ll get a nice greeting telling you that installation is successful:&lt;/p&gt;
&lt;div class="CommonImageDownloadLink"&gt;&lt;a href="http://devpinoy.org/controlpanel/media/p/34292/download.aspx"&gt;
&lt;div&gt;&lt;img src="http://devpinoy.org/controlpanel/resized-image.ashx/__size/500x400/__key/CommunityServer.Components.PostAttachments/00.00.03.42.92/masm32installok.jpg" border="0" alt="" /&gt;&lt;/div&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;
                                
                        
                    
                    
                        &lt;b style="font-size:120%;"&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;That&amp;#39;s it! You now have a complete MASM assembler environment. You can now turn your anti-virus program back on., and include your masm32 directory to exclusion, so it won&amp;#39;t bother you much about false-positives.&lt;br /&gt;&lt;br /&gt;Now let&amp;#39;s see the important directories created for us by MASM32:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;%masm32%\help&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in here you can find lots of useful HELP files. If you&amp;#39;re a beginner, do check &lt;b&gt;asmintro.chm&lt;/b&gt; and &lt;b&gt;opcodes.chm&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;%masm32%&lt;/b&gt;&lt;b&gt;\examples&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in here you will find tons of examples. Do check them out everytime you need to learn how to get something done, you may find it in one of the examples.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;%masm32%&lt;/b&gt;&lt;b&gt;\include&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;in here, you will find include files mostly traslated from platform SDK for assembly programmers to include in their programs. It also contains masm32.inc include file that has all the defines and prototypes of MASM32 library. check &lt;b&gt;masm32.chm&lt;/b&gt; for reference.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;%masm32%&lt;/b&gt;&lt;b&gt;\lib&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in here, you&amp;#39;ll find library files mostly taken from platform SDK for assembly programmers to include in their programs. It also contains masm32.lib file, see description for \include&lt;br /&gt;&lt;br /&gt;&lt;b&gt;\bin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;in here are the binaries for assembling, linking, dump, debug etc., &lt;br /&gt;&lt;br /&gt;&lt;b&gt;%masm32%&lt;/b&gt;&lt;b&gt;\tutorial&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; has various tutorials for using the MASM32 package.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;%masm32%&lt;/b&gt;&lt;b&gt;\macros&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; in here are the macros for making your assembly programming experience quick, easy, fun and challenging.&lt;/p&gt;
&lt;h3&gt;Additional Downloads:&lt;/h3&gt;
&lt;p&gt;Below are recomended downloads to help you on your learning experiences about assembly programming on windows:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&amp;amp;displaylang=en"&gt;Windows Platform SDK&lt;/a&gt; - You must have this one (the latest is &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a91dc12a-fc94-4027-b67e-46bab7c5226c&amp;amp;DisplayLang=en"&gt;Windows 7 SDK Beta&lt;/a&gt;).&lt;br /&gt;&lt;a href="http://www.microsoft.com/express/vc/"&gt;Visual C++ 2008 Express Edition&lt;/a&gt; - A free C++ IDE from Microsoft. You can &lt;a href="http://jimweller.com/jim-weller/jim/vc98asmqs/"&gt;set it up for MASM programming&lt;/a&gt;.&lt;br /&gt;&lt;a href="http://win32assembly.online.fr/tutorials.html"&gt;Iczelion&amp;#39;s Tutorials&lt;/a&gt; - Most beginners find these tutorials useful and informative.&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=7A1C9DA0-0510-44A2-B042-7EF370530C64&amp;amp;displaylang=en"&gt;&lt;br /&gt;MASM 8.0&lt;/a&gt; - If you want the latest MASM binary from microsoft, get this and replace the old ones in your masm32\bin (be sure to make a backup before you replace them)&lt;br /&gt;&lt;a href="http://www.intel.com/products/processor/manuals/"&gt;Processor Manuals&lt;/a&gt; - I&amp;#39;m using Intel processor, both IA32 and IA64. -- you can &lt;a href="http://www.google.com"&gt;google&lt;/a&gt; for the manual of your processor for a more precise link.&lt;br /&gt;&lt;a href="http://webster.cs.ucr.edu/"&gt;Art of Assembly eBook&lt;/a&gt; - Get a free copy of AoA!&lt;br /&gt;&lt;a href="http://www.ollydbg.de/"&gt;OllyDBG&lt;/a&gt; - A great free debugger, this is a must download.&lt;/p&gt;
&lt;h3&gt;Trying your new environment:&lt;/h3&gt;
&lt;p&gt;Open &lt;b&gt;Quick Editor&lt;/b&gt; that is included in MASM32 package. It is located in %masm32%\qeditor.exe. Or simply double-click the desktop shortcut that was created for you by MASM32 installer (if you allowed desktop shortcut creation during install).&lt;br /&gt;&lt;br /&gt;In Quick Editor, type this simple program (&lt;i&gt;it&amp;#39;s a simple message box program, don&amp;#39;t worry for now if you can&amp;#39;t understand it, you&amp;#39;ll get used to it later&lt;/i&gt;):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;include \masm32\include\masm32rt.inc&lt;br /&gt;&lt;br /&gt;.data&lt;br /&gt;&amp;nbsp;&amp;nbsp; caption db &amp;quot;MASM32&amp;quot;, 0&lt;br /&gt;&amp;nbsp;&amp;nbsp; text&amp;nbsp;&amp;nbsp;&amp;nbsp; db &amp;quot;It works!&amp;quot;, 0&lt;br /&gt;&lt;br /&gt;.code&lt;br /&gt;start:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke MessageBox, 0, addr text, addr caption, MB_OK or MB_ICONINFORMATION&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke ExitProcess, 0&lt;br /&gt;&lt;br /&gt;end start&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Save it (&lt;i&gt;again to directory with no space in directory name - also, you filename should not contain space either&lt;/i&gt;) then go to &lt;b&gt;&amp;quot;Project&lt;/b&gt;&amp;quot; and hit &lt;b&gt;&amp;quot;Build All&lt;/b&gt;&amp;quot;.&lt;br /&gt;Quick editor will build the program for you!&lt;/p&gt;
&lt;div class="CommonImageDownloadLink"&gt;&lt;a href="http://devpinoy.org/controlpanel/media/p/34293/download.aspx"&gt;
&lt;div&gt;&lt;img src="http://devpinoy.org/controlpanel/resized-image.ashx/__size/500x400/__key/CommunityServer.Components.PostAttachments/00.00.03.42.93/buildok.jpg" border="0" alt="" /&gt;&lt;/div&gt;
&lt;/a&gt;&lt;a href="http://devpinoy.org/controlpanel/media/p/34293/download.aspx"&gt;
                                        &lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Now run your program, click the&lt;b&gt; &amp;quot;Program&amp;quot;&lt;/b&gt; menu, and hit &amp;quot;&lt;b&gt;Run Program&lt;/b&gt;&amp;quot;&lt;br /&gt;You should see a messagebox saying &amp;quot;It Works!&amp;quot;:&lt;/p&gt;
&lt;div class="CommonImageDownloadLink"&gt;&lt;a href="http://devpinoy.org/controlpanel/media/p/34294/download.aspx"&gt;
&lt;div&gt;&lt;img src="http://devpinoy.org/controlpanel/resized-image.ashx/__size/500x400/__key/CommunityServer.Components.PostAttachments/00.00.03.42.94/itworks.jpg" border="0" alt="" /&gt;&lt;/div&gt;
&lt;/a&gt;&lt;a href="http://devpinoy.org/controlpanel/media/p/34294/download.aspx"&gt;
                                        &lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Congratulation, you now have a working MASM32 installed in your system. Welcome to the club.&lt;br /&gt;&lt;br /&gt;Next time, I&amp;#39;ll walk you through more about &lt;b&gt;Quick Editor&lt;/b&gt;, and how to setup an IDE for your assembly programming.&lt;br /&gt;&lt;br /&gt;For now, it&amp;#39;s already late. Until next time.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://devpinoy.org/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=34295" width="1" height="1"&gt;</description><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/Assembly+Language/default.aspx">Assembly Language</category></item><item><title>An assembly language only blog</title><link>http://community.devpinoy.org/blogs/cvega/archive/2009/01/22/an-assembly-language-only-blog.aspx</link><pubDate>Thu, 22 Jan 2009 14:57:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:34280</guid><dc:creator>cvega</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=34280</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2009/01/22/an-assembly-language-only-blog.aspx#comments</comments><description>&lt;p&gt;Kamusta mundo!&lt;br /&gt;&lt;br /&gt;Always busy at work and have little time to spare on thinking what else &amp;quot;good&amp;quot; to blog about, let alone post. But hold on., I&amp;#39;m not saying this because I&amp;#39;m going to retire this blog, but actually I have a better plan. &lt;/p&gt;
&lt;p&gt;After reviewing visit logs, I think posts that are about assembly programming has the most visits., which help me decide to limit my topic to mostly assembly language things, that&amp;#39;s from now on.&lt;/p&gt;
&lt;p&gt;Anything that&amp;#39;s about assembly language that I have encountered., whether an inline assembly, MASM or other assemblers, ILAsm, or most things that got me interrested, I will blog.&lt;/p&gt;
&lt;p&gt;So then, stay tuned and see you then next time.&lt;/p&gt;
&lt;p&gt;Long live assembly language!&lt;/p&gt;
&lt;p&gt;&lt;img src="http://devpinoy.org/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=34280" width="1" height="1"&gt;</description><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/Assembly+Language/default.aspx">Assembly Language</category></item><item><title>Load PNG/JPEG from resource using GDI+ (MASM)</title><link>http://community.devpinoy.org/blogs/cvega/archive/2008/10/26/load-png-jpeg-from-resource-using-gdi-masm.aspx</link><pubDate>Sun, 26 Oct 2008 11:45:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:31076</guid><dc:creator>cvega</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=31076</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2008/10/26/load-png-jpeg-from-resource-using-gdi-masm.aspx#comments</comments><description>&lt;p class="MsoNormal"&gt;Following my previous post on how to load JPG/PNG file
from resource using GDI+:&lt;br /&gt;
&lt;a href="http://devpinoy.org/controlpanel/blogs/cvega/archive/2008/07/28/loading-png-and-jpg-image-from-resource-using-gdi.aspx"&gt;http://devpinoy.org/blogs/cvega/archive/2008/07/28/loading-png-and-jpg-image-from-resource-using-gdi.aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;span&gt;&lt;/span&gt;I&amp;rsquo;ve written an equivalent function for
MASM32 users:&lt;br /&gt;
&lt;a href="http://www.masm32.com/board/index.php?topic=10191.0"&gt;http://www.masm32.com/board/index.php?topic=10191.0&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Just follow these simple steps and you&amp;rsquo;re set to use
resource image in your program in no time.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;gdiplusLoadBitmapFromResource&lt;/b&gt;, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;hInstance, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;resourceName, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;resourceType, &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;outImage&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; where:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;&amp;nbsp;hInstance&lt;/b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - the module handle
where to load the resource&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;resourceName&lt;/b&gt;&amp;nbsp; &amp;nbsp;- the name or the ID of the
resource&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;resourceType&lt;/b&gt;&amp;nbsp; &amp;nbsp;- string pointer that will
indicate the type &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;of the resource.,
e.g., &amp;quot;PNG&amp;quot;,0&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt;outImage&lt;/b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- address of
variable where to put the handle &lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;of loaded image&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:12pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;
&lt;b&gt;Here&amp;#39;s how to use it: &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1.&lt;/b&gt; Add the function gdiplusLoadBitmapFromResource to your program, or
include gdiplusLoadBitmapFromResource.inc.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.&lt;/b&gt; Add the proto (so you can use INVOKE to call
gdiplusLoadBitmapFromResource):&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;gdiplusLoadBitmapFromResource proto :HMODULE,
:LPSTR, :LPSTR, :DWORD&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:12pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;
&lt;b&gt;3.&lt;/b&gt; Initialize GDI+ on your program&amp;#39;s start&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;GdiplusStartupInput struc&lt;br /&gt;
&amp;nbsp; &amp;nbsp; GdiplusVersion dd ?&lt;br /&gt;
&amp;nbsp; &amp;nbsp; DebugEventCallback dd ?&lt;br /&gt;
&amp;nbsp; &amp;nbsp; SuppressBackgroundThread BOOL ?&lt;br /&gt;
&amp;nbsp; &amp;nbsp; SuppressExternalCodecs BOOL ?&lt;br /&gt;
GdiplusStartupInput ends&lt;br /&gt;
&lt;br /&gt;
.data&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;gdiplusToken dd ?&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;gdiplusSInput GdiplusStartupInput
&amp;lt;1, NULL, FALSE, FALSE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.code&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke GetModuleHandle, 0&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mov hInstance, eax&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; Initialize GDI+&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke GdiplusStartup, addr
gdiplusToken, addr gdiplusSInput, NULL&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:12pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;
&lt;b&gt;4.&lt;/b&gt; In your resource script, add your image with specified type,
something like:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;9000 PNG &amp;quot;myImage.png&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:12pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;
where &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;9000&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; is the ID of the resource, and &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;PNG&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; is the type&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;5.&lt;/b&gt; Add a null-terminated string entry to your data section for the type
of resource, e.g., &amp;quot;PNG&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;.data&lt;br /&gt;
&amp;nbsp; &amp;nbsp; pngImage dd NULL &lt;br /&gt;
&amp;nbsp; &amp;nbsp; pngType db &amp;quot;PNG&amp;quot;, 0&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:12pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;
&lt;b&gt;6.&lt;/b&gt; Load the image using gdiplusLoadBitmapFromResource:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;invoke gdiplusLoadBitmapFromResource,
hInstance, 9000, addr pngType, addr pngImage&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:12pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;
&lt;b&gt;7.&lt;/b&gt; When you&amp;#39;re done using the image, dispose it using GdipDisposeImage
function:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;invoke GdipDisposeImage, addr pngImage&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:12pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;
&lt;b&gt;8.&lt;/b&gt; Finally, shutdown GDI+ before you exit your program:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom:0.0001pt;line-height:normal;"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;invoke GdiplusShutdown, gdiplusToken&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;
Hope you find this little code useful.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;img src="http://img377.imageshack.us/img377/3838/imagebm9.jpg" alt="" /&gt;&lt;br /&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
&lt;br /&gt;
-chris&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=31076" width="1" height="1"&gt;</description><enclosure url="http://community.devpinoy.org/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.03.10.76/gdiplres.zip" length="151858" type="application/zip" /><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/Win32+Assembly/default.aspx">Win32 Assembly</category></item><item><title>[REDUX] Message Cracker for MASM </title><link>http://community.devpinoy.org/blogs/cvega/archive/2008/10/25/redux-message-cracker-for-masm.aspx</link><pubDate>Sun, 26 Oct 2008 03:36:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:31007</guid><dc:creator>cvega</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=31007</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2008/10/25/redux-message-cracker-for-masm.aspx#comments</comments><description>&lt;p&gt;About 3 years ago, I&amp;rsquo;ve released a MASM version of message cracker for handling windows messages here:&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;a href="http://community.devpinoy.org/controlpanel/forums/p/516/1524.aspx#1524"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;http://devpinoy.org/forums/p/516/1524.aspx#1524&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;I really find this include file useful whenever I am working on a GUI based win32 program using MASM. Unfortunately, only few people know about it, so I hope this blog post will provide a late introduction about what this include file is all about.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;About message cracker:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;To make it simple, message cracker is a set of macros that you can line-up to your message-handling routine to enable window-message handling to a separate (or inline) procedure. This line-up of macro calls may improve the readability of your program compared to a long list of &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;.IF/.ELSEIF/.ENDIF&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;.&lt;br /&gt;&lt;br /&gt;To see the advantage of using a message-cracker, let&amp;rsquo;s see how a typical message-handling routine would look like:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WinProc proc hWnd:HWND, uMsg:dword, wParam:WPARAM, lParam:LPARAM&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;LOCAL ps:PAINTSTRUCT&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.if uMsg == WM_INITDIALOG&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke LoadIcon, hInstance, ICON_APP&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke SendMessage, hWnd, WM_SETICON, ICON_BIG or ICON_SMALL, eax&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.elseif uMsg == WM_COMMAND&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mov eax,&lt;span&gt;&amp;nbsp; &lt;/span&gt;wParam&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.if eax == ID_BUTTON1&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; ID_BUTTON1 was accessed, handle the event here&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.elseif eax == ID_BUTTON2&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; ID_BUTTON2 was accessed, handle the event here&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.endif&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.elseif uMsg == WM_PAINT&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke BeginPaint, hWnd, addr ps&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; Peform paint routine here&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;nvoke EndPaint, hWnd, addr ps&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.elseif uMsg == WM_CLOSE&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke EndDialog, hWnd, 0&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.endif&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;xor eax,eax&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret &lt;br /&gt;WinProc endp&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;And that&amp;rsquo;s kind of clean and readable, because the procedure handles only 4 window-messages. However, you can imagine how this procedure will look like if it handles 20 or more window-messages. It will become a long procedure that is hard to trace and not too readable.&lt;br /&gt;&lt;br /&gt;And as you have already known it, there&amp;rsquo;s a neat solution for that kind of situation. This is, to break the handler for each window-message to their own respective handler-procedure. If I break-up a the example above, it will be done similar to:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WinProc proc hWnd:HWND, uMsg:dword, wParam:WPARAM, lParam:LPARAM&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.if uMsg == WM_INITDIALOG&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;push hWnd&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;call WmInitDialog&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.elseif uMsg == WM_COMMAND&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;push hWnd&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;push wParam&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;call WmCommand&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.elseif uMsg == WM_PAINT&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;push hWnd&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;call WmPaint&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.elseif uMsg == WM_CLOSE&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke EndDialog, hWnd, 0&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.endif&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;xor eax,eax&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;WinProc endp&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WmInitDialog proc hWnd:HWND&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;LoadIcon, hInstance, ICON_APP&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SendMessage, hWnd, WM_SETICON, ICON_BIG or ICON_SMALL, eax&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;br /&gt;WmInitDialog endp&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WmCommand proc hWnd:HWND, wParam:WPARAM&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mov eax, wParam&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.if eax == ID_BUTTON&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; ID_BUTTON was accessed, handle the event here&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.elseif eax == ID_BUTTON2&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; ID_BUTTON2 was accessed, handle the event here&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.endif&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;br /&gt;WmCommand endp&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WmPaint proc hWnd:HWND&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;LOCAL ps:PAINTSTRUCT&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke BeginPaint, hWnd, addr ps&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; Peform paint routine here&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke EndPaint, hWnd, addr ps&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;br /&gt;WmPaint endp&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;Then, the more window-messages you add, the more handler-procedure you will need to add as well. Or you may leave it inline if the handler contains only 1 line, similar to what I&amp;rsquo;ve done to &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WM_CLOSE&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; above.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;The idea of a message-cracker is just that -&amp;gt; Break the handler for each window-message to their own respective handler-procedure. In addition, the message-cracker helps you get the needed information for quickly handing a particular message.&lt;br /&gt;&lt;br /&gt;For example, the &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WM_MOUSEMOVE&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; message passes the x and y coordinates of mouse-pointer into &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;LPARAM&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;. You need to extract the high-word (y) and low-word (x) from &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;LPARAM&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; to actually use the x and y coordinate.&lt;br /&gt;&lt;br /&gt;When assigning a handler-procedure to handle a window-message, message-cracker will actually do much of the work for these small details. Your handler-procedure will receive only the needed information (argument) to work with the window-message itself.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Here&amp;rsquo;s how the handler of &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WM_MOUSEMOVE&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; looks like:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WmMouseMove proc hWnd:HWND, x:DWORD, y:DWORD&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; add code to handle mouse move &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;br /&gt;WmMouseMove endp&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;There&amp;rsquo;s no more &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;LPARAM&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; to worry about. Your handler-procedure will receive x and y coordinates, as it should.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;Using it: &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;br /&gt;First you need to get the message-cracker include file. Download the attachment, and extract the file MsgCrack.inc.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;In your program, include the MsgCrack.inc&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;include MsgCrack.inc&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;Then you&amp;rsquo;re ready message cracking.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How to add handler&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Inside your window procedure, start cracking messages with this block:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;.handle_msg_begin&lt;br /&gt;.handle_msg_end&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;The &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;.handle_msg_begin &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;accepts 4 optional arguments:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;.handle_msg_begin [HWND], [MSG], [WPARAM], [LPARAM], [REG]&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;br /&gt;The default is:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;HWND = hWnd&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;MSG = uMsg&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;WPARAM = lParam&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;LPARAM = wParam&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;REG = EAX&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;br /&gt;If your window procedure is defined this way:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;WndProc proc &lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;hWnd&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;:HWND, &lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;uMsg&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;:dword, &lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;wParam&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;:WPARAM, &lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;lParam&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;:LPARAM&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;xor eax, eax&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;br /&gt;WndProc endp&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;br /&gt;Where all the arguments matches the default arguments, then you don&amp;rsquo;t need to specify anything, just add the block as is:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;WndProc proc hWnd:HWND, uMsg:dword, wParam:WPARAM, lParam:LPARAM&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;.handle_msg_begin&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;.handle_msg_end&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;xor eax, eax&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;br /&gt;WndProc endp&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;However, if your window procedure is defined differently, something like this one: &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;WndProc proc &lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;hWin&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;:DWORD, &lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;uMsg&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;:DWORD, &lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;aParam&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;:DWORD, &lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;bParam&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;:DWORD&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;xor eax, eax&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;br /&gt;WndProc endp&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Then you have to tell the message-cracker which identifier should be used: &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;WndProc proc hWin:DWORD, uMsg:DWORD, aParam:DWORD, bParam:DWORD&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;.handle_msg_begin &lt;b&gt;hWin, uMsg, aParam, bParam, eax&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;.handle_msg_end&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;xor eax, eax&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;br /&gt;WndProc endp&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;br /&gt;That&amp;rsquo;s the quick part of it. Check the comment I&amp;rsquo;ve written inside MsgCrack.inc for detail about these default identifier. &lt;br /&gt;&lt;br /&gt;Now, let&amp;rsquo;s move to the next part. Let&amp;rsquo;s register a handler-procedure with window-message.&lt;span&gt;&amp;nbsp; &lt;/span&gt;This is done using the macro &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;.handle_msg&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; with the following arguments:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;.handle_msg &amp;lt;window message constant&amp;gt;, &amp;lt;handler function&amp;gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;br /&gt;Where &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;window message constant&amp;gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; is the constant defined in &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;windows.inc&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; include file (MASM32), &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;WM_PAINT&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;, &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;WM_MOUSEMOVE&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; and &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;WM_CLOSE&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;, are some of the window-message constant. The macro won&amp;rsquo;t work if you used integer value, so you should always use the defined constant. Then the &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;lt;handler function&amp;gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; is the name of your handler-procedure.&lt;br /&gt;&lt;br /&gt;Here&amp;rsquo;s the similar code above, redefined to use the message cracker:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;WinProc proc hWnd:HWND, uMsg:dword, wParam:WPARAM, lParam:LPARAM&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.handle_msg_begin&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.handle_msg WM_INITDIALOG, WmInitDialog&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.handle_msg WM_COMMAND, WmCommand&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.handle_msg WM_PAINT, WmPaint&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.handle_msg_inline WM_CLOSE&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke EndDialog, hWnd, 0&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.handle_msg_end&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;xor eax,eax&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;WinProc endp&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;WmInitDialog proc &lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;hWnd:HWND, defCtrl:HWND, initData:dword&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;LoadIcon, hInstance, ICON_APP&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;SendMessage, hWnd, WM_SETICON, ICON_BIG or ICON_SMALL, eax&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;br /&gt;WmInitDialog endp&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;WmCommand proc &lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;hWnd:HWND, id:dword, hWndCtl:HWND, codeNotify:dword&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.if id == ID_BUTTON&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; ID_BUTTON was accessed, handle the event here&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.elseif id == ID_BUTTON2&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; ID_BUTTON2 was accessed, handle the event here&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.endif&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;br /&gt;WmCommand endp&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;WmPaint proc&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;hWnd:HWND&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;LOCAL ps:PAINTSTRUCT&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke BeginPaint, hWnd, addr ps&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;; Peform paint routine here&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;invoke EndPaint, hWnd, addr ps&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;br /&gt;WmPaint endp&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;The noticeable difference is the replacement of &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;.if/.elseif/.endif&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; statements into &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;.handle_msg_begin/.handle_msg/.handle_msg_inline/.handle_msg_end&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;. And in the handler-procedures, the arguments have changed to reflect the information passed by the window-message (see the argument list of &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WmCommand&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; handler).&lt;br /&gt;&lt;br /&gt;Now, if you notice &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WM_CLOSE&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; message handling is different, because we don&amp;rsquo;t want to branch the handler to a separate handler-procedure, so we use &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;.handle_msg_inline&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; to indicate that &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WM_CLOSE&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; handling follows on the next line (inline):&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;.handle_msg_inline WM_CLOSE&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;br /&gt;Another good thing about message-cracker is, you can register similar window-messages to a single handler-procedure, if they share similar argument listing. For example, assigning 3 button-up messages, &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WM_LBUTTONUP&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;, &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WM_MBUTTONUP&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;, &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WM_RBUTTONUP&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; to &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WmButtonUp&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; should be as easy as this:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.handle_msg WM_LBUTTONUP, &lt;b&gt;WmButtonUp&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.handle_msg WM_MBUTTONUP, &lt;b&gt;WmButtonUp&lt;/b&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;.handle_msg WM_RBUTTONUP, &lt;b&gt;WmButtonUp&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;br /&gt;From this point, I&amp;rsquo;ve probably covered the how-to-use part of the include file., now let me tell you how you can create your handler-procedure.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Creating Handler Procedure: &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Open MsgCrack.inc file, then search the window-message you want to handle e.g., &lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WM_SETCURSOR&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;.&lt;span&gt;&amp;nbsp; &lt;/span&gt;You can see the defined macro for handling that window-message as: &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;; WM_handler(hWnd:HWND, hWndCursor:HWND, codeHitTest:dword, msg:dword)&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;&lt;br /&gt;.handle_WM_SETCURSOR macro in_hWnd, in_lParam, in_wParam, addr_handler&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;The part we are interested is the comment line above it, as:&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;WM_handler(argument-listing)&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;br /&gt;That&amp;rsquo;s your cue about the argument listing, inside the parentheses. Copy-it, then paste it in a new procedure, similar to this one:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;WmSetCursor proc &lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#c00000;"&gt;hWnd:HWND, hWndCursor:HWND, codeHitTest:dword, msg:dword&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#4f6228;"&gt;&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ret&lt;br /&gt;WmSetCursor endp&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;That&amp;rsquo;s it. For any questions, suggestions, bug-report, or any feedback, please post it below.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;See the attachment for the sample program and the include file.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Happy coding.&lt;br /&gt;&lt;br /&gt;-chris&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=31007" width="1" height="1"&gt;</description><enclosure url="http://community.devpinoy.org/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.03.10.07/MsgCrack.zip" length="23517" type="application/zip" /><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/Win32+Assembly/default.aspx">Win32 Assembly</category></item><item><title>How To: OOP in assembly language</title><link>http://community.devpinoy.org/blogs/cvega/archive/2008/08/22/how-to-oop-in-assembly-language-part-1.aspx</link><pubDate>Fri, 22 Aug 2008 13:29:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:27004</guid><dc:creator>cvega</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=27004</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2008/08/22/how-to-oop-in-assembly-language-part-1.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;This post is a response to forum &lt;a href="http://devpinoy.org/forums/t/4131.aspx"&gt;&lt;span style="color:#800080;"&gt;question&lt;/span&gt;&lt;/a&gt; posted by &lt;a href="http://devpinoy.org/members/modchip/default.aspx"&gt;modchip&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;quot;Recently, I&amp;#39;ve seen a lot of stuff about doing OOP in assembly language. Most of the stuff I&amp;#39;ve seen almost fried my brain. So... does anybody have some simple (by simple, I mean very simple) examples to get n00bs like me started? What are the basic requirements? What are its advantages? I would definitely want to learn more about this.&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Definition:&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Objects in assembly is implemented only by using structure (which&amp;nbsp;serves as the&amp;nbsp;&lt;a href="http://www.glenmccl.com/glos.htm#tag034"&gt;class&lt;/a&gt; definition), defined to have its first member as a pointer to the class&amp;#39;s &lt;a href="http://www.glenmccl.com/glos.htm#tag278"&gt;virtual table&lt;/a&gt; (vtable), something like this:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;Animal struc&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; vtable dd 0&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; m_kind db 32 dup (0)&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;Animal ends&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.glenmccl.com/glos.htm#tag143"&gt;Instance methods&lt;/a&gt; on the other hand are written as normal procedure having the &amp;ldquo;instance of the class&amp;ldquo; as the first argument, known as the `&lt;a href="http://www.glenmccl.com/glos.htm#tag250"&gt;this&lt;/a&gt;&amp;rsquo; pointer, see these two methods for the Animal class I&amp;rsquo;ve written:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;a href="mailto:GetKind@Animal"&gt;GetKind@Animal&lt;/a&gt; proc $this:dword&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp; mov eax, $this&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; setup the $this argument to EAX&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp; add eax, offset Animal.m_kind&amp;nbsp;&amp;nbsp;; Add the offset of member variable m_kind&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp; ret&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Return it&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;GetKind@Animal endp&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;SetKind@Animal proc uses esi edi $this:dword, lpValue:dword&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp; invoke GetKind@Animal, $this&amp;nbsp;&amp;nbsp; ; Get the address of the member variable&amp;nbsp;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp; invoke szCopy, lpValue, eax&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Set it&amp;nbsp; with different value&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&amp;nbsp;xor eax, eax&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp; ret&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;SetKind@Animal endp&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;br /&gt;As you can see, there&amp;rsquo;s nothing fancy about writing methods, all you need is a naming convention that will help you work with unique namings. I use $this as the name of the `&lt;a href="http://www.glenmccl.com/glos.htm#tag250"&gt;this&lt;/a&gt;&amp;rsquo; pointer, and for method name, I use &lt;i&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;method name + &amp;lsquo;@&amp;rsquo; character + name of the class&lt;/span&gt;&lt;/i&gt; who owns the method, thus &lt;i&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;GetKind@Animal&lt;/span&gt;&lt;/i&gt; and &lt;i&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;SetKind@Animal&lt;/span&gt;&lt;/i&gt;. For overloaded methods, I just&amp;nbsp;append &amp;#39;@&amp;#39;&amp;nbsp;+ size of arguments. Something like, if I overloaded &lt;i&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;GetKind@Animal&lt;/span&gt;&lt;/i&gt; with argument for catching the output, I&amp;#39;ll be writing it as: &lt;i&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;GetKind@Animal@4&lt;/span&gt;&lt;/i&gt; where &lt;i&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;@4&lt;/span&gt;&lt;/i&gt; means 1 DWORD argument pass the $this pointer.&lt;br /&gt;&lt;br /&gt;Inside each methods, all you need is &lt;a href="http://webster.cs.ucr.edu/Page_TechDocs/Structures.pdf"&gt;knowledge of working with assembly structures&lt;/a&gt; to get around with the $this pointer. In my example, I&amp;nbsp;simply added the offset of the member I&amp;rsquo;m interested in, with the $this pointer:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;i&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;mov eax, $this&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; setup the $this argument to EAX&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;add eax, offset Animal.m_kind&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; Add the offset of member variable m_kind&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;my_class struc&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; vtable dd 0&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;my_class ends&lt;/span&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:black;line-height:115%;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;Note: you only need &lt;i&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;a href="http://www.glenmccl.com/glos.htm#tag278"&gt;vtable&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt; if there are virtual members defined (members that can be overridden by derived classes). I&amp;#39;ll get to that on my next post.&lt;br /&gt;&lt;br /&gt;This structure&amp;nbsp;also holds all &lt;a href="http://www.glenmccl.com/glos.htm#tag120"&gt;instance variables&lt;/a&gt; for that class. &lt;br /&gt;Let&amp;rsquo;s assume we have a class called Animal with &lt;a href="http://www.glenmccl.com/glos.htm#tag120"&gt;instance&lt;/a&gt; variable &lt;i&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;m_kind&lt;/span&gt;&lt;/i&gt;&amp;nbsp;as 32 bytes, then our structure will be written like this:&lt;br style="mso-special-character:line-break;" /&gt;&lt;br style="mso-special-character:line-break;" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;That&amp;rsquo;s how I set register to point to the correct member variable. The code above, EAX now holds the effective address of &lt;i&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Instance.m_kind&lt;/span&gt;&lt;/i&gt;.&amp;nbsp;Then we can return it, or perform whatever logic we desire to that member variable.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;a href="http://www.glenmccl.com/glos.htm#tag120"&gt;Instanciation&lt;/a&gt;:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Creating an&lt;a href="http://www.glenmccl.com/glos.htm#tag120"&gt; instance&lt;/a&gt; of the &lt;a href="http://www.glenmccl.com/glos.htm#tag034"&gt;class&lt;/a&gt; is simply declaring a variable of type structure we&amp;rsquo;ve defined earlier:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;.data&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp; AnimalInstance Animal &amp;lt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Then call the &lt;a href="http://www.glenmccl.com/glos.htm#tag046"&gt;constructor&lt;/a&gt; as &amp;quot;the first thing&amp;quot; before using the instance (if you want). C++ calls the constructor automagically for you (even creating default constructor for you), but in assembly, it&amp;rsquo;s up to you whether you want to call the constructor or not (you can actually implement constructorless objects). &lt;br /&gt;&lt;br /&gt;Ok, assuming we&amp;#39;ve declared a default constructor &lt;i&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;ctor@Animal&lt;/span&gt;&lt;/i&gt;, calling it is similar to calling assembly procedure, passing the instance as the first argument:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;push offset AnimalInstance&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;call ctor@Animal&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Similar to calling the constructor above, calling the &lt;a href="http://www.glenmccl.com/glos.htm#tag143"&gt;method&lt;/a&gt; is no different. Let&amp;rsquo;s assume we want to set the animal&amp;rsquo;s kind to &amp;ldquo;Bird&amp;rdquo; by calling the methof &lt;a href="mailto:SetKind@Animal"&gt;SetKind@Animal&lt;/a&gt;, you can do it this way:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;.data&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AnimalInstance Animal &amp;lt;&amp;gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; animalInstanceKind db &amp;quot;Bird&amp;quot;, 0 &lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;.code&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;push offset animalInstanceKind&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; push offset AnimalInstance&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call SetKind@Animal&lt;/span&gt;&lt;/i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;I suggest&amp;nbsp;to define a prototype for the methods, so we can use the MASM&amp;rsquo;s invoke:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:8pt;color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetKind@Animal proto :dword, :dword&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/i&gt;&lt;/i&gt;.code&lt;br /&gt;&lt;i&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; invoke SetKind@Animal, addr AnimalInstance, addr animalInstanceKind&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Benefits:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-size:10pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;br /&gt;I can&amp;#39;t think of any good benefits, really. Implementing OOP in a non-OOP compiler is simply a kind of workaround which introduces much work and maintenance&amp;nbsp;than working with procedural&amp;nbsp;which is what&amp;#39;s available in assembly language.&lt;br /&gt;&lt;br /&gt;Benefits probably will count if OOP is available &lt;b&gt;built-in&lt;/b&gt; in an assembler. &lt;a href="http://webster.cs.ucr.edu/"&gt;HLA&lt;/a&gt; is one of the &amp;#39;compiler&amp;#39; that provides this &amp;quot;built-in&amp;quot; functionality; and also, there&amp;#39;s &lt;a href="http://objasm32.tripod.com/"&gt;ObjAsm32&lt;/a&gt; too, implementing OOP using set of MASM macros (emulating OOP keywords).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Closing:&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;That&amp;rsquo;s basically pretty much of it, practice and enjoy OOP in assembly language.&lt;br /&gt;Thanks for reading. I&amp;rsquo;ll cover Overloading, Inheritance, Static and Virtual members on my next post.&lt;br /&gt;&lt;br /&gt;Until the next time, happy coding.&lt;i&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0in 0in 10pt;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=27004" width="1" height="1"&gt;</description><enclosure url="http://community.devpinoy.org/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.02.70.04/oopasm1.zip" length="1032" type="application/x-zip-compressed" /><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/Win32+Assembly/default.aspx">Win32 Assembly</category><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/OOP/default.aspx">OOP</category></item><item><title>C# seems to preserve left-hand value of an assignment statement</title><link>http://community.devpinoy.org/blogs/cvega/archive/2008/08/03/c-seems-to-preserve-left-hand-value-of-an-assignment-statement.aspx</link><pubDate>Mon, 04 Aug 2008 00:52:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:26662</guid><dc:creator>cvega</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=26662</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2008/08/03/c-seems-to-preserve-left-hand-value-of-an-assignment-statement.aspx#comments</comments><description>&lt;p&gt;Consider this weird piece of code:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;nbsp; int[] a = new int[] { 0, 1, 2 };&lt;br /&gt;&lt;br /&gt;&amp;nbsp; int i = 2; // Point&amp;nbsp;it to the last item of array&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // Set the value of array indexed by i while&lt;br /&gt;&amp;nbsp; // changing the value of i&lt;br /&gt;&amp;nbsp; a[ i ] = ++i + ++i;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The code above will not cause an array&amp;#39;s bounds overflow.&lt;br /&gt;&lt;br /&gt;The value of &lt;em&gt;i&lt;/em&gt; was incremented (++i) then added to its another incremented value (+ ++i), &lt;br /&gt;but for some reason the left hand part seems to &lt;em&gt;remember&lt;/em&gt; the original value of &lt;em&gt;i.&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;I didn&amp;#39;t know that &lt;img src="http://devpinoy.org/emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=26662" width="1" height="1"&gt;</description></item><item><title>Loading PNG (and JPG) image from resource using GDI+</title><link>http://community.devpinoy.org/blogs/cvega/archive/2008/07/28/loading-png-and-jpg-image-from-resource-using-gdi.aspx</link><pubDate>Mon, 28 Jul 2008 09:49:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:26542</guid><dc:creator>cvega</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=26542</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2008/07/28/loading-png-and-jpg-image-from-resource-using-gdi.aspx#comments</comments><description>&lt;p&gt;Last night while I was translating some of my old animation program from GDI32 to GDI+, I&amp;rsquo;ve hit a roadblock where GDI+ cannot load PNG (and JPEG) file stored as resource:&amp;nbsp;&lt;br /&gt;&lt;br /&gt; // &lt;span style="font-family:courier new;"&gt;This code doesn&amp;#39;t work&lt;br /&gt;Gdiplus::Bitmap* m_image = Gdiplus::Bitmap::FromResource(hInst, L&amp;quot;IDB_IMAGE1&amp;quot;);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m thinking of an alternative using &lt;span style="font-family:courier new;"&gt;Bitmap::FromStream&lt;/span&gt; / &lt;span style="font-family:courier new;"&gt;FindResource&lt;/span&gt; / &lt;span style="font-family:courier new;"&gt;LoadResource&lt;/span&gt; combo, but I have one problem, I&amp;rsquo;m not familiar with &lt;span style="font-family:courier new;"&gt;Bitmap::FromStream&lt;/span&gt;. So I&amp;rsquo;ve checked CodeProject for some sample code on how to use &lt;span style="font-family:courier new;"&gt;Bitmap::FromStream&lt;/span&gt;, this I think will be a good start at what I want to do. &lt;/p&gt;
&lt;p&gt;While I was searching for sample code, I&amp;rsquo;ve bumped on an article posted by &lt;a href="http://www.codeproject.com/script/Articles/MemberArticles.aspx?amid=2300" class="null"&gt;Joe Woodbury&lt;/a&gt; entitled &lt;a href="http://www.codeproject.com/KB/GDI-plus/cgdiplusbitmap.aspx" class="null"&gt;Loading JPG &amp;amp; PNG resources using GDI+&lt;/a&gt; (glad I&amp;rsquo;ve searched &lt;a href="http://www.codeproject.com" class="null"&gt;CodeProject&lt;/a&gt; before going to MSDN). This article and the demo source code is exactly what I need, so I figure I will write a sample program using his &lt;span style="font-family:courier new;"&gt;CGdiPlusBitmapResource&lt;/span&gt; to test it.&lt;br /&gt;&lt;br /&gt;Just to make things quicker and smaller, I&amp;rsquo;ve used &lt;a href="http://users.bigpond.net.au/programming" class="null"&gt;David Nash&amp;#39;s Win++&lt;/a&gt; for this sample program:&lt;/p&gt;
&lt;p&gt;The class &lt;span style="font-family:courier new;"&gt;CGdiPlusBitmapResource&lt;/span&gt; doesn&amp;rsquo;t need any documentation., all you have to do is create an instance of this class., and call it&amp;rsquo;s Load function and you&amp;rsquo;re technically done:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;font face="courier new"&gt;
&lt;p&gt;CGdiPlusBitmapResource* m_image = new CGdiPlusBitmapResource();&lt;br /&gt;m_image-&amp;gt;Load(IDB_IMAGE, _T(&amp;quot;PNG&amp;quot;), hInst);&lt;/p&gt;
&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And draw it using Graphics object:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:courier new;"&gt;
&lt;p&gt;// Create graphics object from HDC&lt;br /&gt;Gdiplus::Graphics g(hDC);&lt;/p&gt;
&lt;p&gt;// Draw the PNG image using graohics object&lt;br /&gt;g.DrawImage(*m_image, 0, 0);&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;That&amp;rsquo;s about it. Then you can delete the &lt;span style="font-family:courier new;"&gt;m_image&lt;/span&gt; when you&amp;rsquo;re done using it.&lt;br /&gt;Check attached sample program for a working demo. It contains &lt;a href="http://users.bigpond.net.au/programming" class="null"&gt;Win++&lt;/a&gt; for writing C++ Win32 application, and &lt;span style="font-family:courier new;"&gt;CGdiPlusBitmap.h&lt;/span&gt; header file&amp;nbsp;for loading images from resources.&lt;br /&gt;&lt;br /&gt;If you want to know more about GDI+, here&amp;#39; a good article: &lt;a href="http://www.codeproject.com/KB/GDI-plus/startinggdiplus.aspx" class="null"&gt;Starting with GDI+&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=26542" width="1" height="1"&gt;</description><enclosure url="http://community.devpinoy.org/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.02.65.42/PNGFromResourceTest.zip" length="184985" type="application/x-zip-compressed" /><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/GDI_2B00_/default.aspx">GDI+</category></item><item><title>WTL links</title><link>http://community.devpinoy.org/blogs/cvega/archive/2008/07/24/wtl-links.aspx</link><pubDate>Fri, 25 Jul 2008 03:04:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:26492</guid><dc:creator>cvega</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=26492</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2008/07/24/wtl-links.aspx#comments</comments><description>&lt;p&gt;Definition taken from Wikipedia &lt;img src="http://devpinoy.org/emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://en.wikipedia.org/wiki/Windows_Template_Library" class="null"&gt;&lt;b&gt;Windows Template Library&lt;/b&gt; (&lt;b&gt;WTL&lt;/b&gt;)&lt;/a&gt; is a free software, object-oriented C++ template library for Win32 development. WTL was created by Microsoft employee Nenad Stefanovic for internal use and later released as an unsupported add-on to Visual Studio and the Win32 Framework SDK. It was developed primarily as a light-weight alternative to the Microsoft Foundation Classes and builds upon Microsoft&amp;#39;s ATL, another lightweight API widely used to create COM and ActiveX libraries.&lt;br /&gt;&lt;br /&gt;As the subject says, this post only contains useful links about this wonderful library:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/wtl/" class="null"&gt;Home of WTL in Sorceforge&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=1BE1EB52-AA96-4685-99A5-4256737781C5&amp;amp;displaylang=en" class="null"&gt;WTL download from Microsoft download center&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/wtl" class="null"&gt;WTL on CodeProject&lt;/a&gt;&amp;nbsp;- If you&amp;#39;re an MFC programmer, check the series WTL for MFC programmers.&lt;br /&gt;&lt;a href="http://www.gamedev.net/reference/programming/features/wtl1/" class="null"&gt;GameDev.NET - Using the Windows Template Library part 1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gamedev.net/reference/programming/features/wtl2/" class="null"&gt;GameDev.NET - Using the Windows Template Library part 2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://wtl.wikispaces.com/" class="null"&gt;WTL Wiki&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sellsbrothers.com/writing/WTLPart1.zip" class="null"&gt;Chris Sells&amp;#39;s WTL Makes UI Programming a Joy, Part 1: The Basics&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.sellsbrothers.com/writing/WTLPart2.zip" class="null"&gt;Chris Sells&amp;#39;s WTL Makes UI Programming a Joy Part 2: The Bells and Whistles&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.viksoe.dk/code/all_wtl.htm" class="null"&gt;vicsoe.dk WTL samples&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I&amp;#39;ve also attached the &lt;strong&gt;Clipcode&amp;#39;s WTL developer&amp;#39;s guide&lt;/strong&gt; ebook&amp;nbsp;(the original link seems to be down at the moment)&lt;br /&gt;&lt;br /&gt;Finally, don&amp;#39;t forget to join the &lt;a href="http://groups.yahoo.com/group/wtl/" class="null"&gt;WTL User Group&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=26492" width="1" height="1"&gt;</description><enclosure url="http://community.devpinoy.org/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.02.64.92/WTL_5F00_Developer_2700_s_5F00_Guide.pdf" length="1519772" type="application/pdf" /><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/WTL/default.aspx">WTL</category><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/C_2B002B00_/default.aspx">C++</category></item><item><title>I'm back :)</title><link>http://community.devpinoy.org/blogs/cvega/archive/2008/07/23/i-m-back.aspx</link><pubDate>Wed, 23 Jul 2008 06:02:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:26435</guid><dc:creator>cvega</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=26435</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2008/07/23/i-m-back.aspx#comments</comments><description>&lt;p&gt;Hi guys,&lt;br /&gt;&lt;br /&gt;I can&amp;#39;t believe&amp;nbsp;my eyes that It&amp;#39;s already been 2 years since my last post here. Wow, time flies really fast!&amp;nbsp;&lt;br /&gt;My hands up,&amp;nbsp;I&amp;#39;m not going to make any excuses for my long absence, the important thing is that I found my way back to DevPinoy &lt;img src="http://devpinoy.org/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/p&gt;
&lt;p&gt;Been busy working with different technologies for the past 2 years, also experienced some bad turns in career shifts etch.. &lt;br /&gt;I thought it might be a good refresher to write something about what I learned in my blog.., but I&amp;rsquo;m kind-of thinking what exactly to write.&lt;br /&gt;&lt;br /&gt;Any suggestions?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=26435" width="1" height="1"&gt;</description></item><item><title>Arrows available in Wingdings 3</title><link>http://community.devpinoy.org/blogs/cvega/archive/2006/09/22/Arrows-available-in-Wingdings-3.aspx</link><pubDate>Fri, 22 Sep 2006 04:50:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:5243</guid><dc:creator>cvega</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=5243</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2006/09/22/Arrows-available-in-Wingdings-3.aspx#comments</comments><description>&lt;P&gt;Let me show you another good use of applying the &lt;A href="http://community.devpinoy.org/blogs/cvega/archive/2006/09/21/.NET-Password-field-that-looks-like-Windows-XP-password-field.aspx"&gt;trick&lt;/A&gt; I've posted earlier, when I wrote the "how-to" for &lt;A href="http://community.devpinoy.org/blogs/cvega/archive/2006/09/21/.NET-Password-field-that-looks-like-Windows-XP-password-field.aspx"&gt;making .NET password field to look more like an XP password field&lt;/A&gt; – the trick is done by playing with Fonts.&lt;BR&gt;&lt;BR&gt;Now, let's play with fonts even more to have our UI some "&lt;STRONG&gt;arrows&lt;/STRONG&gt;" displayed on form without the need to use any arrow-image and/or arrow icons. See the screen-shot below for possible use:&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://community.devpinoy.org/photos/cvega/images/5236/original.aspx"&gt;&lt;BR&gt;&lt;BR&gt;The form above has button displaying&amp;nbsp;&lt;STRONG&gt;up&lt;/STRONG&gt; and &lt;STRONG&gt;down&lt;/STRONG&gt;&amp;nbsp;arrows, and&amp;nbsp;using the same trick,&amp;nbsp;the&amp;nbsp;arrow buttons doesn't used any images. It is setup&amp;nbsp;using&amp;nbsp;the characters &lt;STRONG&gt;small letter H&lt;/STRONG&gt; ('h') and &lt;STRONG&gt;small letter I&lt;/STRONG&gt; ('i') with it's font set to &lt;STRONG&gt;Wingdings 3&lt;/STRONG&gt;.&lt;BR&gt;&lt;BR&gt;Here's the steps in making up arrow button:&lt;BR&gt;&lt;BR&gt;1. Add a button&lt;BR&gt;2. Set the button's font to &lt;STRONG&gt;Wingdings 3&lt;/STRONG&gt;.&lt;BR&gt;3. Set the Text property to small letter H ('h').&lt;BR&gt;&lt;BR&gt;And here's the steps in making&amp;nbsp;the down&amp;nbsp;arrow button:&lt;BR&gt;&lt;BR&gt;1. Add a button&lt;BR&gt;2. Set the button's font to &lt;STRONG&gt;Wingdings 3&lt;/STRONG&gt;.&lt;BR&gt;3. Set the Text property to small letter I ('i').&lt;BR&gt;&lt;BR&gt;In case you might need&amp;nbsp;different arrows, other than up and down arrows, or you want different styles of arrows, here's a small list I've come up which are available arrows inside &lt;STRONG&gt;Wingdings 3&lt;/STRONG&gt;: &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://community.devpinoy.org/photos/cvega/images/5241/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Play around with the font even more, and you'll see that there are more arrows you can choose from.&lt;BR&gt;&lt;BR&gt;Have fun coding your&amp;nbsp;UI!&lt;BR&gt;&lt;BR&gt;Cheers,&lt;BR&gt;&lt;BR&gt;-chris&lt;BR&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=5243" width="1" height="1"&gt;</description><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/.NET/default.aspx">.NET</category></item><item><title>.NET Password field that looks like Windows XP password field</title><link>http://community.devpinoy.org/blogs/cvega/archive/2006/09/21/.NET-Password-field-that-looks-like-Windows-XP-password-field.aspx</link><pubDate>Fri, 22 Sep 2006 03:17:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:5233</guid><dc:creator>cvega</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=5233</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2006/09/21/.NET-Password-field-that-looks-like-Windows-XP-password-field.aspx#comments</comments><description>&lt;P&gt;Here's a trick to make your regular .NET TextBox to&amp;nbsp;have a look similar to Windows XP password field, where it displays large black circles instead of asterisks (****)&amp;nbsp;to "mask"&amp;nbsp;the password&amp;nbsp;(see the Password field&amp;nbsp;shown in the screenshot below):&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://community.devpinoy.org/photos/cvega/images/5231/original.aspx"&gt;&lt;BR&gt;&lt;BR&gt;This trick is fairly easy, and it doesn't require you&amp;nbsp;to perform any complicated&amp;nbsp;owner drawings. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;FONT color=#a52a2a&gt;Here's how:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;BR&gt;&lt;BR&gt;1. Add a TextBox to your Form &lt;BR&gt;2. Set the Font of that TextBox to &lt;STRONG&gt;Wingdings&lt;/STRONG&gt; (not Webdings)&lt;BR&gt;3. Set the PasswordChar property to &lt;STRONG&gt;small letter L&lt;/STRONG&gt; ('&lt;STRONG&gt;l&lt;/STRONG&gt;'). &lt;BR&gt;&lt;BR&gt;And you're all set, quick and easy.&lt;BR&gt;&lt;BR&gt;If you want your password field to have customized look and feel other than the one I described, you may want to experiment using&amp;nbsp;different characters other than&amp;nbsp;small letter&amp;nbsp;L, or use &lt;STRONG&gt;Symbols&lt;/STRONG&gt; Font, for more symbols.&lt;BR&gt;&lt;BR&gt;Happy coding&lt;BR&gt;&lt;BR&gt;-chris&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=5233" width="1" height="1"&gt;</description><category domain="http://community.devpinoy.org/blogs/cvega/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Clone a class by using MemberwiseClone method</title><link>http://community.devpinoy.org/blogs/cvega/archive/2006/08/22/Clone-a-class-by-using-MemberwiseClone-method.aspx</link><pubDate>Wed, 23 Aug 2006 03:35:00 GMT</pubDate><guid isPermaLink="false">99090821-4da1-4a75-98c2-a35884625ff7:4439</guid><dc:creator>cvega</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.devpinoy.org/blogs/cvega/rsscomments.aspx?PostID=4439</wfw:commentRss><comments>http://community.devpinoy.org/blogs/cvega/archive/2006/08/22/Clone-a-class-by-using-MemberwiseClone-method.aspx#comments</comments><description>&lt;P&gt;I am currently working on&amp;nbsp;a project that I accepted to "continue" because the original freelance programmer left the project without completing it. The project was started using VB.NET, and as the company requested, I am now converting it to C# before I go ahead to completing it. &lt;BR&gt;&lt;BR&gt;While I'm doing the conversion, I've seen many parts in the codes that are in need of attention. One that I spotted quickly is how the project implemented the Clone method for all cloneable classes (making a copy of the instance rather, as opposed to referencing an instance using the equal (=) assignment operator).&lt;BR&gt;&lt;BR&gt;Below is a shorter version how the implementation of a Profile class would look like, converted to C#:&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#000000&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;public class&lt;/FONT&gt; Profile : ICloneable&lt;BR&gt;{&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;private string&lt;/FONT&gt; m_firstname;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;public string&lt;/FONT&gt; FirstName&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; m_firstname; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt; { m_firstname = value; }&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;private string&lt;/FONT&gt; m_lastname;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;public string&lt;/FONT&gt; LastName&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; m_lastname; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt; { m_lastname = value; }&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;private int&lt;/FONT&gt; m_age;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;public int&lt;/FONT&gt; Age&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; m_age; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt; { m_age = value; }&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; ICloneable.Clone()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.Clone();&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; Profile Clone()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;Profile temp = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; Profile();&lt;BR&gt;&amp;nbsp;&amp;nbsp;temp.FirstName = &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.FirstName;&lt;BR&gt;&amp;nbsp;&amp;nbsp;temp.LastName = &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.LastName;&lt;BR&gt;&amp;nbsp;&amp;nbsp;temp.Age = &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.Age;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; temp;&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;The above class was purposely shortened, but as you may have imagined, the class has more properties than just &lt;EM&gt;FirstName&lt;/EM&gt;, &lt;EM&gt;LastName&lt;/EM&gt;, and &lt;EM&gt;Age&lt;/EM&gt;, hence the more properties the Profile class have, the larger the implementation of the Clone method. Not very manageable.&lt;BR&gt;&lt;BR&gt;The simpliest way&amp;nbsp;to shorten the Clone method is to call the &lt;FONT color=#000000&gt;object's&lt;/FONT&gt; &lt;STRONG&gt;MemberwiseClone&lt;/STRONG&gt; method, which is provided by .NET to make a shallow copy of an object's instance --&amp;nbsp;rather than one-by-one copying all the properties, as shown above. &lt;BR&gt;&lt;BR&gt;Here's how the updated version would look like:&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New" color=#000000&gt;&lt;FONT color=#0000ff&gt;public class&lt;/FONT&gt; Profile : ICloneable&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;private string&lt;/FONT&gt; m_firstname;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;public string&lt;/FONT&gt; FirstName&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; m_firstname; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt; { m_firstname = value; }&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;private string &lt;/FONT&gt;m_lastname;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;public string&lt;/FONT&gt; LastName&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; m_lastname; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt; { m_lastname = value; }&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;private int&lt;/FONT&gt; m_age;&lt;BR&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;public int&lt;/FONT&gt; Age&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt; { &lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; m_age; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;set&lt;/FONT&gt; { m_age = value; }&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; ICloneable.Clone()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.MemberwiseClone();&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#000000&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; Profile Clone()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt; (Profile)&lt;FONT color=#0000ff&gt;this&lt;/FONT&gt;.MemberwiseClone();&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;I am aware that &lt;STRONG&gt;MemberwiseClone&lt;/STRONG&gt; uses reflection to make a shallow copy, therefore it won't copy publicly exposed variables.&lt;BR&gt;&lt;BR&gt;Anyway, this will be another busy month for me -- work, work, work.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://community.devpinoy.org/aggbug.aspx?PostID=4439" width="1" height="1"&gt;</description></item></channel></rss>