Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I am having a problem with Excel 2003 running out of "memory
handles" on my Windows 7 x64 box after creating several hundred excel spreadsheets. I am explicitly releasing all of my Dispatch pointers. Do I need to explicitly release my variants after I store a bstr in them ? For instance, the following code converts a cell range string into a bstr and gets excel to return a Dispatch pointer for putting stuff into that range. VARIANT range; VariantInit ( & range); range.vt = VT_BSTR; _bstr_t address = _bstr_t (cellAddress.c_str ()); range.bstrVal = address; std::string errorMsg = "Select a range in the active spreadsheet, " + cellAddress + " (PutStringInServer)"; OLEMethod (DISPATCH_PROPERTYGET, & result1, pExcelSheet, L"Range", errorMsg, 1, range); if (result1.vt == VT_DISPATCH) { .... So, do I need to release the range variant variable ? Thanks, Lynn |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
On 11/30/2010 2:40 PM, Lynn McGuire wrote:
I am having a problem with Excel 2003 running out of "memory handles" on my Windows 7 x64 box after creating several hundred excel spreadsheets. I am explicitly releasing all of my Dispatch pointers. Do I need to explicitly release my variants after I store a bstr in them ? For instance, the following code converts a cell range string into a bstr and gets excel to return a Dispatch pointer for putting stuff into that range. VARIANT range; VariantInit ( & range); range.vt = VT_BSTR; _bstr_t address = _bstr_t (cellAddress.c_str ()); range.bstrVal = address; std::string errorMsg = "Select a range in the active spreadsheet, " + cellAddress + " (PutStringInServer)"; OLEMethod (DISPATCH_PROPERTYGET, & result1, pExcelSheet, L"Range", errorMsg, 1, range); if (result1.vt == VT_DISPATCH) { ... So, do I need to release the range variant variable ? Thanks, Lynn I've been looking at VariantClear http://msdn.microsoft.com/en-us/library/ms221165.aspx and it appears that VariantClear should always be called for any variant containing a dispatch pointer or a bstr pointer. Lynn |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
On 11/30/2010 5:42 PM, Lynn McGuire wrote:
On 11/30/2010 2:40 PM, Lynn McGuire wrote: I am having a problem with Excel 2003 running out of "memory handles" on my Windows 7 x64 box after creating several hundred excel spreadsheets. I am explicitly releasing all of my Dispatch pointers. Do I need to explicitly release my variants after I store a bstr in them ? For instance, the following code converts a cell range string into a bstr and gets excel to return a Dispatch pointer for putting stuff into that range. VARIANT range; VariantInit ( & range); range.vt = VT_BSTR; _bstr_t address = _bstr_t (cellAddress.c_str ()); range.bstrVal = address; std::string errorMsg = "Select a range in the active spreadsheet, " + cellAddress + " (PutStringInServer)"; OLEMethod (DISPATCH_PROPERTYGET, & result1, pExcelSheet, L"Range", errorMsg, 1, range); if (result1.vt == VT_DISPATCH) { ... So, do I need to release the range variant variable ? Thanks, Lynn I've been looking at VariantClear http://msdn.microsoft.com/en-us/library/ms221165.aspx and it appears that VariantClear should always be called for any variant containing a dispatch pointer or a bstr pointer. OK, I now know that you cannot VariantClear any variant that you have added to a SafeArray using SafeArrayPutElement. I thought that SafeArrayPutElement does a deep copy on the variant containing a BStr being added to SafeArray but I was wrong. That is a sure way to lose your string headed to Excel. Lynn |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
if I create a BSTR in C++, do I need to release it ? | Excel Programming | |||
BSTR to char* Help! | Excel Programming | |||
I don't like variants but... | Excel Programming | |||
pressing the "reset" button and freeing memory | Excel Programming | |||
Freeing memory problem | Excel Programming |