Я пишу aС# DLL, который будет вычислять и производить: -
-byte array [byte array]
-unit [2 byte error code]
-bool [true/false for success and failure]
эта функция будет вызвана проектом C++/CLI. Функция может возвращать только одно значение, но мне нужны эти 3 значения после выполнения функции С#.
какой будет прототип функции в С# и как он вызывается кодом C++/CLI.
заранее спасибо
Может быть, вы можете использовать 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);
Я просто протестировал его. Надеюсь, поможет.
TryParse
, Dictionary<Key,Value>::TryGetValue
т. Д.), Dictionary<Key,Value>::TryGetValue
делает это, за исключением того, что bool success становится возвращаемым значением.
Попробуйте вернуть структуру или класс этих элементов.
Как отметил Ханс Пассант в комментариях, ошибки должны быть исключениями, а не частью возвращаемого значения. Если у вас возникли проблемы с синтаксисом, вот что я буду делать:
В С#:
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.
}
}
}
array<Byte>^
в C ++ / CLI. «Коды ошибок» должны быть исключениями.