有人能解释一下C++/C#的魔力吗
Can some explain this bit of C++/C# magic?
我正在处理一些不是我的代码,它将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'
}
COM
标准接口不允许返回参数,因为任何函数都会返回HRESULT
。因此,C#中COM对象中的返回值在C++端被编组为引用。