'Visual C++'에 해당되는 글 70건
- 2008.11.12 my나름 프로그래밍 규칙(작성중)
- 2008.11.11 [스레드] error LNK2001: unresolved external symbol __endthreadex
- 2008.11.04 VC 단축키 및 주석 매크로
- 2008.11.04 VAssist ALT+G 키가 안먹을때! 함수를 못찾을때!
- 2008.09.26 LNK2001: 문제해결?
- 2008.09.19 [VSS] VC++ 6/.NET 프로젝트에서 Visual Source Safe 삭제 방법
- 2008.09.19 warning LINK4070 해결안!!
- 2008.06.25 CString ↔ int, CString ↔ TString
- 2008.06.03 LNK4089: all references to "SHELL32.dll" discarded by /OPT
- 2008.05.29 [DEBUG] GetLastError를 이용해 마지막 에러 내용 보이기
my나름 프로그래밍 규칙(작성중)
Posted on 2008. 11. 12. 13:48
Filed Under Visual C++
① 형식별 접두어
queue : que
② 구조체
③ union
④ 상수
⑤ enum
함수
- MFC: 첫글자는 대문자
- C함수 또는
[스레드] error LNK2001: unresolved external symbol __endthreadex
Posted on 2008. 11. 11. 10:38
Filed Under Visual C++
--------------------Configuration: tcpechoserv - Win32 Debug--------------------
Linking...
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/tcpechoserv.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
tcpechoserv.exe - 3 error(s), 0 warning(s)
Linking... nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex Debug/tcpechoserv.exe : fatal error LNK1120: 2 unresolved externals Error executing link.exe.
Symptom:
Microsoft Visual C++ generates the link error:
uafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
uafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Possible Cause:
A library that is being used was built as a multithreaded DLL, however the application is only single threaded.
Remedy:
Change the application to multithreaded. To do this:
- Go to Project Settings and select the 'C/C++' tab.
- Select 'Code Generation' in Category.
- Set ‘Use run-time library’ to either ‘Debug Multithreaded’ (for debug builds) or ‘Multithreaded’ (for release builds).
라는 결과가 나온다.
VC++ 6.0에서
Project > setting > General > Microsoft Foundation Classes:
에서 Use MFC in a Static Libary를 선택해주니 문제 해결
VC 단축키 및 주석 매크로
Posted on 2008. 11. 4. 13:44
Filed Under Visual C++
[VC] 단축키
Ctrl + Tab Edit하고 있는 Child Window 간의 이동
Ctrl + F4 현재 Edit하고 있는 Child Window를 닫기
Ctrl + I 문자열 입력 점진적으로 문자열 찾기 (Incremental Search)
Ctrl + F3 현재 커서에 있는 문자열 찾기 fowared (블록 지정 안 해도 됨)
Shift + F3 현재 커서에 있는 문자열 찾기 backward
F3 찾은 문자열에 대한 다음 문자열로 이동 (Next Search)
Ctrl + H 문자열 찾아 바꾸기 (Replace)
Ctrl + Left/Right Arrow 단어 단위로 이동
Ctrl + Delete 또는 Backspace 단어 단위로 삭제
Ctrl + F2 현재 라인에 북마크 지정/해제
F2 지정된 다음 북마크로 이동
Ctrl + Shift + F2 지정된 모든 북마크를 해제
F9 현재 라인에 Breakpoint를 지정/해제
Ctrl + Shift + F9 현재 Edit하고 있는 소스파일에 지정된 모든 Breakpoint 해제
Ctrl + ] 또는 E '{'괄호의 짝을 찾아줌 ('{'에 커서를 놓고 눌러야 함}
Ctrl + J, K #ifdef 와 #endif의 짝을 찾아줌
Ctrl + L 한 라인을 클립보드로 잘라내기 (Cut)
Ctrl + Shift + L 한 라인을 삭제
Alt + Mouse 블록 설정 세로로 블록 설정하기 (마우스로)
Ctrl + Shift + F8 세로로 블록 설정하기 (키보드로), 취소할 때는 Esc키를 눌러야 함
블록 설정 -> Tab 선택된 블록의 문자열을 일괄적으로 들여쓰기(Tab) 적용
블록 설정 -> Shift + Tab 선택된 블록의 문자열을 일괄적으로 내어쓰기 적용
Alt + F8 -> Tab 또는 Shift + Tab 들여쓰기 자동 조정 (Tab:들여쓰기, Shift + Tab : 내어쓰기)
Ctrl + T 현재 커서에 있는 변수/함수에 대한 Type이 Tooltip 힌트 창에 나타남
Ctrl + Alt + T 멤버 변수/함수 목록에 대한 팝업 창이 나타남
Ctrl + Shift + T 공백/콤마/파이프/괄호 등을 기준으로 좌우 문자열을 Swap시킴
Ctrl + Shift + 8 문단기호 표시/감추기 : Tab은 ^, Space는 .으로 표시
Ctrl + D 툴바의 찾기 Editbox로 이동
Ctrl + Up/Down Arrow 커서는 고정시키고 화면만 스크롤 시키기
Tab 들여쓰기
Shift+Tab 내어쓰기
F4 다음 에러메세지로 이동
Alt+F8 들여쓰기 자동 조정
Ctrl+F 찾기
Ctrl+F3 현재 커서에 있는 단어로 찾기
Ctrl+H 찾아 바꾸기
F3 다음 단어 찾기
Ctrl+Shift+F3 이전 단어 찾기
Alt+E+I 프로젝트 내의 모든 파일에서 찾기
F2 설정된 북마크로 이동
F9 현재 커서위치에 BreakPoint를 설정/해제
Ctrl+B 브레이크 포인트 관리 메뉴
Ctrl+Spacebar 멤버목록 팝업창
Ctrl+T 현재 커서에 있는 단어의 툴팁정보 보기
Ctrl+U 모두 소문자로
Ctrl+Shift+U 모두 대문자로
Ctrl+Shift+8 Tab은 ^ 로 공백은 . 으로 보여줌
디버깅에 관련된 단축키 하나 더.
변수이름을 적어 놓고 브래이크 포인터의 위치 여부와 관계 없이 변수의 내용을 추적하는 기능이 Watch Window에 들어 있다. 디버그 모드에서 추가하고픈 변수나 등등 앞에 커서를 위치 시킨후 Shift + F9를 누르면 그냥 바로 추가된다.
▼ Browse Information file 이 필요한 단축키(컴파일 되어야 함)
F12 현재 커서의 함수 정의 부분으로 이동
Shift+F12 현재 커서의 함수 참조 부분으로 이동
Ctrl+Num+ 다음 정의/참조 로 이동
Ctrl+Num- 이전 정의/참조 로 이동
▼ Visual Assist 6.0 설치시 가능한 단축키
Alt+O 현재 파일의 헤더(.h)/구현(.cpp) 파일로 이동
Alt+G 현재 커서의 함수 정의 부분으로 이동
Alt+M 현재 파일의 모든 함수 목록
Ctrl+Shift+V 선택해서 붙여넣기
Alt+← 이전 커서 위치로 이동
Alt+→ 다음 커서 위치로 이동
VC++에서의 단축키
Ref: Visual Studio Help
우선 닷넷 단축키 설정을 vc++ 6으로 변경(도구 -> 옵션 -> 환경 -> 키보드 )
변수이름을 적어 놓고 브래이크 포인터의 위치 여부와 관계 없이 변수의 내용을
추적하는 기능이 Watch Window에 들어 있죠...
그 때 디버그 모드에서 추가하고픈 변수나 등등 앞에 커서를 위치 시킨후
Shift + F9를 누르면 그냥 바로 추가됩니다
■ 주석 매크로..
다른 툴도 마찬가지 이지만 VC++로 코딩 하다보면...
지우기는 애매하고, 그냥 두자니 Assert fail 나고 해서 주석 처리 해두고 지나가는
경우가 많습니다.
주석 처리할 코드가 한두 라인일 경우엔 간단하지만
여러 라인일 경우 // 로 처리하자니 너무 많아서 /* */를 쓰게 되는데...
별루 안 이쁘죠. 그리고 주석을 삭제할 때 많이 귀찮고...
자 이제 본론으로 들어가서 주석 처리용 매크로를 정해두고 쓰는 법을 갈쳐 드리겠습니다.
먼저 메뉴의 "Tools/Macro..."를 선택 합니다.
"Macro"라는 이름의 대화 상자가 뜨죠?
"Edit"를 누릅니다. 매크로 이름에 Comment라고 쓰시고 Description은 암꺼나 쓰던지
아님 비워 두시던지...
자 MYMACROS.DSM이란 파일이 뜨죠?
아래와 같이 코드를 복사해 넣습니다.
'DESCRIPTION: A description was not provided.
Dim win
set win = ActiveWindow
if win.type <> "Text" Then
MsgBox "This macro can only be run when a text editor window is active."
else
if InStr( ActiveDocument.Selection, vbCr ) > 0 then
ActiveDocument.Selection.ReplaceText "^", "//", dsMatchRegExp
Else
ActiveDocument.Selection = "// " + ActiveDocument.Selection
End If
End If
End Sub
자 이제 창을 닫으세요. 저장하라면 "예"를 살포시 눌러 주시구...
다시 메뉴의 "Tools/Macro..."를 선택 해서 "Macro" 대화 상자를 엽니다.
다시 한번 "Edit"를 누릅니다. 매크로 이름에 Uncomment라고 쓰시고...
자 다시 MYMACROS.DSM이란 파일이 뜨죠?
아래의 코드를 또 복사해 넣습니다.
'DESCRIPTION: A description was not provided.
Dim win
set win = ActiveWindow
if win.type <> "Text" Then
MsgBox "This macro can only be run when a text editor window is active."
else
ActiveDocument.Selection.ReplaceText "^//", "", dsMatchRegExp
End If
End Sub
이제 창을 닫으시고... 저장 하시고...
마지막으로 메뉴의 "Tools/Macro..."를 선택 해서 "Macro" 대화 상자를 엽니다.
"Options >>" 버튼을 눌러서 추가된 버튼 중
"Keystrokes"를 누릅니다.
"Customize" 대화 상자가 열리죠?
거기서 "Macros/Comment"를 선택하고, "Press New Shortcut"을 선택한 다음
"Ctrl + /"를 눌러 줍니다. 입력창에 표시가 되죠?
이제 "Assign" 버튼을 눌러 입력을 종료하고...
다시 "Macros/Uncomment"를 선택하고, "Press New Shortcut"을 선택한 다음
"Ctrl + Shift + /"를 눌러 줍니다. 입력창에 표시를 확인 하신 후
"Assign" 버튼을 눌러 입력을 종료하고...
자 이제 모든 설정이 끝났습니다.
주석 처리를 하고 싶으신 부분을 선택하신 후 "Ctrl + /" 키를 누르면
선택된 라인 전체가 //로 주석 처리 될겁니다.
주석 처리된 라인을 선택한 후 "Ctrl + Shift + /"를 누르면
// 주석 처리가 사라지죠.
잘 활용 하시길...
ps. Visual Assist 에 VAssistX Selection Toggle Block Comment(/* */), VAssistX Selection Toggle Line Comment(//) 위의 매크로로 하면 블록과 라인용 한방에 된다.
VAssist ALT+G 키가 안먹을때! 함수를 못찾을때!
Posted on 2008. 11. 4. 11:27
Filed Under Visual C++
VAssist Option 창을 열어서 Rebuild 해준다. ▼ 밑에 Rebuild 버튼
메타파일을 안만들어 그런듯..
LNK2001: 문제해결?
Posted on 2008. 9. 26. 14:23
Filed Under Visual C++
error LNK2001: unresolved external symbol
헤더만 있고 구현이 없으면 생기는 에러란다.
후다닥 프로젝트에 *.h와 *.cpp를 추가하자!!
error LNK2001: unresolved external symbol _OCIHandleFree원인: 라이브러리 import가 안되어서
해결: 프로젝트 속성에서 추가하던가 직접 링크 ▶ #pragma comment(lib, "oci.lib")
VC6, 2009.12.15
[VSS] VC++ 6/.NET 프로젝트에서 Visual Source Safe 삭제 방법
Posted on 2008. 9. 19. 17:40
Filed Under Visual C++
출처: http://gpgstudy.com/gpgiki/Programming%20%C6%C1%20%B8%F0%C0%BD
0. 모든 파일 Read Only 풀고~
1. 모든 *.scc 파일 삭제 (검색 활용)
2. *.dsw 파일에서 다음 부분 삭제
begin source code control ....(중략) end source code control |
3. *.dsp 파일에서 다음 부분 삭제
# PROP Scc_ProjName "(어쩌고저쩌고)" # PROP Scc_LocalPath "." |
VC++ .NET 2003 프로젝트에서 Visual Source Safe 삭제 방법
1) 프로젝트 폴더에 있는(하위폴더 포함) *.scc 파일을 모두 삭제 합니다.
VC++ 6.0과 동일합니다.
2) *.sln 파일을 열어 Source Safe 정보를 삭제한다.
*.sln 파일을 메모장으로 열어보면 아래와 같은 부분이 있습니다.
GlobalSection(SourceCodeControl) = preSolution ...(중략) EndGlobalSection
이부분을 정확하게 찾아서 삭제합니다.
3) 모든 *.vcproj 파일을 열어 Source Safe 정보를 삭제한다.
*.vcproj 파일을 메모장으로 열어보면 아래와 같은 부분이 있습니다.
SccProjectName="(어쩌고저쩌고)" SccLocalPath="."
이부분을 삭제합니다. 보통 뒤에 '>' 이게 있는데 이건 지우면 안됩니다. 정확하게 해당 부분만 지우세요.
warning LINK4070 해결안!!
Posted on 2008. 9. 19. 17:35
Filed Under Visual C++
현상 :
DLL 프로젝트에서
디버그빌드(또는 릴리즈빌드)에서
Output File Name 이름을 바꾸면 아래와 같은 Warning이 발생한다.
------------------------------------------------------------------------------------------------------------------
ProjectName.exp :
warning LNK4070: /OUT:ProjectName.dll directive in .EXP differs from output filename "ProjectNameD.dll"; ignoring directive
------------------------------------------------------------------------------------------------------------------
원인 :
def 파일에 ProjectName.dll 로 설정되어 있어 exp 파일과 결과물의 파일이름이 달라서 발생한다.
해결방법 :
디버그빌드용 (또는 릴리즈용)으로 별도의 def 파일을 작성하면 된다.
ProjectName.def 를 복사하여 ProjectNameD.def 파일로 이름 변경후
---------------------------------------------------------
LIBRARY "Project"
---------------------------------------------------------
항목을
---------------------------------------------------------
LIBRARY "ProjectD"
---------------------------------------------------------
로 변경하면 된다.
추가메모
Debug/Release 각각 설정하고자 할때에는 *.def파일을 2개 만들어주면 된다.
def파일명이 디폴트명이 아닐경우, 다음을 변경해야한다.
프로젝트 설정 > Link > General - Project Options: /def:"XXXX.def"
출처: http://blog.naver.com/lantis00/70022613729
CString ↔ int, CString ↔ TString
Posted on 2008. 6. 25. 17:22
Filed Under Visual C++
int i = _ttoi(CString);
int i = 100;
CString strTemp;
strTemp.Format("%d", i);
CString ↔ TString
TString ts;
CString strTemp = ts.c_str();
CString strTemp;
TString ts = (LPCTSTR)strTemp;
LNK4089: all references to "SHELL32.dll" discarded by /OPT
Posted on 2008. 6. 3. 11:42
Filed Under Visual C++
LINK : warning LNK4089: all references to "SHELL32.dll" discarded by /OPT:REF ?
프로젝트 빌드시 프로젝트에 필요없는 모듈(lib)이 있게 되는 경우 이 메세지가 발생한다.
위의 경우 SHELL32.dll 을 사용하지 않는다는 의미이므로
Project-Setting-Link-Object/library modules 에서 Sheel32.lib 를 찾아서 지워주면 된다.
MSDN에서 보면
/OPT:REF to eliminate functions and/or data that is never referenced.
"/OPT:REF ==> 참조되지 않는 함수나 데이터 제거 "
라고 나와 있다
[DEBUG] GetLastError를 이용해 마지막 에러 내용 보이기
Posted on 2008. 5. 29. 09:56
Filed Under Visual C++
DWORD CDMFCommonUtil::ShowLastError(void)
{
LPVOID lpMsgBuf;
DWORD err;
err = GetLastError();
::FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
err,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
TRACE0(lpMsgBuf);
//AfxMessageBox((LPTSTR)lpMsgBuf);
::LocalFree( lpMsgBuf );
return err;
}