2010-12-30 2 views
1

좀 IDA 의사 C++ 코드를 가지고 있고 그것이 ...이었다MFC .dll, CString 문제, IDA C++ 의사 코드, 얼마나 근접합니까?

의 선 얼마나 가까운 궁금 다음 디 컴파일 .DLL로

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) 
... 

나는 그것이 MFC를 기반으로 가정 한 CString을 사용 dll. CString을 즉시 사용할 수 있다는 문서를 읽고 생각했습니다. 그러나 오류 1 오류 C2665 : 'ATL :: CStringT :: CStringT'오류가 발생합니다 : 17 오버로드가 모든 인수 형식을 변환 할 수 있습니까?

또한 MakeLower와 Find에서 비슷한 오류가 발생합니다.이 오류는 표준 CString 함수에서 읽었을 때 어디에서 잘못 되었습니까?

또한, 당신은 비 mfc 기반 .dll에서 teh #include 헤더를 사용하여 CString 클래스를 사용할 수 있어야하지만, 나는 동일한 오류 1 오류가 발생합니다. C2039 : 'CString':의 멤버가 아닙니다. 'ATL :: CStringT'다시 어떻게 사용합니까?

감사합니다.

+0

1. C2665를 생성하는 코드 스 니펫과 정확한 오류 메시지 (특히, 그것이 불평하는 인수 유형이 무엇인지)를 게시하십시오. 2. C2039를 생성하는 코드를 게시하십시오. – atzz

답변

1

hexrays는 객체와 함께 C++보다 더 많은 C와 유사한 코드를 생성합니다. 그래서 모든 'this'포인터는 명시 적으로 전달됩니다.

일을 정리하려면 아마도 v31의 유형을 CString으로 변경해야합니다.

그리고 나는 컴파일러가 CString__CString (<>, FileName)이 생성자임을 이해하지 못한다고 생각합니다.

그래서 당신은 자신에 대한 변경해야합니다 :

에 CString V31 (파일 이름);