Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有人能解释这一点吗+/魔法? 我正在研究一些不是我的代码,它将C++中的一个参数传递给一个没有任何参数的托管COM C方法。代码运行良好,但我不知道为什么 可以解释一下发生了什么,或者指向C++使其成为可能的结构?< /P>_C#_C++ - Fatal编程技术网

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是一个很好的起点。