From: Luis Lavena Date: 2012-09-19T05:52:50+09:00 Subject: Re: LoadLibrary & GetProcAddress Problem Huxley Stone wrote in post #1076392: > Hello one and all, > > I'm new to Ruby and i have been trying to get this piece of code to call > MessageBox but can't. I know I am missing something but I don't know > what it is. Any help with this would be greatly appreciated! > > Here is the code so far: > > ============================================================================= > require 'Win32API' > > LoadLibrary = Win32API.new('kernel32','LoadLibrary','P','L') > GetProcAddress = Win32API.new('kernel32','GetProcAddress','LP','L') > > Load = LoadLibrary.call('user32.dll') > Proc = GetProcAddress.call(Load,'MessageBox') > > Proc.call(0,"Hello World!","MessageBox in Ruby",0) > > I know everything is ok except my "Proc.call". What am I missing? Why you don't directly define MessageBox usign Win32API instead of using LoadLibrary and GetProcAddress? AFAIK that approach will not work as "Proc" will be a simple void* (pointer) to the function address and knows nothing about the function signature (besides you're overriding Ruby's own Proc with that) If you want to use LoadLibrary, GetProcAddress, perhaps you want to write your program in C, which let you play with function signatures. If you don't want to the troubles, use Win32API *directly* to load the functions you need. After all DL is already doing a lot of legwork for you. -- Luis Lavena -- Posted via http://www.ruby-forum.com/.