2012-08-27 5 views
2

저는 MinGW를 사용하는 코드 블록을 사용하고 있으며 얼마 동안 작업해온 코딩 프로젝트가 있습니다. 내가 사용 해본 프로젝트는 콘솔 어플리케이션이었고, 디버깅 기능은 콘솔 출력에 의존합니다.디스플레이 콘솔과 win32 GUI

그러나 최근에는 사용자가 파일을 쉽게 열 수 있도록 열린 파일 상자를 불러 오기 위해 'GetOpenFileName()'창 함수를 구현하려고했습니다. 그러나 콘솔 응용 프로그램에서 헤더가 포함 된 프로젝트를 사용할 때 MinGW 컴파일러는 함수를 찾을 수없는 것처럼 동작합니다. 그러나 프로젝트를 win32 GUI로 변경하면 컴파일러가 함수를 찾을 수 있습니다. (왜 그런지는 완전히 이해할 수 없지만 그게 나입니다.)

문제는 다음과 같습니다. 콘솔에 디버그 정보를 출력하려고했지만 응용 프로그램이 win32 GUI이고 콘솔이 표시되지 않아 디버그 정보를 볼 수 없어 전환 할 수 없습니다. 콘솔 응용 프로그램으로 돌아가거나 윈도우 열기 파일 상자 코드가 컴파일되지 않습니다. 콘솔을 표시하고 프로젝트가 Windows GUI 코드를 올바르게 컴파일하도록하려면 어떻게합니까?

디버깅 기능을 변경하거나 다른 클래스를 사용할 수 없습니다. 모든 클래스에 역 추적 오류를 지원하고 43 개 이상의 파일이 있으며 대부분 디버그 기능을 사용합니다.

+1

콘솔 응용 프로그램에 ''을 (를) 포함하면 계속 작동합니다. 당신은 절대적으로 콘솔이 필요하고, 콘솔을 가질 수 없다면, 'AllocConsole'이 있습니다. – chris

+0

"포함 된 헤더가 포함 된 콘솔 응용 프로그램에서 프로젝트를 사용할 때 을 포함했습니다."- 어떤 이상한 이유로 프로젝트가 win32 GUI로 설정되지 않으면 컴파일되지 않습니다. 나는 그것이 코드 블록 일이라고 생각하고있다. 'AllocConsole'은 어떻게 사용합니까? printf 등을 자동으로 표시합니까? 이것이 답변이라면 포인트로 게시해야합니다. – user1433767

+0

기록을 위해, 나는 이것에 대해 코드 블록 포럼에 문의하려고 시도했지만 ... 그들은 정말로 질문에 답변하는 것을 좋아하지 않습니다. – user1433767

답변

3

그래서 문제는 프로젝트 유형이 아니라 설정/컴파일러 옵션으로 인해 나타나는 것으로 나타납니다. 컴파일러는 함수 선언을 잘 찾을 수 있지만 링커는 정의를 찾을 수 없기 때문에 불평합니다.

이 문제를 해결하려면 올바른 라이브러리 (MSDN 설명서에 명시된대로 comdlg32.lib)에 연결해야합니다. 프로젝트 메뉴로

  1. 가서 이 옵션 빌드를 클릭 :


    CodeBlocks, 당신은이 작업을 수행 할 수 있습니다.

  2. 링커 설정 탭을 클릭하십시오.
  3. 클릭 을 추가하십시오.
  4. comdlg32을 입력하고 확인을 누릅니다.
  5. 변경 내용을 저장하고 끝내려면 확인을 클릭하십시오.

프로젝트를 빌드 할 때 이제 해당 라이브러리에 연결됩니다. 해당 라이브러리에 연결하는 모든 프로그램, 프로젝트 또는하지를 원하는 경우에, 당신은 대신 다음 단계와 1 단계 대체 할 수있는 다음 설정 메뉴로

  1. 이동을하고 컴파일러와 디버거을 클릭합니다.

나머지는 동일하지만 글로벌 기준입니다.당신은 원시 명령 줄 건물을 사용하는 경우 그것은 가치가 무엇인지에 대한


, 당신은 같은 효과를 생산하는 -lcomdlg32 옵션을 추가 할 수 있습니다.

+1

설명 해 주셔서 감사합니다. 문제가 해결되었습니다. – user1433767

2

GUI 응용 프로그램 내에서 콘솔을 만들려면 AllocConsole을 사용하십시오.

+0

사실 OP에 GUI가 있지만 실제로 winapi 함수를 호출하는 것처럼 보이지 않습니다. – chris

관련 문제