Re: Using delegate for WindowProc - possible ?
On Thursday, 29 December 2011 at 20:08:45 UTC, bls wrote: import std.stdio; import std.functional; int main(string[] argv) { extern(Windows) int delegate( int i) dg; alias dg callback; callback = toDelegate(&test); writeln( callback( 1 ) ); readln(); return 0; } extern(Windows) int test(int i) { return 41 +i;} hth, bjoern Wow! This is actually pretty cool! I needed something similar, but it was to call a member function from the Windows procedure, and I had to use some thunking though assembly. Maybe I can adapt my code to use a delegate like this instead.
Re: Using delegate for WindowProc - possible ?
On 12/28/2011 03:45 PM, Tal wrote: Can I do something like this : __ extern (Windows) LRESULT delegate (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) MyWinProcDelegate; this() { MyWinProcDelegate =&Events; } extern (Windows) LRESULT Events (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { MessageBoxA(null , "Success!!!" , null ,0); return DefWindowProcA(hWnd, message, wParam, lParam); } __ The Events() doesn't seem to fire... am I missing something ? ok next try, this works for me. import std.stdio; import std.functional; int main(string[] argv) { extern(Windows) int delegate( int i) dg; alias dg callback; callback = toDelegate(&test); writeln( callback( 1 ) ); readln(); return 0; } extern(Windows) int test(int i) { return 41 +i;} hth, bjoern
Re: Using delegate for WindowProc - possible ?
On 12/28/2011 03:45 PM, Tal wrote: Can I do something like this : __ extern (Windows) LRESULT delegate (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) MyWinProcDelegate; this() { MyWinProcDelegate =&Events; } extern (Windows) LRESULT Events (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { MessageBoxA(null , "Success!!!" , null ,0); return DefWindowProcA(hWnd, message, wParam, lParam); } __ The Events() doesn't seem to fire... am I missing something ? ok next try : At least it compiles .. import std.functional; int main(string[] argv) { extern(Windows) int delegate() dg; alias dg callback; callback = toDelegate(&test); return 0; } extern(Windows) int test() { return 42;} hth, bjoern
Re: Using delegate for WindowProc - possible ?
On 12/28/2011 03:45 PM, Tal wrote: Can I do something like this : __ extern (Windows) LRESULT delegate (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) MyWinProcDelegate; this() { MyWinProcDelegate =&Events; } extern (Windows) LRESULT Events (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { MessageBoxA(null , "Success!!!" , null ,0); return DefWindowProcA(hWnd, message, wParam, lParam); } __ The Events() doesn't seem to fire... am I missing something ? Maybe std.functional toDelegate() ? auto DelegateToUse = toDelegate(&Events); Not sure how much sense this makes... If I recall correctly I have used alias extern windows LRESULT delegate() callback; callback = &cbfunc; As said I am not sure, hth Bjoern
Re: Using delegate for WindowProc - possible ?
On Wednesday, 28 December 2011 at 23:45:05 UTC, Tal wrote: Can I do something like this : __ extern (Windows) LRESULT delegate (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) MyWinProcDelegate; this() { MyWinProcDelegate = &Events; } extern (Windows) LRESULT Events (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { MessageBoxA(null , "Success!!!" , null ,0); return DefWindowProcA(hWnd, message, wParam, lParam); } __ The Events() doesn't seem to fire... am I missing something ? Nope. You are trying to assign the address of a function to a delegate, both are differents.
Using delegate for WindowProc - possible ?
Can I do something like this : __ extern (Windows) LRESULT delegate (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) MyWinProcDelegate; this() { MyWinProcDelegate = &Events; } extern (Windows) LRESULT Events (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { MessageBoxA(null , "Success!!!" , null ,0); return DefWindowProcA(hWnd, message, wParam, lParam); } __ The Events() doesn't seem to fire... am I missing something ?