Я действительно застрял здесь. Надеюсь, кто-то может мне помочь. Как перевести эту функцию на C#?Перевод с C/C++ на C#
void __declspec(dllexport) __cdecl test(float *avrSwap, int *aviFAIL, char *accInfile, char *avcOutname, char *avcMsg)
Я действительно застрял здесь. Надеюсь, кто-то может мне помочь. Как перевести эту функцию на C#?Перевод с C/C++ на C#
void __declspec(dllexport) __cdecl test(float *avrSwap, int *aviFAIL, char *accInfile, char *avcOutname, char *avcMsg)
[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's 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();
}
. Спасибо за ответ, однако, как «Я не хочу сначала скомпилировать его на C++. Я хочу назвать эквивалентную функцию C#». Причина этого в том, что в моем приложении функция C++ будет меняться во время выполнения. C# легко компилируется внутри во время выполнения, а C++ может (только?) Компилироваться во время выполнения с использованием msbuild.exe (и других). Однако решение, которое я ищу, является внутренним компилятором, и я не могу найти внутренний компилятор C++. – user2855803
Тогда его параметры, вероятно, будут такими же, как 'WrapTest'. – Medinoc
вы хотите назвать эту Си ++ в C#? – Matt
Я не хочу скомпилировать его сначала i C++. Я хочу вызвать эквивалентную функцию C#. – user2855803
создайте блок 'unsafe' и вызовите функцию. разве это не должно работать? –