Click here to Skip to main content
13,458,091 members
Rate this:
Please Sign up or sign in to vote.
See more:
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()
	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 20:04pm

1 solution

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

Solution 1


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[^]


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

  Print Answers RSS
Top Experts
Last 24hrsThis month

Advertise | Privacy |
Web02 | 2.8.180323.1 | Last Updated 23 Jan 2013
Copyright © CodeProject, 1999-2018
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