Как правильно подключить и вернуть GetDlgItemTextA из C ++ в C # в C ++ из EasyHook - PullRequest
1 голос
/ 12 июня 2010

Я использую EasyHook , библиотеку C # для ввода и обхода функций из неуправляемых приложений.Я пытаюсь зацепиться за GetDlgItemTextA , который принимает аргументы:

UINT WINAPI GetDlgItemText(
  __in   HWND hDlg,
  __in   int nIDDlgItem,
  __out  LPTSTR lpString, 
  __in   int nMaxCount
);`

В моем хуке я использую его как:

[DllImport("user32.dll",
// CharSet = CharSet.Unicode,
SetLastError = true,
CallingConvention = CallingConvention.StdCall)]
static extern uint GetDlgItemTextA(IntPtr hWin, int nIDDlgItem, StringBuilder text, int MaxCount);

hook:

static uint DGetDlgItemText_Hooked(IntPtr hWin, int nIDDlgItem, StringBuilder text, int MaxCount)
{
    // call original API...
    uint ret = GetDlgItemTextA(hWin, nIDDlgItem, text, MaxCount);
    MessageBox.Show(text.ToString());
    return ret;
}

К сожалению, в тот момент, когда это вызывается, зависшее приложение вылетает.Есть ли лучший каст, который я могу использовать, чтобы успешно подключиться к этой функции?Спасибо!

Я скомпилировал, отредактировал и подтвердил рабочее состояние моей установки EasyHook.Это только оболочка и только зацепка.

1 Ответ

0 голосов
/ 12 июня 2010

Ну, похоже, что мой код работал, но единственное отличие, которое я должен был поместить оператор try catch в ловушку по неизвестной причине. StringBuilder правильно конвертируется из LPCSTR и обратно в LPCSTR, и программа читает его очень хорошо. Программа теперь не падает, поэтому я решил добавить это в качестве собственного ответа.

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