XLL+ Class Library (7.0)


Retrieve a binary name from a worksheet

static BOOL GetBinaryName(
   const TCHAR* pszName,
   CXlBinaryNameData& data
static BOOL GetBinaryName(
   const TCHAR* pszWorkbook,
   const TCHAR* pszWorksheet,
   const TCHAR* pszName,
   CXlBinaryNameData& data



The name of the invisible range in the worksheet. The name must conform to Excel range name rules.


A reference to a data holder which will be set to point to the binary data associated with the name, if the function is successful.


Name of target workbook.


Name of target sheet.


Return Value

The function returns TRUE if the name is found and the data is successfully retrieved, or FALSE if the name does not exist or contains no data.


The data is retrieved into a CXlBinaryNameData object in order to be sure that it is locked and unlocked properly. Excel stores BinaryName data in Windows global moveable memory blocks, and the CXlBinaryNameData object ensures that the GlobalFree() method is called when the data holder goes out of scope.

You should use the CXlBinaryNameData accessor methods to access the data block: CXlBinaryNameData::GetCount and CXlBinaryNameData::GetData.


Binary names are invisible Excel named ranges, accessible only to the add-in programmer, not to the user. They differ from visible ranges in that you cannot us them for Excel data types, only for buffers of binary data.

Binary names are held in worksheets, and are unique at worksheet level. However, there may be multiple instances of a binary name in a workbook (as many as there are worksheets in the book).

The first form of the function acts on the active sheet of the active workbook.

The second form acts on the requested sheet. In order to do so, the active workbook and sheet are changed if required, and then changed back again after the action is complete.


BinaryName data can be added to the active worksheet and retrieved using code like the following:

// Set data 
double adValues[2] = { 1.0, 2.0 };
BOOL ok = CXllApp::DefineBinaryName("value_pair", (void*)adValues, sizeof(adValues));

// Retrieve data
CXlBinaryNameData data;
ok = CXllApp::GetBinaryName("value_pair", data);
if (ok && data.GetCount() == sizeof(adValues))
    memcpy(adValues, data.GetData(), sizeof(adValues));

Excel 2010

There is a known problem with Excel 2010 as of SP0. The function xlGetBinaryName always fails to find the requested name. As a result, CXllApp::GetBinaryName() always fails. This bug is fixed in Microsoft's hotfix 2459118. More information can be found at http://support.microsoft.com/kb/2459118.


Header: xllplus.h

See Also

CXllApp Class | CXllApp Methods | CXllApp::DefineBinaryName() | CXllApp::ClearBinaryName() | CXlBinaryNameData object