On Monday, 1 October 2018 at 21:03:24 UTC, Boris-Barboris wrote:
On Monday, 1 October 2018 at 20:27:43 UTC, spikespaz wrote:
I was hoping I could use something more akin to JavaScript's syntax: (void* hWnd, long) => {}.

I tried this but I'm getting errors with the signature, it says the function is a delegate and apparently Windows API can't accept a delegate.

You can make it a non-delegate by passing a pointer to hWndList in lParams as it was supposed to by WinApi devs, instead of zero, and not implicitly capturing stack pointer by referencing hWndList directly from the body.

https://run.dlang.io/is/t4k4Nc

I don't know how to do this. I'm not the best with pointers, I'm still learning D and I'm unfamiliar with functional programming.

==============================================

import core.sys.windows.windows: EnumWindows;
import std.stdio: writeln;

extern (Windows) int callback(void* hWnd, long hWndList) nothrow {
    hWndList ~= hWnd;

    return true;
}

void main() {
    void*[] hWndList;

    EnumWindows(&callback, &hWndList);

    writeln(hWndList);
}

==============================================

Clearly I can't use &hWndList to pass the reference, how would I access the variable by the memory address inside the callback?

Reply via email to