Re: Using delegate for WindowProc - possible ?

2011-12-29 Thread Juan Campanas

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 ?

2011-12-29 Thread bls

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 ?

2011-12-29 Thread bls

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 ?

2011-12-29 Thread bls

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 ?

2011-12-28 Thread Juan Campanas

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 ?

2011-12-28 Thread Tal
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 ?