Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C++ C# COM
I'm calling a COM written in C++ from a .NET code written in C#.
 
The COM interface methods return HRESULT to indicate whether the call was successful.
However, when I look at the interface methods in C#, they claim to be void functions.
 
How do I pick up the HRESULTs from the COM then?
 
STDMETHOIMP CMyCOMObject::XMyCOMInterface::MyMethod()
{
	METHOD_PROLOGUE(CMyCOMObject, MyCOMInterface);
	return S_OK;
}
 
void Foo()
{
	MyCOM.IMyCOMInterface m_myCOM = new MyCOM.IMyCOMInterface;
	int nOut = m_myCOM.MyMethod(); // ERROR! C# thinks MyMethod is a void function!
}
Posted 22-Jan-13 21:04pm

1 solution

Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

Hello,
 
By default COM wrapped as void on output, but it throws an exception if your method returns failed HRESULT.
You can handle COMException[^] in catch block. The COMException.HResult is the error code.
 
Another way is to create your own wrapper and specify PreserveSig[^] Attribute for the method and makes returns int instead of void.
 
More information about specified HRESULTS and .NET exceptions:
How to: Map HRESULTs and Exceptions[^]
 
Regards,
Maxim.
  Permalink  

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 505
1 Maciej Los 325
2 Richard MacCutchan 265
3 Mathew Soji 220
4 BillWoodruff 210
0 OriginalGriff 8,804
1 Sergey Alexandrovich Kryukov 7,457
2 DamithSL 5,689
3 Maciej Los 5,279
4 Manas Bhardwaj 4,986


Advertise | Privacy | Mobile
Web02 | 2.8.1411028.1 | Last Updated 23 Jan 2013
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100