320x100

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++

willTcpSocket 이용해서 간단한 에코 서버 만들려다가 다음 에러가 뜨셨당!


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


LNK2001___endthreadex.jpg

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:

  1. Go to Project Settings and select the 'C/C++' tab.
  2. Select 'Code Generation' in Category.
  3. 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++

 
출처 혀니블로그 | 혀니
원문 http://blog.naver.com/kkwwhh7/110019172057
VC 단축키 및 주석 매크로
 

[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이란 파일이 뜨죠?

아래와 같이 코드를 복사해 넣습니다.
Sub Comment()
'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이란 파일이 뜨죠?

아래의 코드를 또 복사해 넣습니다.

Sub UnComment()
'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++

버젼: 1549
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++

CString ↔ int
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;
}
반응형

About

by 쑤기c

반응형