Нужно использовать некоторые ссылки, чтобы лучше понять параметр (и используемый оператор '%') при взаимодействии C# с C++/CLI. Использование VS2012 и это MSDN ссылка: msdn ref, вызывающий C++/CLI из C# с параметром out
С ++ кода библиотеки DLL, скомпилированный с/CLR
#pragma once
using namespace System;
namespace MsdnSampleDLL {
public ref class Class1
{
public:
void TestOutString([Runtime::InteropServices::Out] String^ %s)
{
s = "just a string";
}
void TestOutByte([Runtime::InteropServices::Out] Byte^ %b)
{
b = (Byte)13;
}
};
}
и С # код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MsdnSampleDLL;
namespace MsdnSampleApp
{
class Program
{
static void Main(string[] args)
{
Class1 cls = new Class1();
string str;
cls.TestOutString(out str);
System.Console.WriteLine(str);
Byte aByte = (Byte)3;
cls.TestOutByte(out aByte);
}
}
}
Строка часть этого кода (копируется из MSDN) работает отлично. Но когда я пытался расширить на идее с пропусканием байт для заполнения - я получил следующее сообщение об ошибке от компиляции C#
Аргумент 1: не удается преобразовать из «из байта» до «из System.ValueType»
Так что, очевидно, я просто не «получаю это» из документов msdn. Я буду благодарен за ссылки на лучшую документацию, чтобы объяснить это.
Спасибо. Как вы сказали - сейчас все отлично. Время для меня взломать книгу. :? –