<!--
 -  
 -  This file is part of the OpenLink Software Virtuoso Open-Source (VOS)
 -  project.
 -  
 -  Copyright (C) 1998-2018 OpenLink Software
 -  
 -  This project is free software; you can redistribute it and/or modify it
 -  under the terms of the GNU General Public License as published by the
 -  Free Software Foundation; only version 2 of the License, dated June 1991.
 -  
 -  This program is distributed in the hope that it will be useful, but
 -  WITHOUT ANY WARRANTY; without even the implied warranty of
 -  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 -  General Public License for more details.
 -  
 -  You should have received a copy of the GNU General Public License along
 -  with this program; if not, write to the Free Software Foundation, Inc.,
 -  51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 -  
 -  
-->
<?xml version="1.0" encoding="ISO-8859-1"?>
<refentry id="HO-S-15">
    <refmeta>
	<refentrytitle>Accessing COM Objects via C#</refentrytitle>
	<refmiscinfo>tutorial</refmiscinfo>
    </refmeta>
    <refnamediv>
	<refname>Accessing COM Objects via C#</refname>
	<refpurpose>Using the .NET to access native COM objects from Virtuoso/PL</refpurpose>
    </refnamediv>
    <refsect1 id="HO-S-15a_overview">
	<title>Overview</title>
	<para>The following tutorial demonstrates how Virtuoso can access MS Windows COM
	    objects via .NET. </para>
	<para>The demonstrations in this section highlight transparent integration 
	    (hosting) between Virtuoso, the Microsoft .NET implementations of 
	    the ECMA Common Language Infrastructure (CLI) and the Win32 COM Layer. </para>
    </refsect1>
    <refsect1 id="HO-S-15a_prerequisites">
	<title>Prerequisites</title>
	<para>The following prerequisites ensure the usability of these  
	    tutorial demos on Windows: </para>
		<itemizedlist>
		    <listitem>.NET Runtime and Frameworks</listitem>
		    <listitem>.Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)</listitem>
		    <listitem>Virtuoso Universal Server for Windows with .NET CLR Hosting</listitem>
		</itemizedlist>
    </refsect1>
    <refsect1 id="HO-S-14a">
	<title>Tutorial Example</title>
	<para>The following tutorial shows how the Virtuoso server can call native Win32 COM objects using
	    the .NET runtime as intermediary. </para>
	<para>Please follow the steps below to maximize the value of this tutorial:</para>
	<orderedlist>
	    <listitem>Register the COM library COM/VirtCOMServer/Debug/VirtCOMServer.dll with COM (via regsvr32.exe COM/VirtCOMServer/Debug/VirtCOMServer.dll).</listitem>
	    <listitem>Copy the interop assembly COM/VirtCOMServer/VirtCOMServer.dll next to the virtuoso server binary (if not allready there).</listitem>
	    <listitem>Click on the "Set Initial State" link which registers the C# interop class for the Interface IVirtCOMObject with Virtuoso. Click on the "ho_s_15.sql" link to see the code behind this step </listitem>
	    <listitem>Click on the "Run" links to actually experience the demo</listitem>
	</orderedlist>
	<para>Demo Breakdown</para>
	<orderedlist>
	    <listitem>"ho_s_15.sql" registers the "VirtCOMServer.CVirtCOMObjectClass" C# interop class with Virtuoso. Click 
		on the "VirtCOMObject.c" and "VirtCOMObject.h" link to see the C++ source code of this interface and it's class</listitem>
	    <listitem>	"vsp1.vsp" uses the methods "AddAmount", "Clear" and "get_balance" of the "VirtCOMServer.IVirtCOMObject" Interface to 
		sum a number of amounts and get the resulting total.</listitem>
	</orderedlist>
    </refsect1>
</refentry>
