OmniObjects

OmniObjects is a lightweight replacement for DCOM, suitable for many uses. It's still a alpha project, but it's being actively developed. 

You can download the lastest version here. Don't forget to check out the instructions, the release notes and the OmniObjects SourceForge project page.

Why replacing DCOM

DCOM is a good platform, but has some problems:
How I do expect to solve these problems with OmniObjects:

OmniObjects Overview

client → proxy → serialization lib → channel → serialization lib → stub → object

How to make your COM object compatible with OmniObjects

All you have to do is to generated and compile a OmniObjects proxy/stub dll. Use OmniIdl.exe to generated all the proxy/stub code from your IDL file (more details below), build the DLL and register it. This is it. You don't need to modify your original code, you don't even need the sources, just the IDL file.

Project Status

What we have:
Since we're just 0.40 yet, I still need to do some work to make things better. What we don't have: What I want to do before 1.0:

Things you must know before use the code

Hacking and understanding

OmniIdl.exe: it's the idl compiler and proxy/stub generator. Run it against an IDL file and it will generate the proxy/stub source code and a Visual C++ 8 (Visual Studio 2005) project. There is an OmniTestComLibrary project in OmniObjects source root, you can use it to test how OmniIdl works. Running '..\..\bin\OmniIdl.exe OmniTestComLibrary.idl', will yield the following files:

OmniObjects.dll: it's the OmniObjects runtime. The marshaller and the TCP/IP channel at implemented in this DLL. A proxy/stub DLL generated by OmniIdl.exe depends on this DLL. It has some proxy/stub declared for the internal types, but they are compiled together (the OmniObjectsInternalObject_OmniPS.h is included in this project).

OmniSimpleHost.exe: it's just an example about using the OmniObjects hosting API. 

OmniTestComLibrary.dll: it's a simple COM library used to show how to add OmniObjects support to an existent COM Project and how to generate the proxy/stub. Check for the projects build steps to see how we generated the proxy/stub code.

OmniTestClient.exe: it's a simple OmniObjects client, it calls methods provided by OmniTestComLibrary. Debug it to see how the whole magic works.

Release Notes

Version 0.4 release notes

Version 0.3 release notes

Now you can pass objects (interface pointers) as parameters, and all the proxy/stub stuff will be done automagically. Also, several improvements was made in the code, mainly error handling and TCP connection management.

Version 0.2 release notes

Now the refcount and the QueryInterface is working correctly for remote objects. If you want to test OmniObjects for your remote infrastructure, it's time.

First time you open the OmniObjects.sln, Visual Studio will complain that the OmniObjectsTestComLibrary_OmniPS project doesn't exists. Build the solution, right click over this project and choose to reload it. This is a proxy/stub project, and it will be generated during the OmniObjectsTestComLibrary build. After this, build it. You can remove this warning building the solution using the "vcbuild.exe" before opening it with the VS IDE.

Version 0.1 release notes

First time you open the OmniObjects.sln, Visual Studio will complain that the OmniObjectsTestComLibrary_OmniPS project doesn't exists. Build the solution, right click over this project and choose to reload it. This is a proxy/stub project, and it will be generated during the OmniObjectsTestComLibrary build. After this, build it.

There's a known memory leak in the marshaller.

The OmniObjects "Team"

The team (the 'we' appearing some times in the above text :-)) is just me, Rodrigo Strauss. If you want to help or send some suggestion, drop me a message via the Source Forge project page or via my personal web page (only in portuguese yet)

Hosted by SourceForge.net Logo