MFC .dll, проблемы CString, псевдокод IDA c ++, насколько это близко? - PullRequest
1 голос
/ 30 декабря 2010

У меня есть некоторый псевдокод C ++ IDA, и мне было интересно, как близко он был ...

Строки:

CHAR Filename; // [sp+26Ch] [bp-110h]@1
char v31; // [sp+36Ch] [bp-10h]@1
int v32; // [sp+378h] [bp-4h]@1

GetModuleFileNameA(0, &Filename, 0x100u);
CString__CString(&v31, &Filename);
v32 = 0;
CString::MakeLower(&v31);
if ( CString__Find(&v31, "notepad") != -1 ) 
...

Поскольку декомпилированный .dll использует CString, я предположил, чтоэто основанная на MFC dll.Я думал, читая документы, что CString будет немедленно доступна.Тем не менее, я получаю ошибку Ошибка 1 ошибка C2665: 'ATL :: CStringT :: CStringT': ни одна из 17 перегрузок не может преобразовать все типы аргументов?

Я также получаю похожие ошибки с MakeLower и Find, которыев соответствии с тем, что я прочитал, являются стандартными функциями CString, так где же я ошибаюсь?

Кроме того, вы должны иметь возможность использовать класс CString в библиотеках, не основанных на mfc, используя заголовок #include, однако, Я получаю ту же ошибку 1 Ошибка C2039: «CString»: не является членом «ATL :: CStringT», так как еще раз, как я могу его использовать?

Спасибо.

1 Ответ

1 голос
/ 14 декабря 2011

hexrays создаст больше C-подобного кода, чем C ++ с объектами. поэтому все указатели «this» передаются явно.

Чтобы все прояснить, вам, вероятно, следует изменить тип v31 на CString.

и я думаю, что компилятор не поймет, что CString__CString (<>, FileName) является конструктором.

так что вы должны изменить это сами в:

CString v31 (FileName);

...