2 Windows Implementation Details

This chapter describes the implementation of the Viewer on the Windows platform. The Windows implementation of Oracle Outside In Viewer is delivered as a set of DLLs. When a developer uses the Windows LoadLibrary call to load sccvw.dll, the DLL registers a Window Class named SCCVIEWER. The developer can then create windows of this class (using the windows CreateWindow call) and use them like any other window. This class of window also accepts a number of Viewer-specific windows messages that implement all of the functions needed for viewing, printing, searching, etc.

For a list of the currently supported platforms, see Outside In Technology and click links under Certified Platforms and Supported Formats.


The 64-bit version of sccvw.dll will not load on an AMD-64 system without Visual C++ runtime version 12 installed. This happens because the system is missing the msvcr120.dll library, which is required. Users can download the required library from Microsoft page.

This chapter includes the following sections:

2.1 Installation

To install the demo version of the SDK, copy the contents of the ZIP archive (available on the web site) to a local directory of your choice.

This product requires the Visual C++ libraries included in the Visual C++ Redistributable Package available from Microsoft. There is a version of this package for the appropriate platform (x86 or x64) version of Windows. This can be downloaded from www.microsoft.com, by searching on the site for the following package:

  • vcredist_x86.exe, or

  • vcredist_x64.exe

The required download version is the "Visual C++ Redistributable Packages for Visual Studio 2013."

Oracle Outside In requires the msvcr120.dll redistributable module.

The installation directory should contain the following directory structure.

Directory Description


Contains a working copy of the Windows version of the technology.


Contains the C include files needed to build or rebuild the technology.


Contains the compiled executables of the sample applications.


Contains the library (.lib) files needed for the products.


Contains localization resource files.


Contains a subdirectory holding the source code for a sample application.


Contains sample input files authored in a variety of popular graphics, word processor, compression, spreadsheet and presentation applications.


Contains template files based on which html is created.

2.1.1 NSF Support

Notes Storage Format (NSF) files are produced by the Lotus Notes Client or the Lotus Domino server. The NSF filter is the only Oracle Outside In filter that requires the native application to be present to filter the input documents. Due to integration with an outside application, NSF support will not work with redirected I/O, when an NSF file is embedded in another file, or with IOTYPE_UNICODEPATH. Either Lotus Notes version 8 or Lotus Domino version 8 must be installed on the same machine as OIT. A 32-bit version of the Lotus software must be used if you are using a 32-bit version of OIT. A 64-bit version of the Lotus software must be used if you are using a 64-bit version of OIT. On Windows, SCCID_LOTUSNOTESDIRECTORY should be set to the directory containing the nnotes.dll. NSF support is only available on the Win32 and Win x86-64 platforms.

2.2 Libraries and Structure

Here is an overview of the files contained in the main installation directory for this product:


These DLLs implement the API. They should be linked with the developer's application. LIB files are included in the SDK.

File Description


Content Access module (provides organized chunker data for the developer)


Data Access module


File Identification module (identifies files based on their contents). The File ID Specification may not be used directly by any application or workflow without it being separately licensed expressly for that purpose.


Text Access module (provides straight text data for the developer)


Viewer module (this is the DLL that your application loads, providing control of all viewer functions)

Support DLLs

File Description


Interface to native GDI implementation (oswin32.dll is the module for Windows 32-bit implementation, and oswin64.dll is the module for Windows 64-bit implementation)


Annotation module


Chunker (provides caching of and access to filter data for the display engine)


Display Utilities module (includes text formatting)


Filter Access module


Formatting module (resolves numbers to formatted strings)


Filter utility module


Indexing engine


Localization library (all strings, menus, dialogs and dialog procedures reside here)


OLE rendering module


Utility functions (including IO subsystem)


The DLL that your application loads, providing control of all viewer functions


The GDI Abstraction layer

Display Engine DLLs

File Description


Bitmap (TIFF, GIF, BMP, PCX…)




Vector, Presentation (PowerPoint, Impress, Freelance…)


Spreadsheet/Database (Excel, Calc, Lotus 123…)


Archive (ZIP, GZIP, TAR…)


Document (Word, Writer, WordPerfect…)

Filter and Export Filter Libraries

File Description


Filters for specific file types (there are more than 150 of these filters, covering more than 600 file formats)


Support file for the vsnsf filter.

Premier Graphics Filters

File Description


Import filters for premier graphics formats


Interface to premier graphics filters

Additional Files

File Description


Support file for the vsacad filter


Tables for character mapping (all character sets)


Tables for character mapping (single-byte character sets). Located in the common directory.


Identical to cmmap000.Bin, but renamed for clarity (.dbc = double-byte character). This file is located in the common directory.

2.3 The Basics

All the steps outlined in this section are used in the sample applications provided with the SDK. Looking at the code for the simple sample application is recommended for those wishing to see a real-world example of this process.

For detailed information about all sample applications included with this product, see Sample Applications.

2.3.1 What You Need in Your Source Code

Any source code that uses this product should #include the file sccvw.h and #define WINDOWS and WIN32 or WIN64. For example, a Windows application might have a source file with the following lines:

#define WINDOWS         /* Will be automatically defined if your
                           compiler defines _WINDOWS */
#define WIN32
#include <sccvw.h>

2.3.2 Options and Information Storage

The technology creates the default options. In the Windows implementations, this is built by the technology as needed, usually the first time the software is run. You do not need to ship this list with your application. The list is automatically regenerated if corrupted or deleted.

The files used to store this information are stored in a .oit subdirectory in the following location:

\Documents and Settings\[user name]\Application Data

If an .oit directory does not exist in the user's directory, the directory will be created automatically by the technology. The files are automatically regenerated if corrupted or deleted.

The files are:

  • *.d = Display engine lists

  • *.opt = Persistent options


    Some applications and services may run under a local system account for which there is no users "application data" folder. In that case, the technology checks for the following environment variables in order: OIT_DATA_PATH, APPDATA, and LOCALAPPDATA. If none of those exist or is writable, the technology attempts to write the options files into the executable path of the UT module. The technology can still run if it cannot write the options files. However, performance will be significantly impeded.

These file names are intended to be unique enough to avoid conflict for any combination of machine name and install directory. This allows the user to run products in separate directories without having to reload the files above. The file names are built from an 11-character string derived from the directory the Oracle Outside In technology resides in and the name of the machine it is being run on. The string is generated by code derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm.

2.3.3 Structure Alignment

Oracle Outside In is built with 8-byte structure alignment. This is the default setting for most Windows compilers. This and other compiler options that should be used are demonstrated in the files provided with the sample applications in samples\win.

2.3.4 Loading the Viewer DLL

The DLL named sccvw.dll is loaded using a LoadLibrary call as follows;

g_ViewDllHnd = LoadLibrary("SCCVW.DLL");

In this DLL's DllEntryPoint function, it registers a window class that can then be used by the developer to create view windows.

All the Viewer's DLLs must reside in the same directory. Do NOT put them in the Windows or System directory.

All the sample applications #include a file called scclink.c (in the SDK common directory) that implements loading of the sccvw.dll from any directory. Comments in this code explain the problems involved in loading a DLL from a different directory and how these problems are solved in the code.

2.3.5 Creating a View Window

A simple example of view window creation code is:

g_ViewWnd = CreateWindow("SCCVIEWER",...);

All the additional parameters to CreateWindow are totally up to the developer. For instance, the dwStyle parameter can be WS_CHILD, WS_POPUP, WS_OVERLAPPED or any other set of styles.

The view window checks the class of its parent when it is created. If the class of its parent is "MDICLIENT", it will call DefMDIChildProc for default message processing. If the class is something else, it will call DefWindowProc for default message processing. This allows the view window to be used directly as a MDI child window. See the sample MDIVIEW for an example of this.

2.3.6 Sending SCCVW Messages

Once the developer has a handle to a view window, any of the SCCVW messages that make up the bulk of this document may be sent to the window (using SendMessage). The most likely action at this point would be to send SCCVW_VIEWFILE to view a file.

2.3.7 Receiving SCCVW Messages

The parent of the view window receives all SCCVW notification messages as Windows messages.

2.3.8 Unloading the Viewer DLL

When the developer's application no longer needs the Viewer (usually on exit), it must free the viewer DLL as follows:


Windows does not automatically free DLLs that are loaded using LoadLibrary. This step is necessary.

2.4 Character Sets

This section provides information about supported character sets.

2.4.1 Default API Character Set

The strings passed in the Windows API are ANSI1252 by default.

2.4.2 Double-Byte Character Set Mapping

Please note that to optimize performance on systems that do not require DBCS support, a second character mapping bin file, that does not contain any of the DBCS pages, is now included. The second bin file will give additional performance benefits for English documents, but will not be able to handle DBCS documents. To use the new bin file, replace the cmmap000.bin with the new bin file, cmmap000.sbc. For clarity, a copy of the cmmap000.bin file named cmmap000.dbc has also been included. Both the cmmap000.sbc and cmmap000.dbc files are located in the Common directory of the technology.

2.5 Runtime Considerations

The files used by this product must be in the same directory as the developer's executable.

2.6 Menus

The Viewer exposes a number of menus that developers can use at their discretion. The specifics of menu interactions under Windows are discussed here.

2.6.1 Context Menu

In keeping with the current trend in Windows of using the right mouse click to bring up a context menu, the Viewer pops up a view-window-specific context menu when the right mouse button is pressed. The context menu under Windows contains Copy, Print..., the display engine's menu, and access to the option dialogs. For example, the context menu that appears while viewing a spreadsheet appears in the following image:

Figure 2-1 Context Menu

Graphic of spreadsheet context menu

If this meets your application's needs and user interface standards, you can ignore the interaction described in the next section and let the Viewer do all the work. If you wish to handle the right click yourself, this functionality can be overridden by handling the SCCVW_CONTEXTMENU message.

2.6.2 Menu Interaction

Each type of display engine (Document, Bitmap, Archive, etc.) has functions that are unique to the kinds of files it can view. For instance, zooming, rotation and dithering are functions associated with graphic images, but not with spreadsheets. To handle these specialized tasks, each display engine has a menu that is tailored specifically for it.

When the application receives a SCCVW_DISPLAYCHANGE message, it may call SCCVW_GETDISPLAYINFO. One of the elements returned by this message is a handle to a pop-up menu. The application may then do whatever it likes with this menu (except destroy it), such as saving it to be popped up at another time.

2.7 Default Font Aliases

The technology includes the following default font alias map for Windows. The first value is the original font, the second is the alias.

  • Chicago = Arial

  • Geneva = Arial

  • Helv = Arial

  • Helvetica = Arial

  • itc zapf dingbats = Zapfdingbats

  • itc zapfdingbats = Zapfdingbats

  • New York = Times New Roman

  • times = Times New Roman

  • Times = Times New Roman

  • Tms Roman = Times New Roman


2.8 File Open Modes

Files to be viewed are opened using the GENERIC_READ, FILE_SHARE_READ, and FILE_SHARE_WRITE flags under Windows. This should allow developers to launch an application and edit the file (occasionally, the application launches but the file is read-only) while still viewing the file.

However, if you wish to launch a file you are viewing in its native application, it is recommended that you send SCCVW_CLOSEFILE to the view window first.

2.9 Changing Resources

Oracle Outside In Viewer ships with the necessary files for OEMs to change any of the menus or strings in the technology as they see fit.

Strings are stored in the lodlgstr.h file found in the resource directory. The file can be edited using any text editor.


Do not directly edit the scclo.rc file. Strings are saved with their identifiers in lodlgstr.h. If a new scclo.rc file is saved, it will contain numeric identifiers for strings, instead of their #define'd names.

When saving resource strings in character sets that require multi-byte characters, make sure to use a text editor that supports these characters, and save the file as appropriate for the character set being used.

Once the changes have been made, the updated scclo.dll file can be rebuilt using the following steps:

  1. Compile the .res file:

    rc /fo ".\scclo.res" /i "<path to header (.h) files folder>" /d "NDEBUG" scclo.rc
  2. Link the scclo.res file you've created with the scclo.obj file found in the resource directory to create a new scclo.dll:

    link /DLL /OUT:scclo.dll scclo.obj scclo.res


    Developers should make sure they have set up their environment variables to build the library for their specific architecture. For Windows x86_32, when compiling with VS 2013, the solution is to run vsvars32.bat (in a standard VS 2013 installation, this is found in C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools). If this works correctly, you will see the statement, "Setting environment for using Microsoft Visual Studio 2013 x86 tools." If you do not complete this step, you may have conflicts that lead to unresolved symbols due to conflicts with the Microsoft CRT.

  3. Embed the manifest (which is created in the \resource directory during step 2) into the new DLL:

    mt -manifest scclo.dll.manifest -outputresource:scclo.dll;2

If you are not using Microsoft Visual Studio, substitute the appropriate development tools from your environment.


In previous versions of Oracle Outside In, it was possible to edit SCCLO.DLL directly in Microsoft Visual Studio. Oracle Outside In DLLs are now digitally signed. Editing the signed DLL is not advisable.