Перевод с C / C ++ на C #

0

Я действительно застрял здесь. Надеюсь, кто-то может мне помочь. Как перевести эту функцию на С#?

void __declspec(dllexport) __cdecl test(float *avrSwap, int *aviFAIL, char *accInfile, char *avcOutname, char *avcMsg)
Теги:
translation
dllexport

1 ответ

0
[DllImport("dllname", CallingConvention=CallingConvention.Cdecl, EntryPoint="test")]
private static void Test(
    [In, Out, MarshalAs(UnmanagedType.LPArray, SizeConst=1024)] float[] avrSwap,
    out int aviFAIL,
    [In, MarshalAs(UnmanagedType.LPStr)] string accInfile,
    [In, MarshalAs(UnmanagedType.LPStr)] string avcOutname,
    [Out, MarshalAs(UnmanagedType.LPStr)], StringBuilder avcMsg
);

//Wrapper that correctly initializes the StringBuilder to its rightful size.
//It quite stupid that according to the P/Invoke help, 
//StringBuilder parameters don't support SizeConst.
public static void WrapTest(float[] avrSwap, out int aviFAIL, string accInfile, string avcOutname, out string avcMsg)
{
    StringBuilder sbAvcMsg = new StringBuilder(1024);
    Test(avrSwap, out aviFail, accInfile, avcOutname, sbAvcMsg);
    avcMsg = sbAvcMsg.ToString();
}
  • 0
    Однако спасибо за ответ, как уже упоминалось выше: «Я не хочу сначала скомпилировать его в C ++. Я хочу вызвать эквивалентную функцию c #». Причина этого в том, что в моем приложении функция c ++ будет меняться во время выполнения. C # легко компилируется внутри во время выполнения, в то время как c ++ может (только?) Быть скомпилирован во время выполнения с помощью msbuild.exe (и других). Тем не менее, решение, которое я ищу, это внутренний компилятор, и я не смог найти внутренний компилятор c ++.
  • 0
    Тогда его параметры, вероятно, будут такими же, как и у WrapTest .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню