From: Luis Lavena Date: 2010-07-04T00:50:03+09:00 Subject: Re: Ruby/DL problem On Jul 3, 12:20 pm, Aston wrote: > ----- Original Message ---- > > From: Aston > > To: Ruby Talk ; Ruby Core > > Sent: Fri, 2 July, 2010 9:07:00 PM > > Subject: [ruby-core:30996] Ruby/DL problem > > > Hello, > > > I have very little experience with dl. But I want to use it to > > call SetEnvironmentVariable() from Win32. I could use FFI but cannot, since   > >this > > > script will be supplied to a customer where it is difficult to  install. > > > SetEnvironmentVariable on > > MSDNhttp://msdn.microsoft.com/en-us/library/ms686206(v=VS.85).aspx > > > reading  sparse, old, and cryptic documentation I came up with this snippet, > > which  of course does not work > > > require 'dl/import' > > > module Win32 > > extend  DL::Importer > > extern "int SetEnvironmentVariableA( char* lpName, char*  lpValue)" > > extern "int GetEnvironmentVariableA( char* lpName, char* lpValue,  int size)" > > end > > > buff = Array.new( 256,  0).pack("c*") > > Win32.GetEnvironmentVariableA( "ENV_VAR", buff, 255) > > puts  buff.unpack("a*") > > > this is the error i  get > > D:/ruby/usr/lib/ruby/1.9.1/dl/importrb:194:in `import_function':  undefined > > method `sym' for nil:NilClass (NoMethodError) > >          from D:/ruby/usr/lib/ruby/1.9.1/dl/import.rb:118:in  `extern' > >         from test.rb:5:in  `' > >         from test.rb:3:in  `
' > > > machine is WinXP > > ruby 1.9.1 (2008-10-28 revision 19983)  [i386-mswin32_80] > > > can anybody suggest a better signature  ? > > > Aston > > hmm, nobody here using Ruby.DL ? Is not DL the problem, but the version you're using. revision 19983 is *way* older than latest released one: Pathlevel 378 was revision 26273 Lurking in the NEWS and ChangeLog pointed several changes in DL. Trying your example with latest RubyInstaller 1.9.1 release: C:\Users\Luis\Desktop>ruby -v t.rb ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-mingw32] C:/Users/Luis/Tools/Ruby/ruby-1.9.1-p378-i386-mingw32/lib/ruby/1.9.1/ dl/import.rb:116: warning: instance variable @type_alias not initialized C:/Users/Luis/Tools/Ruby/ruby-1.9.1-p378-i386-mingw32/lib/ruby/1.9.1/ dl/import.rb:194: warning: instance variable @handler not initialized C:/Users/Luis/Tools/Ruby/ruby-1.9.1-p378-i386-mingw32/lib/ruby/1.9.1/ dl/import.rb:194:in `import_function': undefined method `sym' for nil:NilClass (NoMethodError) from C:/Users/Luis/Tools/Ruby/ruby-1.9.1-p378-i386-mingw32/lib/ ruby/1.9.1/dl/import.rb:118:in `extern' from t.rb:5:in `' from t.rb:3:in `
' Which brings the question, why bother on doing this way when Ruby does it out of the box? -- Luis Lavena