我正在研究一些不属于我的代码,它将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'
}
答案 0 :(得分:1)
COM
标准接口不允许返回参数,因为任何函数都返回HRESULT
。因此,C#中COM对象中的返回值似乎被编组为C ++方面的引用。