From djberg96 at gmail.com Tue Jun 12 19:05:20 2012 From: djberg96 at gmail.com (Daniel Berger) Date: Tue, 12 Jun 2012 13:05:20 -0600 Subject: [Win32utils-devel] Problem with Process.spawn + Process.kill Message-ID: Hi, This little bit of code is causing me trouble. Ruby 1.9.3-p194 on Windows 7, btw. # kill_test.rb cmd = "ruby -e 'sleep 5; at_exit{ puts \"cmd finished\" }" pid = Process.spawn(cmd) Process.kill('INT', pid) puts "Done" This results in popup dialogue that says, "The application was unable to start correctly. Click OK to close the application." Any ideas? Dan From phasis at gmail.com Wed Jun 13 01:04:35 2012 From: phasis at gmail.com (Heesob Park) Date: Wed, 13 Jun 2012 10:04:35 +0900 Subject: [Win32utils-devel] Problem with Process.spawn + Process.kill In-Reply-To: References: Message-ID: Hi, 2012/6/13 Daniel Berger > Hi, > > This little bit of code is causing me trouble. Ruby 1.9.3-p194 on > Windows 7, btw. > > # kill_test.rb > cmd = "ruby -e 'sleep 5; at_exit{ puts \"cmd finished\" }" > > pid = Process.spawn(cmd) > > Process.kill('INT', pid) > > puts "Done" > > This results in popup dialogue that says, "The application was unable > to start correctly. Click OK to close the application." > > Any ideas? > > Did you see the popup dialogue after Process.kill? I guess this issue is similer to http://bugs.ruby-lang.org/issues/6535 . If so, it is fixed on the trunk. Regards, Park Heesob -------------- next part -------------- An HTML attachment was scrubbed... URL: From djberg96 at gmail.com Wed Jun 13 13:24:20 2012 From: djberg96 at gmail.com (Daniel Berger) Date: Wed, 13 Jun 2012 07:24:20 -0600 Subject: [Win32utils-devel] Problem with Process.spawn + Process.kill In-Reply-To: References: Message-ID: On Tue, Jun 12, 2012 at 7:04 PM, Heesob Park wrote: > Hi, > > 2012/6/13 Daniel Berger >> >> Hi, >> >> This little bit of code is causing me trouble. Ruby 1.9.3-p194 on >> Windows 7, btw. >> >> # kill_test.rb >> cmd = "ruby -e 'sleep 5; at_exit{ puts \"cmd finished\" }" >> >> pid = Process.spawn(cmd) >> >> Process.kill('INT', pid) >> >> puts "Done" >> >> This results in popup dialogue that says, "The application was unable >> to start correctly. Click OK to close the application." >> >> Any ideas? >> > Did you see the popup dialogue after Process.kill? > I guess this issue is similer to?http://bugs.ruby-lang.org/issues/6535?. > If so, it is fixed on the trunk. Yes, that's it. Thanks! Dan From djberg96 at gmail.com Wed Jun 13 13:20:08 2012 From: djberg96 at gmail.com (Daniel Berger) Date: Wed, 13 Jun 2012 07:20:08 -0600 Subject: [Win32utils-devel] Process.kill and at_exit Message-ID: I could have sworn our custom Process.kill implementation for signals 1 and 4-8 (the one that uses CreateRemoteThread + ExitProcess) allowed processes to call exit handlers. But it doesn't seem to be the case. # kill.rb require 'win32/process' cmd = "ruby -e 'sleep 3; at_exit{ puts \"done\" }" pid = Process.spawn(cmd) Process.kill(1, pid) But it doesn't seem that the at_exit block fires. Why not? Regards, Dan From phasis at gmail.com Fri Jun 15 04:10:25 2012 From: phasis at gmail.com (Heesob Park) Date: Fri, 15 Jun 2012 13:10:25 +0900 Subject: [Win32utils-devel] Process.kill and at_exit In-Reply-To: References: Message-ID: Hi, 2012/6/13 Daniel Berger > I could have sworn our custom Process.kill implementation for signals > 1 and 4-8 (the one that uses CreateRemoteThread + ExitProcess) allowed > processes to call exit handlers. But it doesn't seem to be the case. > > # kill.rb > require 'win32/process' > > cmd = "ruby -e 'sleep 3; at_exit{ puts \"done\" }" > pid = Process.spawn(cmd) > > Process.kill(1, pid) > > But it doesn't seem that the at_exit block fires. Why not? > > > The at_exit block is called by ruby_finalize_0, ruby_finalize, ruby_cleanup, rb_f_exit, rb_f_abort or rb_exit function. Call ExitProcess with ruby process means skipping any of these functions. After modifying CreateRemoteThread function in the process.rb like following, you can see at_exit block fires. thread = CreateRemoteThread( handle, 0, 0, GetProcAddress(GetModuleHandle('msvcrt-ruby191'), 'rb_f_exit'), 0, 0, thread_id ) But you can also see the annoying error dialog. Regards, Park Heesob -------------- next part -------------- An HTML attachment was scrubbed... URL: From djberg96 at gmail.com Sat Jun 16 01:35:34 2012 From: djberg96 at gmail.com (Daniel Berger) Date: Fri, 15 Jun 2012 19:35:34 -0600 Subject: [Win32utils-devel] Process.kill and at_exit In-Reply-To: References: Message-ID: On Thu, Jun 14, 2012 at 10:10 PM, Heesob Park wrote: > Hi, > > 2012/6/13 Daniel Berger >> >> I could have sworn our custom Process.kill implementation for signals >> 1 and 4-8 (the one that uses CreateRemoteThread + ExitProcess) allowed >> processes to call exit handlers. But it doesn't seem to be the case. >> >> # kill.rb >> require 'win32/process' >> >> cmd = "ruby -e 'sleep 3; at_exit{ puts \"done\" }" >> pid = Process.spawn(cmd) >> >> Process.kill(1, pid) >> >> But it doesn't seem that the at_exit block fires. Why not? >> >> > > The at_exit block is called by?ruby_finalize_0, ruby_finalize, ruby_cleanup, > rb_f_exit, rb_f_abort or rb_exit function. > Call ExitProcess with ruby process means skipping any of these functions. > > After modifying?CreateRemoteThread?function in the process.rb like > following, you can see at_exit block fires. > > thread = CreateRemoteThread( > ? ? ? ? ? ? ? ? ? handle, > ? ? ? ? ? ? ? ? ? 0, > ? ? ? ? ? ? ? ? ? 0, > ? ? ? ? ? ? ? ? ? GetProcAddress(GetModuleHandle('msvcrt-ruby191'), > 'rb_f_exit'), > ? ? ? ? ? ? ? ? ? 0, > ? ? ? ? ? ? ? ? ? 0, > ? ? ? ? ? ? ? ? ? thread_id > ? ? ? ? ? ? ? ? ) > > But you can also see the annoying error dialog. Thanks for this! I'm rewriting Process.kill using FFI, and now I'm thinking I might want to alter the interface so that people can pass in more types of arguments. Regards, Dan From djberg96 at gmail.com Sun Jun 17 17:29:38 2012 From: djberg96 at gmail.com (Daniel Berger) Date: Sun, 17 Jun 2012 11:29:38 -0600 Subject: [Win32utils-devel] Process.kill and at_exit In-Reply-To: References: Message-ID: On Thu, Jun 14, 2012 at 10:10 PM, Heesob Park wrote: > Hi, > > 2012/6/13 Daniel Berger >> >> I could have sworn our custom Process.kill implementation for signals >> 1 and 4-8 (the one that uses CreateRemoteThread + ExitProcess) allowed >> processes to call exit handlers. But it doesn't seem to be the case. >> >> # kill.rb >> require 'win32/process' >> >> cmd = "ruby -e 'sleep 3; at_exit{ puts \"done\" }" >> pid = Process.spawn(cmd) >> >> Process.kill(1, pid) >> >> But it doesn't seem that the at_exit block fires. Why not? >> >> > > The at_exit block is called by?ruby_finalize_0, ruby_finalize, ruby_cleanup, > rb_f_exit, rb_f_abort or rb_exit function. > Call ExitProcess with ruby process means skipping any of these functions. > > After modifying?CreateRemoteThread?function in the process.rb like > following, you can see at_exit block fires. > > thread = CreateRemoteThread( > ? ? ? ? ? ? ? ? ? handle, > ? ? ? ? ? ? ? ? ? 0, > ? ? ? ? ? ? ? ? ? 0, > ? ? ? ? ? ? ? ? ? GetProcAddress(GetModuleHandle('msvcrt-ruby191'), > 'rb_f_exit'), > ? ? ? ? ? ? ? ? ? 0, > ? ? ? ? ? ? ? ? ? 0, > ? ? ? ? ? ? ? ? ? thread_id > ? ? ? ? ? ? ? ? ) > > But you can also see the annoying error dialog. I tried this with: ruby 1.9.3p194 (2012-04-20 revision 35410) [i386-mswin32_100] I did not have much luck, however. When I ran this using rb_f_exit, rb_exit or rb_f_abort I did not see the at_exit function call get executed, though the process was killed successfully. I got mixed results with ruby_cleanup, sometimes it worked, others it seemed to cause a segfault. With ruby_finalize I get a SystemStackError. It doesn't seem ruby_finalize_0 is actually exported. If you checkout the "ffi" branch for win32-process you can see that I've added some hash options, so you can now do this; Process.kill(1, pid, :exit_proc => "rb_f_exit", :dll_module => "msvcr100-ruby191", :wait_time => 25) There's also a shortcut for Ruby processes that just sets :exit_proc and :dll_module to default values: Process.kill(1, pid, :ruby_proc => true) Can you please take a look and see if this is working for you? Regards, Dan From phasis at gmail.com Mon Jun 18 01:55:56 2012 From: phasis at gmail.com (Heesob Park) Date: Mon, 18 Jun 2012 10:55:56 +0900 Subject: [Win32utils-devel] Process.kill and at_exit In-Reply-To: References: Message-ID: Hi, 2012/6/18 Daniel Berger > On Thu, Jun 14, 2012 at 10:10 PM, Heesob Park wrote: > > Hi, > > > > 2012/6/13 Daniel Berger > >> > >> I could have sworn our custom Process.kill implementation for signals > >> 1 and 4-8 (the one that uses CreateRemoteThread + ExitProcess) allowed > >> processes to call exit handlers. But it doesn't seem to be the case. > >> > >> # kill.rb > >> require 'win32/process' > >> > >> cmd = "ruby -e 'sleep 3; at_exit{ puts \"done\" }" > >> pid = Process.spawn(cmd) > >> > >> Process.kill(1, pid) > >> > >> But it doesn't seem that the at_exit block fires. Why not? > >> > >> > > > > The at_exit block is called by ruby_finalize_0, ruby_finalize, > ruby_cleanup, > > rb_f_exit, rb_f_abort or rb_exit function. > > Call ExitProcess with ruby process means skipping any of these functions. > > > > After modifying CreateRemoteThread function in the process.rb like > > following, you can see at_exit block fires. > > > > thread = CreateRemoteThread( > > handle, > > 0, > > 0, > > GetProcAddress(GetModuleHandle('msvcrt-ruby191'), > > 'rb_f_exit'), > > 0, > > 0, > > thread_id > > ) > > > > But you can also see the annoying error dialog. > > I tried this with: ruby 1.9.3p194 (2012-04-20 revision 35410) > [i386-mswin32_100] > > I did not have much luck, however. > > When I ran this using rb_f_exit, rb_exit or rb_f_abort I did not see > the at_exit function call get executed, though the process was killed > successfully. > > I got mixed results with ruby_cleanup, sometimes it worked, others it > seemed to cause a segfault. With ruby_finalize I get a > SystemStackError. It doesn't seem ruby_finalize_0 is actually > exported. > > If you checkout the "ffi" branch for win32-process you can see that > I've added some hash options, so you can now do this; > > Process.kill(1, pid, :exit_proc => "rb_f_exit", :dll_module => > "msvcr100-ruby191", :wait_time => 25) > > There's also a shortcut for Ruby processes that just sets :exit_proc > and :dll_module to default values: > > Process.kill(1, pid, :ruby_proc => true) > > Can you please take a look and see if this is working for you? > > If you comment out SetErrorMode process.rb like following, you can see the at_exit function call get executed. # SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX) Regards, Park Heesob -------------- next part -------------- An HTML attachment was scrubbed... URL: From phasis at gmail.com Mon Jun 18 02:51:13 2012 From: phasis at gmail.com (Heesob Park) Date: Mon, 18 Jun 2012 11:51:13 +0900 Subject: [Win32utils-devel] Process.kill and at_exit In-Reply-To: References: Message-ID: Hi, 2012/6/18 Heesob Park > Hi, > > 2012/6/18 Daniel Berger > >> On Thu, Jun 14, 2012 at 10:10 PM, Heesob Park wrote: >> > Hi, >> > >> > 2012/6/13 Daniel Berger >> >> >> >> I could have sworn our custom Process.kill implementation for signals >> >> 1 and 4-8 (the one that uses CreateRemoteThread + ExitProcess) allowed >> >> processes to call exit handlers. But it doesn't seem to be the case. >> >> >> >> # kill.rb >> >> require 'win32/process' >> >> >> >> cmd = "ruby -e 'sleep 3; at_exit{ puts \"done\" }" >> >> pid = Process.spawn(cmd) >> >> >> >> Process.kill(1, pid) >> >> >> >> But it doesn't seem that the at_exit block fires. Why not? >> >> >> >> >> > >> > The at_exit block is called by ruby_finalize_0, ruby_finalize, >> ruby_cleanup, >> > rb_f_exit, rb_f_abort or rb_exit function. >> > Call ExitProcess with ruby process means skipping any of these >> functions. >> > >> > After modifying CreateRemoteThread function in the process.rb like >> > following, you can see at_exit block fires. >> > >> > thread = CreateRemoteThread( >> > handle, >> > 0, >> > 0, >> > GetProcAddress(GetModuleHandle('msvcrt-ruby191'), >> > 'rb_f_exit'), >> > 0, >> > 0, >> > thread_id >> > ) >> > >> > But you can also see the annoying error dialog. >> >> I tried this with: ruby 1.9.3p194 (2012-04-20 revision 35410) >> [i386-mswin32_100] >> >> I did not have much luck, however. >> >> When I ran this using rb_f_exit, rb_exit or rb_f_abort I did not see >> the at_exit function call get executed, though the process was killed >> successfully. >> >> I got mixed results with ruby_cleanup, sometimes it worked, others it >> seemed to cause a segfault. With ruby_finalize I get a >> SystemStackError. It doesn't seem ruby_finalize_0 is actually >> exported. >> >> If you checkout the "ffi" branch for win32-process you can see that >> I've added some hash options, so you can now do this; >> >> Process.kill(1, pid, :exit_proc => "rb_f_exit", :dll_module => >> "msvcr100-ruby191", :wait_time => 25) >> >> There's also a shortcut for Ruby processes that just sets :exit_proc >> and :dll_module to default values: >> >> Process.kill(1, pid, :ruby_proc => true) >> >> Can you please take a look and see if this is working for you? >> >> > If you comment out SetErrorMode process.rb like following, you can see the > at_exit function call get executed. > > # SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX) > > > Sorry, I realized that the above statement is wrong. I guess it is not safe to call a ruby exit function in the different thread which is not created in the ruby process. Regards, Park Heesob -------------- next part -------------- An HTML attachment was scrubbed... URL: From djberg96 at gmail.com Mon Jun 18 02:53:48 2012 From: djberg96 at gmail.com (Daniel Berger) Date: Sun, 17 Jun 2012 20:53:48 -0600 Subject: [Win32utils-devel] Process.kill and at_exit In-Reply-To: References: Message-ID: On Sun, Jun 17, 2012 at 7:55 PM, Heesob Park wrote: > Hi, > > 2012/6/18 Daniel Berger >> >> On Thu, Jun 14, 2012 at 10:10 PM, Heesob Park wrote: >> > Hi, >> > >> > 2012/6/13 Daniel Berger >> >> >> >> I could have sworn our custom Process.kill implementation for signals >> >> 1 and 4-8 (the one that uses CreateRemoteThread + ExitProcess) allowed >> >> processes to call exit handlers. But it doesn't seem to be the case. >> >> >> >> # kill.rb >> >> require 'win32/process' >> >> >> >> cmd = "ruby -e 'sleep 3; at_exit{ puts \"done\" }" >> >> pid = Process.spawn(cmd) >> >> >> >> Process.kill(1, pid) >> >> >> >> But it doesn't seem that the at_exit block fires. Why not? >> >> >> >> >> > >> > The at_exit block is called by?ruby_finalize_0, ruby_finalize, >> > ruby_cleanup, >> > rb_f_exit, rb_f_abort or rb_exit function. >> > Call ExitProcess with ruby process means skipping any of these >> > functions. >> > >> > After modifying?CreateRemoteThread?function in the process.rb like >> > following, you can see at_exit block fires. >> > >> > thread = CreateRemoteThread( >> > ? ? ? ? ? ? ? ? ? handle, >> > ? ? ? ? ? ? ? ? ? 0, >> > ? ? ? ? ? ? ? ? ? 0, >> > ? ? ? ? ? ? ? ? ? GetProcAddress(GetModuleHandle('msvcrt-ruby191'), >> > 'rb_f_exit'), >> > ? ? ? ? ? ? ? ? ? 0, >> > ? ? ? ? ? ? ? ? ? 0, >> > ? ? ? ? ? ? ? ? ? thread_id >> > ? ? ? ? ? ? ? ? ) >> > >> > But you can also see the annoying error dialog. >> >> I tried this with: ?ruby 1.9.3p194 (2012-04-20 revision 35410) >> [i386-mswin32_100] >> >> I did not have much luck, however. >> >> When I ran this using rb_f_exit, rb_exit or rb_f_abort I did not see >> the at_exit function call get executed, though the process was killed >> successfully. >> >> I got mixed results with ruby_cleanup, sometimes it worked, others it >> seemed to cause a segfault. With ruby_finalize I get a >> SystemStackError. It doesn't seem ruby_finalize_0 is actually >> exported. >> >> If you checkout the "ffi" branch for win32-process you can see that >> I've added some hash options, so you can now do this; >> >> Process.kill(1, pid, :exit_proc => "rb_f_exit", :dll_module => >> "msvcr100-ruby191", :wait_time => 25) >> >> There's also a shortcut for Ruby processes that just sets :exit_proc >> and :dll_module to default values: >> >> Process.kill(1, pid, :ruby_proc => true) >> >> Can you please take a look and see if this is working for you? >> > > If you comment out SetErrorMode process.rb like following, you can see?the > at_exit function call get executed. > > # SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX) I still don't see it. I see the dialogue come up, but I don't see the at_exit function get executed. And is there any way to avoid this and avoid the annoying dialogue? Or would people have to setup their own SetConsoleCtrlHandler function? Regards, Dan From phasis at gmail.com Mon Jun 18 03:07:02 2012 From: phasis at gmail.com (Heesob Park) Date: Mon, 18 Jun 2012 12:07:02 +0900 Subject: [Win32utils-devel] Process.kill and at_exit In-Reply-To: References: Message-ID: Hi, 2012/6/18 Daniel Berger > On Sun, Jun 17, 2012 at 7:55 PM, Heesob Park wrote: > > Hi, > > > > 2012/6/18 Daniel Berger > >> > >> On Thu, Jun 14, 2012 at 10:10 PM, Heesob Park wrote: > >> > Hi, > >> > > >> > 2012/6/13 Daniel Berger > >> >> > >> >> I could have sworn our custom Process.kill implementation for signals > >> >> 1 and 4-8 (the one that uses CreateRemoteThread + ExitProcess) > allowed > >> >> processes to call exit handlers. But it doesn't seem to be the case. > >> >> > >> >> # kill.rb > >> >> require 'win32/process' > >> >> > >> >> cmd = "ruby -e 'sleep 3; at_exit{ puts \"done\" }" > >> >> pid = Process.spawn(cmd) > >> >> > >> >> Process.kill(1, pid) > >> >> > >> >> But it doesn't seem that the at_exit block fires. Why not? > >> >> > >> >> > >> > > >> > The at_exit block is called by ruby_finalize_0, ruby_finalize, > >> > ruby_cleanup, > >> > rb_f_exit, rb_f_abort or rb_exit function. > >> > Call ExitProcess with ruby process means skipping any of these > >> > functions. > >> > > >> > After modifying CreateRemoteThread function in the process.rb like > >> > following, you can see at_exit block fires. > >> > > >> > thread = CreateRemoteThread( > >> > handle, > >> > 0, > >> > 0, > >> > GetProcAddress(GetModuleHandle('msvcrt-ruby191'), > >> > 'rb_f_exit'), > >> > 0, > >> > 0, > >> > thread_id > >> > ) > >> > > >> > But you can also see the annoying error dialog. > >> > >> I tried this with: ruby 1.9.3p194 (2012-04-20 revision 35410) > >> [i386-mswin32_100] > >> > >> I did not have much luck, however. > >> > >> When I ran this using rb_f_exit, rb_exit or rb_f_abort I did not see > >> the at_exit function call get executed, though the process was killed > >> successfully. > >> > >> I got mixed results with ruby_cleanup, sometimes it worked, others it > >> seemed to cause a segfault. With ruby_finalize I get a > >> SystemStackError. It doesn't seem ruby_finalize_0 is actually > >> exported. > >> > >> If you checkout the "ffi" branch for win32-process you can see that > >> I've added some hash options, so you can now do this; > >> > >> Process.kill(1, pid, :exit_proc => "rb_f_exit", :dll_module => > >> "msvcr100-ruby191", :wait_time => 25) > >> > >> There's also a shortcut for Ruby processes that just sets :exit_proc > >> and :dll_module to default values: > >> > >> Process.kill(1, pid, :ruby_proc => true) > >> > >> Can you please take a look and see if this is working for you? > >> > > > > If you comment out SetErrorMode process.rb like following, you can > see the > > at_exit function call get executed. > > > > # SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX) > > I still don't see it. I see the dialogue come up, but I don't see the > at_exit function get executed. And is there any way to avoid this and > avoid the annoying dialogue? Or would people have to setup their own > SetConsoleCtrlHandler function? > > You missed my last message. Commenting out SetErrorMode is not the solution. And calling a ruby function with a thread which is not created in the ruby process is not safe and undesirable. I think using inter-process communication like signal or event handling is reliable. Regards, Park Heesob -------------- next part -------------- An HTML attachment was scrubbed... URL: From djberg96 at gmail.com Mon Jun 18 05:38:49 2012 From: djberg96 at gmail.com (Daniel Berger) Date: Sun, 17 Jun 2012 23:38:49 -0600 Subject: [Win32utils-devel] Process.kill and at_exit In-Reply-To: References: Message-ID: On Sun, Jun 17, 2012 at 9:07 PM, Heesob Park wrote: > Hi, > > 2012/6/18 Daniel Berger >> >> On Sun, Jun 17, 2012 at 7:55 PM, Heesob Park wrote: >> > Hi, >> > >> > 2012/6/18 Daniel Berger >> >> >> >> On Thu, Jun 14, 2012 at 10:10 PM, Heesob Park wrote: >> >> > Hi, >> >> > >> >> > 2012/6/13 Daniel Berger >> >> >> >> >> >> I could have sworn our custom Process.kill implementation for >> >> >> signals >> >> >> 1 and 4-8 (the one that uses CreateRemoteThread + ExitProcess) >> >> >> allowed >> >> >> processes to call exit handlers. But it doesn't seem to be the case. >> >> >> >> >> >> # kill.rb >> >> >> require 'win32/process' >> >> >> >> >> >> cmd = "ruby -e 'sleep 3; at_exit{ puts \"done\" }" >> >> >> pid = Process.spawn(cmd) >> >> >> >> >> >> Process.kill(1, pid) >> >> >> >> >> >> But it doesn't seem that the at_exit block fires. Why not? >> >> >> >> >> >> >> >> > >> >> > The at_exit block is called by?ruby_finalize_0, ruby_finalize, >> >> > ruby_cleanup, >> >> > rb_f_exit, rb_f_abort or rb_exit function. >> >> > Call ExitProcess with ruby process means skipping any of these >> >> > functions. >> >> > >> >> > After modifying?CreateRemoteThread?function in the process.rb like >> >> > following, you can see at_exit block fires. >> >> > >> >> > thread = CreateRemoteThread( >> >> > ? ? ? ? ? ? ? ? ? handle, >> >> > ? ? ? ? ? ? ? ? ? 0, >> >> > ? ? ? ? ? ? ? ? ? 0, >> >> > ? ? ? ? ? ? ? ? ? GetProcAddress(GetModuleHandle('msvcrt-ruby191'), >> >> > 'rb_f_exit'), >> >> > ? ? ? ? ? ? ? ? ? 0, >> >> > ? ? ? ? ? ? ? ? ? 0, >> >> > ? ? ? ? ? ? ? ? ? thread_id >> >> > ? ? ? ? ? ? ? ? ) >> >> > >> >> > But you can also see the annoying error dialog. >> >> >> >> I tried this with: ?ruby 1.9.3p194 (2012-04-20 revision 35410) >> >> [i386-mswin32_100] >> >> >> >> I did not have much luck, however. >> >> >> >> When I ran this using rb_f_exit, rb_exit or rb_f_abort I did not see >> >> the at_exit function call get executed, though the process was killed >> >> successfully. >> >> >> >> I got mixed results with ruby_cleanup, sometimes it worked, others it >> >> seemed to cause a segfault. With ruby_finalize I get a >> >> SystemStackError. It doesn't seem ruby_finalize_0 is actually >> >> exported. >> >> >> >> If you checkout the "ffi" branch for win32-process you can see that >> >> I've added some hash options, so you can now do this; >> >> >> >> Process.kill(1, pid, :exit_proc => "rb_f_exit", :dll_module => >> >> "msvcr100-ruby191", :wait_time => 25) >> >> >> >> There's also a shortcut for Ruby processes that just sets :exit_proc >> >> and :dll_module to default values: >> >> >> >> Process.kill(1, pid, :ruby_proc => true) >> >> >> >> Can you please take a look and see if this is working for you? >> >> >> > >> > If you comment out SetErrorMode process.rb like following, you can >> > see?the >> > at_exit function call get executed. >> > >> > # SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX) >> >> I still don't see it. I see the dialogue come up, but I don't see the >> at_exit function get executed. And is there any way to avoid this and >> avoid the annoying dialogue? Or would people have to setup their own >> SetConsoleCtrlHandler function? >> > You missed my last message. > Commenting out SetErrorMode is not the solution. > And calling a ruby function with a thread which is not created in the ruby > process is not safe and undesirable. > > I think using inter-process communication like signal or event handling is > reliable. Darn, I was afraid of that. I guess I'll remove the :ruby_proc option then. I'm pondering changes to core Ruby so that this -would- be a safer option. Regards, Dan From djberg96 at gmail.com Fri Jun 22 01:01:16 2012 From: djberg96 at gmail.com (Daniel Berger) Date: Thu, 21 Jun 2012 19:01:16 -0600 Subject: [Win32utils-devel] Trying to get RubyInline to work with VS Message-ID: Hi, I noticed that RubyInline did not work with Visual Studio (or mingw for that matter). I forked RubyInline and made some patches that look like they ought to work. Mostly it was just adjusting the build command string so that linker options came after the -link option, though I also changed the default extension to .dll and I make a Dir.chdir call before the build happens so that it doesn't build in the current directory. https://github.com/djberg96/rubyinline However, even after my patches I'm still having trouble. It builds, but it won't load. I tried it with this simple bit of inline code: # factorial.rb require "inline" class MyTest inline do |builder| builder.c " long factorial(int max) { int i=max, result=1; while (i >= 2) { result *= i--; } return result; }" end end t = MyTest.new() p t.factorial(5) I can see that it generated the .c code and built the .dll file in c:\Users\djberge\.ruby_inline\ruby-1.9.1 Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.c Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.dll However, it fails trying to load the file: c:/usr/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- C:/Users/djberge/.ruby_inline/ruby-1.9.1/Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.dll (LoadError) from c:/usr/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' from c:/usr/lib/ruby/gems/1.9.1/gems/RubyInline-3.11.2/lib/inline.rb:522:in `load' from c:/usr/lib/ruby/gems/1.9.1/gems/RubyInline-3.11.2/lib/inline.rb:859:in `inline' from factorial.rb:3:in `' from factorial.rb:2:in `
' What have I done wrong? Regards, Dan From phasis at gmail.com Fri Jun 22 02:27:01 2012 From: phasis at gmail.com (Heesob Park) Date: Fri, 22 Jun 2012 11:27:01 +0900 Subject: [Win32utils-devel] Trying to get RubyInline to work with VS In-Reply-To: References: Message-ID: Hi, 2012/6/22 Daniel Berger > Hi, > > I noticed that RubyInline did not work with Visual Studio (or mingw > for that matter). I forked RubyInline and made some patches that look > like they ought to work. Mostly it was just adjusting the build > command string so that linker options came after the -link option, > though I also changed the default extension to .dll and I make a > Dir.chdir call before the build happens so that it doesn't build in > the current directory. > > https://github.com/djberg96/rubyinline > > However, even after my patches I'm still having trouble. It builds, > but it won't load. I tried it with this simple bit of inline code: > > # factorial.rb > require "inline" > class MyTest > inline do |builder| > builder.c " > long factorial(int max) { > int i=max, result=1; > while (i >= 2) { result *= i--; } > return result; > }" > end > end > > t = MyTest.new() > p t.factorial(5) > > I can see that it generated the .c code and built the .dll file in > c:\Users\djberge\.ruby_inline\ruby-1.9.1 > > Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.c > Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.dll > > However, it fails trying to load the file: > > c:/usr/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in > `require': cannot load such file -- > > C:/Users/djberge/.ruby_inline/ruby-1.9.1/Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.dll > (LoadError) > from > c:/usr/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in > `require' > from > c:/usr/lib/ruby/gems/1.9.1/gems/RubyInline-3.11.2/lib/inline.rb:522:in > `load' > from > c:/usr/lib/ruby/gems/1.9.1/gems/RubyInline-3.11.2/lib/inline.rb:859:in > `inline' > from factorial.rb:3:in `' > from factorial.rb:2:in `
' > > What have I done wrong? > > Ruby wants not .dll but .so for the extension name. Here is a patch for your forked Rubyinline. diff --git a/inline.rb b/inline.rb.new index 3ac2f41..de45ee1 100644 --- a/inline.rb +++ b/inline.rb.new @@ -377,11 +377,7 @@ module Inline def so_name unless defined? @so_name then - if WINDOZE - @so_name = "#{Inline.directory}/#{module_name}.dll" - else @so_name = "#{Inline.directory}/#{module_name}.#{RbConfig::CONFIG["DLEXT"]}" - end end @so_name end @@ -571,7 +567,7 @@ VALUE #{method}_equals(VALUE value) { nil end - if WINDOZE + if WINDOZE && RUBY_PLATFORM =~ /mswin/ cmd = [ RbConfig::CONFIG['LDSHARED'], flags, RbConfig::CONFIG['CFLAGS'], @@ -657,7 +653,7 @@ VALUE #{method}_equals(VALUE value) { # gawd windoze land sucks case RUBY_PLATFORM when /mswin32/ then - " -link /LIBPATH:\"#{RbConfig::CONFIG['libdir']}\" /DEFAULTLIB:\"#{RbConfig::CONFIG['LIBRUBY']}\" /INCREMENTAL:no /EXPORT:Init_#{module_name}" + " -link /OUT:\"#{self.so_name}\" /LIBPATH:\"#{RbConfig::CONFIG['libdir']}\" /DEFAULTLIB:\"#{RbConfig::CONFIG['LIBRUBY']}\" /INCREMENTAL:no /EXPORT:Init_#{module_name}" when /mingw32/ then c = RbConfig::CONFIG " -Wl,--enable-auto-import -L#{c['libdir']} -l#{c['RUBY_SO_NAME']}" Regards, Park Heesob -------------- next part -------------- An HTML attachment was scrubbed... URL: From djberg96 at gmail.com Fri Jun 22 04:23:14 2012 From: djberg96 at gmail.com (Daniel Berger) Date: Thu, 21 Jun 2012 22:23:14 -0600 Subject: [Win32utils-devel] Trying to get RubyInline to work with VS In-Reply-To: References: Message-ID: On Thu, Jun 21, 2012 at 8:27 PM, Heesob Park wrote: > Hi, > > 2012/6/22 Daniel Berger >> >> Hi, >> >> I noticed that RubyInline did not work with Visual Studio (or mingw >> for that matter). I forked RubyInline and made some patches that look >> like they ought to work. Mostly it was just adjusting the build >> command string so that linker options came after the -link option, >> though I also changed the default extension to .dll and I make a >> Dir.chdir call before the build happens so that it doesn't build in >> the current directory. >> >> https://github.com/djberg96/rubyinline >> >> However, even after my patches I'm still having trouble. It builds, >> but it won't load. I tried it with this simple bit of inline code: >> >> # factorial.rb >> require "inline" >> class MyTest >> ?inline do |builder| >> ? ?builder.c " >> ? ? ?long factorial(int max) { >> ? ? ? ?int i=max, result=1; >> ? ? ? ?while (i >= 2) { result *= i--; } >> ? ? ? ?return result; >> ? ? ?}" >> ?end >> end >> >> t = MyTest.new() >> p t.factorial(5) >> >> I can see that it generated the .c code and built the .dll file in >> c:\Users\djberge\.ruby_inline\ruby-1.9.1 >> >> Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.c >> Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.dll >> >> However, it fails trying to load the file: >> >> c:/usr/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in >> `require': cannot load such file -- >> >> C:/Users/djberge/.ruby_inline/ruby-1.9.1/Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.dll >> (LoadError) >> ? ? ? ?from >> c:/usr/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in >> `require' >> ? ? ? ?from >> c:/usr/lib/ruby/gems/1.9.1/gems/RubyInline-3.11.2/lib/inline.rb:522:in >> `load' >> ? ? ? ?from >> c:/usr/lib/ruby/gems/1.9.1/gems/RubyInline-3.11.2/lib/inline.rb:859:in >> `inline' >> ? ? ? ?from factorial.rb:3:in `' >> ? ? ? ?from factorial.rb:2:in `
' >> >> What have I done wrong? >> > > Ruby wants not .dll but .so for the extension name. > > Here is a patch for your forked Rubyinline. > > diff --git a/inline.rb b/inline.rb.new > index 3ac2f41..de45ee1 100644 > --- a/inline.rb > +++ b/inline.rb.new > @@ -377,11 +377,7 @@ module Inline > > ? ? ?def so_name > ? ? ? ?unless defined? @so_name then > - ? ? ? ?if WINDOZE > - ? ? ? ? ?@so_name = "#{Inline.directory}/#{module_name}.dll" > - ? ? ? ?else > ? ? ? ? ? ?@so_name = > "#{Inline.directory}/#{module_name}.#{RbConfig::CONFIG["DLEXT"]}" > - ? ? ? ?end > ? ? ? ?end > ? ? ? ?@so_name > ? ? ?end > @@ -571,7 +567,7 @@ VALUE #{method}_equals(VALUE value) { > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?nil > ? ? ? ? ? ? ? ? ? ? ? ? ? ?end > > - ? ? ? ? ?if WINDOZE > + ? ? ? ? ?if WINDOZE && RUBY_PLATFORM =~ /mswin/ > ? ? ? ? ? ? ?cmd = [ RbConfig::CONFIG['LDSHARED'], > ? ? ? ? ? ? ? ? ? ? ?flags, > ? ? ? ? ? ? ? ? ? ? ?RbConfig::CONFIG['CFLAGS'], > @@ -657,7 +653,7 @@ VALUE #{method}_equals(VALUE value) { > ? ? ? ?# gawd windoze land sucks > ? ? ? ?case RUBY_PLATFORM > ? ? ? ?when /mswin32/ then > - ? ? ? ?" -link /LIBPATH:\"#{RbConfig::CONFIG['libdir']}\" > /DEFAULTLIB:\"#{RbConfig::CONFIG['LIBRUBY']}\" /INCREMENTAL:no > /EXPORT:Init_#{module_name}" > + ? ? ? ?" -link /OUT:\"#{self.so_name}\" > /LIBPATH:\"#{RbConfig::CONFIG['libdir']}\" > /DEFAULTLIB:\"#{RbConfig::CONFIG['LIBRUBY']}\" /INCREMENTAL:no > /EXPORT:Init_#{module_name}" > ? ? ? ?when /mingw32/ then > ? ? ? ? ?c = RbConfig::CONFIG > ? ? ? ? ?" -Wl,--enable-auto-import -L#{c['libdir']} > -l#{c['RUBY_SO_NAME']}" > > > Regards, > Park Heesob Thanks! The docs Ruby will try to load a .dll but it doesn't seem to actually be the case. Anyway, I have all the tests passing with VS but mingw has 6 failures, though there are many more in the core version, so it's an improvement! Regards, Dan From djberg96 at gmail.com Fri Jun 22 04:42:32 2012 From: djberg96 at gmail.com (Daniel Berger) Date: Thu, 21 Jun 2012 22:42:32 -0600 Subject: [Win32utils-devel] Trying to get RubyInline to work with VS In-Reply-To: References: Message-ID: Hi, > Anyway, I have all the tests passing with VS but mingw has 6 failures, > though there are many more in the core version, so it's an > improvement! It now passes with mingw, though it requires Devkit in your PATH. I'm not sure how to detect the Devkit location from within a Ruby program, however. Anyway, good enough for now. Thanks again, Dan From djberg96 at gmail.com Sat Jun 23 00:24:33 2012 From: djberg96 at gmail.com (Daniel Berger) Date: Fri, 22 Jun 2012 18:24:33 -0600 Subject: [Win32utils-devel] Trying to get RubyInline to work with VS In-Reply-To: References: Message-ID: On Thu, Jun 21, 2012 at 8:27 PM, Heesob Park wrote: > Hi, > > 2012/6/22 Daniel Berger >> >> Hi, >> >> I noticed that RubyInline did not work with Visual Studio (or mingw >> for that matter). I forked RubyInline and made some patches that look >> like they ought to work. Mostly it was just adjusting the build >> command string so that linker options came after the -link option, >> though I also changed the default extension to .dll and I make a >> Dir.chdir call before the build happens so that it doesn't build in >> the current directory. >> >> https://github.com/djberg96/rubyinline >> >> However, even after my patches I'm still having trouble. It builds, >> but it won't load. I tried it with this simple bit of inline code: >> >> # factorial.rb >> require "inline" >> class MyTest >> ?inline do |builder| >> ? ?builder.c " >> ? ? ?long factorial(int max) { >> ? ? ? ?int i=max, result=1; >> ? ? ? ?while (i >= 2) { result *= i--; } >> ? ? ? ?return result; >> ? ? ?}" >> ?end >> end >> >> t = MyTest.new() >> p t.factorial(5) >> >> I can see that it generated the .c code and built the .dll file in >> c:\Users\djberge\.ruby_inline\ruby-1.9.1 >> >> Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.c >> Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.dll >> >> However, it fails trying to load the file: >> >> c:/usr/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in >> `require': cannot load such file -- >> >> C:/Users/djberge/.ruby_inline/ruby-1.9.1/Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.dll >> (LoadError) >> ? ? ? ?from >> c:/usr/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in >> `require' >> ? ? ? ?from >> c:/usr/lib/ruby/gems/1.9.1/gems/RubyInline-3.11.2/lib/inline.rb:522:in >> `load' >> ? ? ? ?from >> c:/usr/lib/ruby/gems/1.9.1/gems/RubyInline-3.11.2/lib/inline.rb:859:in >> `inline' >> ? ? ? ?from factorial.rb:3:in `' >> ? ? ? ?from factorial.rb:2:in `
' >> >> What have I done wrong? >> > > Ruby wants not .dll but .so for the extension name. > > Here is a patch for your forked Rubyinline. > > diff --git a/inline.rb b/inline.rb.new > index 3ac2f41..de45ee1 100644 > --- a/inline.rb > +++ b/inline.rb.new > @@ -377,11 +377,7 @@ module Inline > > ? ? ?def so_name > ? ? ? ?unless defined? @so_name then > - ? ? ? ?if WINDOZE > - ? ? ? ? ?@so_name = "#{Inline.directory}/#{module_name}.dll" > - ? ? ? ?else > ? ? ? ? ? ?@so_name = > "#{Inline.directory}/#{module_name}.#{RbConfig::CONFIG["DLEXT"]}" > - ? ? ? ?end > ? ? ? ?end > ? ? ? ?@so_name > ? ? ?end > @@ -571,7 +567,7 @@ VALUE #{method}_equals(VALUE value) { > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?nil > ? ? ? ? ? ? ? ? ? ? ? ? ? ?end > > - ? ? ? ? ?if WINDOZE > + ? ? ? ? ?if WINDOZE && RUBY_PLATFORM =~ /mswin/ > ? ? ? ? ? ? ?cmd = [ RbConfig::CONFIG['LDSHARED'], > ? ? ? ? ? ? ? ? ? ? ?flags, > ? ? ? ? ? ? ? ? ? ? ?RbConfig::CONFIG['CFLAGS'], > @@ -657,7 +653,7 @@ VALUE #{method}_equals(VALUE value) { > ? ? ? ?# gawd windoze land sucks > ? ? ? ?case RUBY_PLATFORM > ? ? ? ?when /mswin32/ then > - ? ? ? ?" -link /LIBPATH:\"#{RbConfig::CONFIG['libdir']}\" > /DEFAULTLIB:\"#{RbConfig::CONFIG['LIBRUBY']}\" /INCREMENTAL:no > /EXPORT:Init_#{module_name}" > + ? ? ? ?" -link /OUT:\"#{self.so_name}\" > /LIBPATH:\"#{RbConfig::CONFIG['libdir']}\" > /DEFAULTLIB:\"#{RbConfig::CONFIG['LIBRUBY']}\" /INCREMENTAL:no > /EXPORT:Init_#{module_name}" > ? ? ? ?when /mingw32/ then > ? ? ? ? ?c = RbConfig::CONFIG > ? ? ? ? ?" -Wl,--enable-auto-import -L#{c['libdir']} > -l#{c['RUBY_SO_NAME']}" I don't suppose there's an easy way to have all of the compilation happen in a different directory is there? I see options for individual output files, but not one to say "build everything in directory X". Am I missing it? I only ask because Ryan doesn't like having to add a Dir.chdir call. Regards, Dan From phasis at gmail.com Sat Jun 23 03:59:19 2012 From: phasis at gmail.com (Heesob Park) Date: Sat, 23 Jun 2012 12:59:19 +0900 Subject: [Win32utils-devel] Trying to get RubyInline to work with VS In-Reply-To: References: Message-ID: Hi, 2012/6/23 Daniel Berger > On Thu, Jun 21, 2012 at 8:27 PM, Heesob Park wrote: > > Hi, > > > > 2012/6/22 Daniel Berger > >> > >> Hi, > >> > >> I noticed that RubyInline did not work with Visual Studio (or mingw > >> for that matter). I forked RubyInline and made some patches that look > >> like they ought to work. Mostly it was just adjusting the build > >> command string so that linker options came after the -link option, > >> though I also changed the default extension to .dll and I make a > >> Dir.chdir call before the build happens so that it doesn't build in > >> the current directory. > >> > >> https://github.com/djberg96/rubyinline > >> > >> However, even after my patches I'm still having trouble. It builds, > >> but it won't load. I tried it with this simple bit of inline code: > >> > >> # factorial.rb > >> require "inline" > >> class MyTest > >> inline do |builder| > >> builder.c " > >> long factorial(int max) { > >> int i=max, result=1; > >> while (i >= 2) { result *= i--; } > >> return result; > >> }" > >> end > >> end > >> > >> t = MyTest.new() > >> p t.factorial(5) > >> > >> I can see that it generated the .c code and built the .dll file in > >> c:\Users\djberge\.ruby_inline\ruby-1.9.1 > >> > >> Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.c > >> Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.dll > >> > >> However, it fails trying to load the file: > >> > >> c:/usr/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in > >> `require': cannot load such file -- > >> > >> > C:/Users/djberge/.ruby_inline/ruby-1.9.1/Inline_MyTest_cb89593d1f9fe3ecdb2178215eee80ae.dll > >> (LoadError) > >> from > >> c:/usr/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in > >> `require' > >> from > >> c:/usr/lib/ruby/gems/1.9.1/gems/RubyInline-3.11.2/lib/inline.rb:522:in > >> `load' > >> from > >> c:/usr/lib/ruby/gems/1.9.1/gems/RubyInline-3.11.2/lib/inline.rb:859:in > >> `inline' > >> from factorial.rb:3:in `' > >> from factorial.rb:2:in `
' > >> > >> What have I done wrong? > >> > > > > Ruby wants not .dll but .so for the extension name. > > > > Here is a patch for your forked Rubyinline. > > > > diff --git a/inline.rb b/inline.rb.new > > index 3ac2f41..de45ee1 100644 > > --- a/inline.rb > > +++ b/inline.rb.new > > @@ -377,11 +377,7 @@ module Inline > > > > def so_name > > unless defined? @so_name then > > - if WINDOZE > > - @so_name = "#{Inline.directory}/#{module_name}.dll" > > - else > > @so_name = > > "#{Inline.directory}/#{module_name}.#{RbConfig::CONFIG["DLEXT"]}" > > - end > > end > > @so_name > > end > > @@ -571,7 +567,7 @@ VALUE #{method}_equals(VALUE value) { > > nil > > end > > > > - if WINDOZE > > + if WINDOZE && RUBY_PLATFORM =~ /mswin/ > > cmd = [ RbConfig::CONFIG['LDSHARED'], > > flags, > > RbConfig::CONFIG['CFLAGS'], > > @@ -657,7 +653,7 @@ VALUE #{method}_equals(VALUE value) { > > # gawd windoze land sucks > > case RUBY_PLATFORM > > when /mswin32/ then > > - " -link /LIBPATH:\"#{RbConfig::CONFIG['libdir']}\" > > /DEFAULTLIB:\"#{RbConfig::CONFIG['LIBRUBY']}\" /INCREMENTAL:no > > /EXPORT:Init_#{module_name}" > > + " -link /OUT:\"#{self.so_name}\" > > /LIBPATH:\"#{RbConfig::CONFIG['libdir']}\" > > /DEFAULTLIB:\"#{RbConfig::CONFIG['LIBRUBY']}\" /INCREMENTAL:no > > /EXPORT:Init_#{module_name}" > > when /mingw32/ then > > c = RbConfig::CONFIG > > " -Wl,--enable-auto-import -L#{c['libdir']} > > -l#{c['RUBY_SO_NAME']}" > > I don't suppose there's an easy way to have all of the compilation > happen in a different directory is there? I see options for individual > output files, but not one to say "build everything in directory X". Am > I missing it? > > As far as I know, there is no shortcut to set whole building directory once. I think the following is the second best way. " /Fe\"#{Inline.directory}/\" /Fd\"#{Inline.directory}/\" /Fo\"#{Inline.directory}/\" -link /OUT:\"#{self.so_name}\" /LIBPATH:\"#{RbConfig::CONFIG['libdir']}\" /DEFAULTLIB:\"#{RbConfig::CONFIG['LIBRUBY']}\" /INCREMENTAL:no /EXPORT:Init_#{module_name}" Regards, Park Heesob -------------- next part -------------- An HTML attachment was scrubbed... URL: