Using ole_free for Excel on W2K (Ruby 1.8.0-10)

  • Thread starter Moran, Craig M (BAH)
  • Start date
M

Moran, Craig M (BAH)

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
 
O

Osuka Adartse

Moran said:
This is my first post. My apologies if I do something wrong. I am using shk!!
#/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
why the diff here? if excel.quit then it doesn't lets excel wasting mem
'til closing the gui
excel.ole_free
end
# end TestAPP.rb

I just test it, if excel.Application.quit --> excel.quit then your
problem doesn't appear, but I don't really know what's the difference
between those methods
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,982
Messages
2,570,186
Members
46,743
Latest member
WoodrowMea

Latest Threads

Top