Вызов неуправляемой функции fastcall C по адресу в C # - PullRequest
0 голосов
/ 06 января 2019

Я внедряю свою 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 #?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...