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

本文关键字:c++ cli 调用 dll uint c#dll 返回 字节 数组 字节数 | 更新日期: 2023-09-27 18:26:12

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

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

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

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

提前感谢

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

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

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

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

正如这里所说,呼叫将是:

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

我刚刚测试了一下。希望它能帮上忙。

正如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.
        }
    }
}