Я внедряю свою C # dll в неуправляемый процесс, написанный на C. Как мне поступить с вызовом функции в этом процессе? Я знаю адрес функции и сигнатуру функции. Функция использует fastcall
соглашение о вызовах. Я не уверен, что это усложняет ситуацию.
Я пытался использовать делегатов так:
[UnmanagedFunctionPointer(CallingConvention.FastCall, CharSet = CharSet.Unicode)]
public delegate IntPtr _PrintText(string msg, int color);
Что вызывает предупреждение о том, что FastCall
не поддерживается.
Вот более полный, простой пример того, что я пробовал:
C ++ функция:
void __fastcall PrintText (wchar_t * wMessage, int nColor)
Address: 0x31E3A0
C # код:
public class Example
{
[UnmanagedFunctionPointer(CallingConvention.FastCall, CharSet = CharSet.Unicode)]
public delegate IntPtr _PrintText(string msg, int color);
public static int EntryPoint(string pwzArgument)
{
var ptr = new IntPtr(0x31E3A0);
_PrintText MyPrint = Marshal.GetDelegateForFunctionPointer<_PrintText>(ptr);
MyPrint("TESTING", 0);
}
}
Как правильно определить и вызвать функцию FastCall
C с использованием C #?