如何从c#dll返回字节数组,uint值,c ++ / cli调用dll

时间:2014-10-10 09:40:35

标签: c# c++-cli

我正在编写一个c#DLL,它将计算并生成: -

-byte array [byte array]
-unit       [2 byte error code]
-bool       [true/false for success and failure]

此函数将由C ++ / CLI项目调用。一个函数只能返回一个值,但在执行c#函数后我需要这三个值。

C#中的函数原型是什么以及它是如何通过C ++ / CLI代码调用的。

提前致谢

3 个答案:

答案 0 :(得分:3)

尝试返回此元素的结构或类。

答案 1 :(得分:1)

也许你可以使用out修饰符。

void MyMethod(out byte[] ba, out short code, out bool success)
{
    ...
}

here所述,电话会是:

array<System::Byte>^ ba;
Int16 code;
bool success;
MyClass::MyMethod(ba, code, success);

我刚试过它。希望它有所帮助。

答案 2 :(得分:0)

正如Hans Passant在评论中所说,错误应该是例外,而不是返回值的一部分。如果您遇到语法问题,我会这样做:

在C#中:

public class CSharpClass
{
    public static byte[] Foo()
    {
        // ...
        if (some error condition)
        {
            throw new SomeException(...); 
            // If you really want, write your own exception class
            // and have the error code be a property there.
        }

        byte[] result = new byte[1024];
        return result;
    }
}

在C ++ / CLI中:

public ref class CppCLIClass
{
public:
    static void Bar()
    {
        try
        {
            array<Byte>^ fooResult = CSharpClass::Foo();
            // Success, no error occurred.
        }
        catch (SomeException^ e)
        {
            // An error occurred.
        }
    }
}