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 20: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
Your Filters
Interested
Ignored
     
0 Shai Vashdi 576
1 OriginalGriff 183
2 Tadit Dash 160
3 Sergey Alexandrovich Kryukov 136
4 praveen_07 115
0 Sergey Alexandrovich Kryukov 9,280
1 OriginalGriff 5,473
2 Peter Leow 4,100
3 Maciej Los 3,540
4 Abhinav S 3,333


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