상황은 AFX DLL 을 사용하는 EXE에서 문자열을 리턴받고 싶을 때 이다.
Want :
So I Was : (Wrong)
이렇게도 해봤는데
릴리즈모드로 빌드한 EXE를 실행시 에러가 나지 않지만 디버그모드로 빌드한 EXE에서는
Error on Excute :
뭐 이런 에러가 나더라
찾아보니까 빌드시 DLL 의 CString 과 EXE의 CString 이 다르기 때문(자세한건 에러로 구글링해보면 나온다.) 이라는 결론이 나왔다.
곧 죽어도 CString 을 LPSTR로 변환시켜서 쓰고 싶진 않았던 터라 (그러기 싫어서 굳이 CString 따위를 사용했다)
const 도 여기저기 붙여보는 뻘짓을 했다.
CString 은 묵시적으로 LPCTSTR 로 변환이 가능하지?
그럼 굳이 const 인 LPCTSTR 을 LPSTR로 변환하지 않고도 사용할 수 있는건데...
결국 결론은 간단했다.
Right :
끝
만세.
이걸 해결 못해서 하루 종일 낑낑댄 나는.... OTL
오늘의 교훈.
절대로 CString 을 써야만 하는 상황이 아니면 이따위것 쓰지 말자.
Want :
// EXE에서 이런 형태로 사용하고 싶었다.
CString str = myDllClass.ToString();
//or... 좀 번거롭지만 이렇게라도 굳이 쓰고 싶었다.
CString str;
myDllClass.ToString(str);
CString str = myDllClass.ToString();
//or... 좀 번거롭지만 이렇게라도 굳이 쓰고 싶었다.
CString str;
myDllClass.ToString(str);
So I Was : (Wrong)
CString ToString()
{
return _T("merong~");
}
// and
void ToString(CString& str)
{
str = _T("merong~");
}
{
return _T("merong~");
}
// and
void ToString(CString& str)
{
str = _T("merong~");
}
이렇게도 해봤는데
릴리즈모드로 빌드한 EXE를 실행시 에러가 나지 않지만 디버그모드로 빌드한 EXE에서는
Error on Excute :
dbgheap.c
Line: 1044
Expression : _CrtlsValidHeapPointer(pUserData)
...
Line: 1044
Expression : _CrtlsValidHeapPointer(pUserData)
...
뭐 이런 에러가 나더라
찾아보니까 빌드시 DLL 의 CString 과 EXE의 CString 이 다르기 때문(자세한건 에러로 구글링해보면 나온다.) 이라는 결론이 나왔다.
곧 죽어도 CString 을 LPSTR로 변환시켜서 쓰고 싶진 않았던 터라 (그러기 싫어서 굳이 CString 따위를 사용했다)
const 도 여기저기 붙여보는 뻘짓을 했다.
CString 은 묵시적으로 LPCTSTR 로 변환이 가능하지?
그럼 굳이 const 인 LPCTSTR 을 LPSTR로 변환하지 않고도 사용할 수 있는건데...
결국 결론은 간단했다.
Right :
// AFX DLL 에서의 선언:
LPCTSTR ToString() {
return _T("merong~");
}
// EXE 에서의 사용
CString str = myDllClass.ToString();
LPCTSTR ToString() {
return _T("merong~");
}
// EXE 에서의 사용
CString str = myDllClass.ToString();
끝
만세.
이걸 해결 못해서 하루 종일 낑낑댄 나는.... OTL
오늘의 교훈.