2010-12-30 1 views
1

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

линии:

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 на основе длл. Я подумал, прочитав документы, что CString будет немедленно доступна. Тем не менее, я получаю ошибку Error 1 error C2665: «ATL :: CStringT :: CStringT»: ни одна из 17 перегрузок не могла преобразовать все типы аргументов?

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

Кроме того, предполагается, что вы можете использовать класс CString в .dll, отличном от mfc, используя заголовок #include, однако я получаю ту же ошибку Error 1 C2039: 'CString': не является членом 'ATL :: CStringT' так снова, как я могу его использовать?

Спасибо.

+0

1. Опубликуйте фрагмент кода, который генерирует C2665, и точное сообщение об ошибке (в частности, какие типы аргументов он жалуется). 2. Отправьте код, который генерирует C2039. – atzz

ответ

1

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

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

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

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

CString V31 (FileName);