有人可以解释一下这个C ++ / C#魔术吗?

时间:2015-03-30 14:43:35

标签: c# c++

我正在研究一些不属于我的代码,它将c ++中的参数传递给没有任何参数的(托管COM)c#方法。代码工作正常,但我不知道为什么。

有人可以解释发生了什么,或者指出了使其成为可能的c ++构造吗?

以下是代码:

//---------- C++ ----------
#import "wrapper.tlb" named_guids raw_interfaces_only

BSTR b;
m_wrapper->getException(&b);
CW2A conv(b);
std::string s(conv);

if (! s.empty() ) {
    //Perform exception processing
{


//---------- C# Managed COM ----------
public class wrapper : Iwrapper 
{
    private exceptionStr = String.Empty;  // 'exceptionStr' set elsewhere in C# for an eventual pull by C++

    public string getException()
    {
        return exceptionStr;
    }

    //... other C# methods that may set 'exceptionStr'
}

1 个答案:

答案 0 :(得分:1)

COM标准接口不允许返回参数,因为任何函数都返回HRESULT。因此,C#中COM对象中的返回值似乎被编组为C ++方面的引用。