A Simple DLL Wrapper

torhu fake at address.dude
Fri Feb 23 07:36:26 PST 2007

oldrev wrote:
> void main()
> {
>     auto dll = new Module!("User32.dll", 
>             Symbol!("MessageBoxW", int, HWND, LPCWSTR, LPCWSTR, UINT), 
>             Symbol!("MessageBoxA", int, HWND, LPCSTR, LPCSTR, UINT) 
>             ); 
>     dll.MessageBoxW(null, "Hello! DLL! W", "Title W", MB_OK);
>     dll.MessageBoxA(null, "Hello! DLL! A", "Title A", MB_OK);
> }

Pretty cool.  Reminds me abit of the python module called ctypes. 
Here's the equivalent of your main() using that:

from ctypes import windll
MB_OK = 0
windll.user32.MessageBoxA(None, "Hello! DLL! ", "Hello from 
MessageBoxA", MB_OK)
windll.user32.MessageBoxW(None, u"Hello! DLL! ", u"Hello from 
MessageBoxW", MB_OK)

windll is an object that loads a dll file, and expects functions to use 
the stdcall conventions.  cdll excpects regular C calling conventions.

Arguments are converted correctly according to their types, only works 
for ansi and utf8 string, and ints for now.  You have to specify other 
types explicitly.  Functions are assumed to return int unless otherwise 

You can do pointless stuff like this too:
cdll.msvcrt.strlen("123") # returns 3

http://python.net/crew/theller/ctypes/tutorial.html  (use google cache 
if down)

More information about the Digitalmars-d-learn mailing list