레이블이 프로그래밍인 게시물을 표시합니다. 모든 게시물 표시
레이블이 프로그래밍인 게시물을 표시합니다. 모든 게시물 표시

2010년 5월 24일 월요일

VS2008에서 Non-static Member Function Pointer 쓰는 방법

첨부링크에 자세하게 설명되어 있다. FAQ 형태의 설명은 아래링크를 참고할 수 있다.
class Adder
{
    public:
    int Add(int x, int y) const
    {
        return x + y;
    }
};
Adder adder;
typedef int (Adder::*MemberFunctionPointerType)(int x, int y) const;
MemberFunctionPointerType mfp = &Adder::Add;
int result = (adder.*mfp)(4, 5);

DLL로 인한 R6034 Runtime Error

1. 여러 DLL을 쓰다보면 VS2008에서 R6034 runtime error가 생기기도 한다.
자세한 설명은 위의 첨부링크에 있다. 이때는 문제를 일으키는 DLL 링크시 "msvcrt.lib"를 제거하도록 하자. 속성 -> 구성 속성 -> 링커 -> 입력 -> 특정 라이브러리 무시에 "msvcrt.lib"를 집어 넣으면 된다. 물론 "msvcrt.lib"를 제거해서 link error가 발생하면 원래대로 돌리고 다른 방법을 찾아야 한다.

2. 혹은, DLL을 manifest를 사용하지 않고 읽어들인 경우 발생할 수 있다.
이에 대한 해결책은 http://www.codeproject.com/kb/cpp/vcredists_x86.aspx에 있다.

3. VS98을 VS2008로 변환해서 생긴 문제라면 귀찮은 과정을 반복해야 한다.

- VS98과 동일한 project name으로 VS2008 project를 만든다.
- 다음으로 VS98에 있는 모든 헤더(header)와 소스(source) 파일을 VS2008로 옮긴다.
- VS2008에서 옮긴 헤더(header)와 소스(source) 파일을 등록한다.
- 다음에는 리소스(resource)를 옮겨야 한다. VS98의 resource folder인 "res"를 VS2008로 이동한다.
- VS98 project를 VS2008로 변환할 때 생긴 *.rc, *.aps 파일을 새롭게 만든 VS2008 project에 덮어쓴다. 당연히 resource.h도 가져와야 한다.

VS2008에서 LNK2019 해결방법

링커에러는 일반적으로 해결이 힘들다. 첨부링크를 따라가서 하나하나 확인해 보자.


2. template class 안에서는 friend 선언을 사용하지 말자.
어떤 경우 LNK2019가 발생한다. 이 경우, 그냥 friend 선언을 삭제하면 된다.

2010년 5월 22일 토요일

VS98에서 VS2008로 변환시 Compiler Error 대처법

   - <iostream>, <fstream> 으로 변경
   - using namespace std 선언

2. ios::nocreate
   - ios::_Nocreate으로 변경
   혹은
   - ios_base::in으로 변경(입력으로 열기로 단순 설정)

3. istream::eatwhite
   - skipws를 사용
   - 하지만 파일끝에 EOF(End of File)이 있으면 assertion이 생기니 실행전에 EOF 여부를 반드시 확인해야 함
[예제]
ifstream file("data.txt");
file >> skipws;

4. 현재 코드 페이지에 표시할 수 없는 문자
   - #pragma warning(disable:4819) 사용

5. char *는 LPTSTR로 변경

6. LPTSTR에서 char *로 변환 불가시
   - 프로젝트 속성에 가서 구성 속성 -> 일반 -> 문자 집합을 '멀티바이트 문자 집합 사용'을 선택

VS98 사용자가 VS2008로 전환하는 법

다음 링크에 삼성전자에서 만든 "Visual Studio 2008로 가는 길"이라는 좋은 자료가 있다.

VS2008 or VS2010에서 속도 최적화 방법

Debug에서는 최적화를 설정하면 안된다.

1. 속성 > 구성 속성 > 일반에서 옵션 설정
   - 전체 프로그램 최적화: 링크 타임 코드 생성 사용

2. 속성 > 구성 속성 > C/C++ > 최적화에서 옵션 설정
   - 최적화: 속도 최대화
   - 인라인 함수 확장: 적합한 것 모두 확장
   - 내장 함수 사용: 예
   - 크기 또는 속도: 코드 속도 우선
   - 프레임 포인터 생략: 예
   - 파이버 안전 최적화 사용: 아니오
   - 전체 프로그램 최적화: 예

3. 속성 > 구성 속성 > 링커 > 최적화에서 옵션 설정
   - 링크 타임 코드 생성: 링크 타임 코드 생성 사용
   - 참조: 참조하지 않는 데이터 제거 (VS2010: 예)
   - COMDAT 정리 사용: 중복 COMDAT 제거 (VS2010: 예)

2010년 5월 20일 목요일

VS2008에서 OpenMP 사용

병렬 프로그래밍을 하려면 어쩔 수 없이 VS2008을 써야 하는구나.

아래는 참고링크:
- http://www.openmp.org (모든 자료 존재)
- http://himskim.egloos.com/3261640 (쉬운 한글 설명)

아래는 MSDN에서 찾은 설정방법:
Visual Studio 개발 환경에서 이 컴파일러 옵션을 설정하려면 프로젝트의 속성 페이지 대화 상자를 엽니다. 자세한 내용은 방법: 프로젝트 속성 페이지 열기를 참조하십시오.

1. 구성 속성 노드를 확장합니다.
2. C/C++ 노드를 확장합니다.
3. 언어 속성 페이지를 클릭합니다.
4. OpenMP 지원 속성을 수정합니다.