www.digitalmars.com         C & C++   DMDScript  

D - DMD 0.79 com server and template problems - comserver.zip

I noticed that the sample self registering inprocess com server dll example had
a strange behaviour :
when the dll is unloaded (not sure why CoFreeLibrary was called and no
FreeLibrary) the console IO also stopped.
this can be solved by keeping the dll loaded until the app exits, this I assume
is due to the runtime lib shutdown code closing stdin/out/err
which my be an indiccator that there are other issues with dll's written in D
(apart from the multipul GC's that will be running [not nec a bad thing])


also I tried to use the template T(alias A) syntax to ease calling
CoCreateInstance

template ComCreate(alias clz_guid, alias if_guid, IFACE ) {
IFACE newInstance() {
HRESULT hr;
IFACE   obj;
hr = CoCreateInstance( &clz_guid, null, CLSCTX_ALL, &if_guid, &obj );
if ( FAILED( hr ) )
{
throw new Exception( "unable to create new instance" );
}
return obj;
}
}

called with 
pIHello = ComCreate!(CLSID_Hello, IID_IHello, IHello).newInstance();

this however gives the error 
OPTLINK (R) for Win32  Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved

dclient.obj(dclient)
Error 42: Symbol Undefined _D7dclient10IID_IHelloS3std1c7windows3com4GUID
dclient.obj(dclient)
Error 42: Symbol Undefined _D7dclient11CLSID_HelloS3std1c7windows3com4GUID
--- errorlevel 2

is this a problem with the compiler or with my code ?

the work around was to do

template ComCreate( IFACE ) {
IFACE newInstance(GUID * clz_guid, GUID * if_guid ) {
HRESULT hr;
IFACE   obj;
hr = CoCreateInstance( clz_guid, null, CLSCTX_ALL, if_guid, &obj );
if ( FAILED( hr ) )
{
throw new Exception( "unable to create new instance" );
}
return obj;
}
}

pIHello = ComCreate!(IHello).newInstance(&CLSID_Hello, &IID_IHello);



begin 0644 comserver.zip
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
M6P<-7;MT54:,W]UVPW\//I V;9J>^[OWW+;71L`5D6D4$Z1"(K DC`G;0AN7
M)'JEC&V0B82FE"1(I<B&YJYG6[UV)9KYDXO0'W>]Z;0^$_E*I-Y8V G) A9*
MJDA1P3%7E%&U<>`MHURGQ+X)J((\D6\D72P5FG&K?WBXU]'+/JYI+$4A4J4%
M,A>RXC X90RA41<(26'R)5^D*QG1!<ZDB%=%O,QHHIQO3*6H['*B "&P,O+G
MD^Q3T8U%MJTHRU\JME8=!S=W?GCCWPW_TIM^]'"AVX.( Y11EC-2M0N- !<T
M(;B=^(T?1G\495LTT^X4"I5TX^Z:\D2L"X,>F4O;&L^#<WB367#^5+T.CO`&
MM]QS![O]_L!U4,\'M_1<Y]<H!P>/>!]M$8$&U.^++<+]!T*7^?53MI0A CE?
M<;'FMO5F6Z0TK47SOG;0TE]E1\= *O7:;&G&>VW(MCX`4$L!`A0`%```````
M1T=+,-[ NS`9````&0```!,``````````0` `````````&-O;7-E<G9E<B]B
M=6EL9"YB87102P$"%``4``(`"``Q!4LPRLNM0`$!``#N`0``$ `````````!
M`"````!*````8V]M<V5R=F5R+V)U:6QD+G-H4$L!`A0`%``"`` `F`)+,.=R
MY&T;!```V D``!(``````````0` ````>P$``&-O;7-E<G9E<B]C:&5L;&\N
M9%!+`0(4`!0`` `(`+I.2S"CA?,KN 4``+P/```3``````````$`(````,8%
M``!C;VUS97)V97(O9&-L:65N="YD4$L!`A0`%``"`` `9 %+,"8.L8N`"P``
M"R8``!,``````````0` ````L0L``&-O;7-E<G9E<B]D<V5R=F5R+F102P$"
M%``4``(`"`!X&X,AE-E8'[<```!B`0``%0`````````!`"````!B%P``8V]M
M<V5R=F5R+V1S97)V97(N9&5F4$L!`A0`%``"`` `-P9+,)*7BGE\`0``>`(`
M`!(``````````0` ````3! ``&-O;7-E<G9E<B]I:&5L;&\N9%!+!08`````
!P`'`,8!``#X&0``````
`
end
Feb 11 2004