C# 有人能解释这一点吗+/魔法? 我正在研究一些不是我的代码,它将C++中的一个参数传递给一个没有任何参数的托管COM C方法。代码运行良好,但我不知道为什么 可以解释一下发生了什么,或者指向C++使其成为可能的结构?< /P>
代码如下:C# 有人能解释这一点吗+/魔法? 我正在研究一些不是我的代码,它将C++中的一个参数传递给一个没有任何参数的托管COM C方法。代码运行良好,但我不知道为什么 可以解释一下发生了什么,或者指向C++使其成为可能的结构?< /P>,c#,c++,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# Manage
//---------- 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++中的引用编组。你问的是什么部分?它是BSTR到字符串吗?C++使用COM对象的方式很大程度上取决于它在<代码>导入> <代码>行中如何配置。在本例中,代码示例使用了一个变量,该变量返回一个HRESULT
,而返回的是一个out参数。你可以改为使用一个变量,它返回一个字符串,但在出现错误时抛出一个异常。谢谢@crashmstr和Felice Pollano,我不会假装完全理解,但我现在明白了,知道需要进一步研究什么。我更新了帖子,加入了导入参数,以防有人好奇。@Cork333是一个很好的起点。