you can't pass a CString as a parameter across COM, change it to a BSTR, using CComBSTR to wrap the CString at the calling end, and CString to wrap the BSTR on the callee end
so it becomes
[ id( 1 ), helpstring( "Chat" )] HRESULT DumpMessage([in]BSTR Message );
caller
CString msg(_T("hello world"));
object->DumpMessage(CComBSTR(msg));
callee
STDMETHOD(DumpMessage)(BSTR Message)
{
CString msg(Message);
OutputDebugString(msg);
}