using System::Runtime::InteropServices::OutAttribute;
int Class1::FXForwardRateW(array<int>^ premium, [Out] double% fwdRate)
{
double tempFwdRate;
pin_ptr<int> pin = &premium[0];
int status = FXForwardRate(reinterpret_cast<long*>(pin), &tempFwdRate);
fwdRate = tempFwdRate;
return status;
}
Это будет выглядеть в C # с подписью:
int FXForwardRateW(int[] premium, out double fwdRate);
(Если fwdRate
действительно только для вывода, а не для ввода / вывода, то семантически вы хотите, чтобы тип аргумента был out double
, а не ref double
.)
Тем не менее, обратите внимание, что использование C ++ / CLI для этого может быть излишним, если у вас нет более сложного маршалинга, чтобы сделать его в другом месте;это можно сделать проще, используя P / Invoke непосредственно из C #:
[DllImport("c-library-name.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int FXForwardRate(int[] premium, out double fwdRate);
Ручное маршалинг не требуется.