From: "Moran, Craig M (BAH)" Date: 2004-02-11T00:28:15+09:00 Subject: Using ole_free for Excel on W2K (Ruby 1.8.0-10) This is my first post. My apologies if I do something wrong. I am using Ruby 1.8.0-10 with the Fox GUI on a Windows 2000 box to script Excel. I am having a problem using the ole_free win32ole command. ole_free is designed to release the resources that Excel was using when it is called. It works fine when called from the original procedure. However, if a separate procedure is called from the original, ole_free does not behave as intended. I am including code for 3 separate files (TestGUI.rbw, TestGUI.rb, and TestAPP.rb). Put these files in the same directory and run TestGUI.rbw. Click the 'Test' button to execute the program. You will see that Excel is launched twice in two different manners then closed using ole_free; once from the original procedure and once from a nested procedure. If you check your Task List before exiting the program, you will see that the instance of Excel that was launched from the nested procedure still exists in the Task List even though ole_free was called. Is there a way to make this work properly? Here are the files: Save this as TestGUI.rbw: #/usr/bin/env ruby # Title: TestGUI.rbw require 'win32ole' require 'TestAPP.rb' require 'TestGUI.rb' def run application = FXApp.new("Test GUI") application.init(ARGV) ButtonWindow.new(application) application.create application.run end run # end TestGUI.rbw Save this as TestGUI.rb: #/usr/bin/env ruby # Title: TestGUI.rb require 'fox' include Fox class ButtonWindow < FXMainWindow def initialize(app) super(app, "Test", nil, nil, DECOR_ALL, 100, 100, 0, 0) menubar = FXMenubar.new(self, LAYOUT_FILL_X) filemenu = FXMenuPane.new(self) FXMenuCommand.new(filemenu, "&Quit\tCtl-Q", nil, getApp(), FXApp::ID_QUIT) FXMenuTitle.new(menubar, "&File", nil, filemenu) FXHorizontalSeparator.new(self, LAYOUT_SIDE_TOP|SEPARATOR_GROOVE|LAYOUT_FILL_X) matrix = FXMatrix.new(self, 3, MATRIX_BY_COLUMNS|LAYOUT_SIDE_TOP|LAYOUT_FILL_X|LAYOUT_FILL_Y) statusbar = FXStatusbar.new(self, LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER) FXVerticalSeparator.new(self, LAYOUT_SIDE_RIGHT|LAYOUT_FILL_Y|SEPARATOR_GROOVE) group1 = FXGroupBox.new(matrix, "Test", GROUPBOX_TITLE_CENTER|FRAME_RIDGE|LAYOUT_FILL_COLUMN|LAYOUT_FILL_ROW|LAYOUT_ CENTER_X|LAYOUT_CENTER_Y) testButton = FXButton.new(group1, "&Test", nil, nil, 0, FRAME_RAISED|FRAME_THICK|LAYOUT_FILL_X) testButton.connect(SEL_COMMAND, method(:onCmdTest)) end def create super show(PLACEMENT_SCREEN) end end # end TestGUI.rb Save this as TestAPP.rb: #/usr/bin/env ruby # Title: TestAPP.rb require 'win32ole' def onCmdTest(sender, sel, ptr) excel = WIN32OLE.new("excel.application") excel['Visible'] = TRUE excel.Quit excel.ole_free TestExcel() end def TestExcel() excel = WIN32OLE.new("excel.application") excel['Visible'] = TRUE excel.Application.Quit excel.ole_free end # end TestAPP.rb