Jun 042007

When importing a type library it could be at times cumbersome to use the default namespace name.

#import provides a nice option called rename_namespace.


#import "SomeTypelib.tlb" rename_namespace( "NibuNamespace" )

Using no_namespace is lazy programming šŸ˜ . Namespaces reduces name collision hence usage should be encouraged.

Jun 042007

Sometime back I was wondering about whether there was a way to transfer our good ol’ NULL terminated strings using COM apart from using BSTR’s.

That’s how I bumped into “string” attribute provided by MIDL.

Here is how we use it…

typedef [string] char NormalString[1024];

[id(1), helpstring( "Displays null terminated UNICODE strings" )]
HRESULT ShowMsgUnicodeString( [in,string] wchar_t* wCharString_i );

[id(2), helpstring( "Displays null terminated ANSI strings" )]
HRESULT ShowMsgAnsiString( [in,string] char* cString_i );

Well if weĀ don’t specify “string” then MIDL treatsĀ the parameterĀ as an address of a wchar/char.

Callers can invoke the call as they would normally do with a function.