"Brandon Bray [MSFT]" <br******@online.microsoft.com> wrote in message
news:uT**************@tk2msftngp13.phx.gbl...
With one exception, all native classes cannot be embedded in a __gc class.
The exception is POD types (a POD is short for "plain old data" and is a
class that neither has a user defined copy constructor nor a user defined
destructor, and contains only other PODs or scalar data).
I have been using destructors in my managed C++. It seems to work ok.
Some __gc code which uses native classes:
CMDAQ::CMDAQ( IMessageHandler* pMessageHandler, int siteId, int
interfaceType )
{
itsMessageDispatcher = new CMessageDispatcher();
itsMessageDispatcher->itsMessageHandler = pMessageHandler;
CDebug::Initialize( itsMessageDispatcher );
try
{
itsDAQControl = new CDAQControl( itsMessageDispatcher, siteId,
interfaceType );
itsHistogramGroup = itsDAQControl->GetHistogramGroup();
itsPhantomHistogramGroup = itsDAQControl->GetPhantomHistogramGroup();
}
catch( char* str )
{
itsMessageDispatcher->DebugMessage( str );
throw( new System::Exception( str ) );
}
}
CMDAQ::~CMDAQ()
{
delete itsDAQControl;
delete itsMessageDispatcher;
}
This is used in my C# code as follows:
public class DAQ
{
private static CMDAQ itsDaq = null;
private IMessageHandler itsMessageHandler;
public DAQ( IMessageHandler messageHandler, int interfaceType, int
siteId )
{
itsMessageHandler = messageHandler;
itsDaq = new CMDAQ( itsMessageHandler, siteId, interfaceType );
}
public void Dispose()
{
itsDaq.__dtor();
}
Dispose is called in the OnClosing funtion for my Form:
protected override void OnClosing( CancelEventArgs e )
{
base.OnClosing( e );
if( itsState == ProgState.DAQ )
{
itsDaq.Stop();
itsDaq.Dispose();
itsSettings.Save( @"c:\alta_prog\33\ProgramSettings.xml" );
}
}
Bill