'분류 전체보기'에 해당되는 글 144건

7에서 컴파일 한 프로그램이 xp에서 mdb파일을 열지 못하는 문제 발생.

7 sp1이후 ADO관련 모듈에 변화가 생겨 하위호환성이 깨진듯 하다.(http://support.microsoft.com/kb/2640696)

업데이트 셋업파일을 받아야 하는데 윈도우가 정품이 아니라 받지 못했다. -_-;

다행히 수동으로 하는 방법이 있었다.


  • Msado60_Backcompat_i386.tlb (http://download.microsoft.com/download/6/4/3/64318ED2-7E18-4A5C-80E2-9BDA0DF02DB3/msado60_Backcompat_i386.tlb)
  • msado60_Backcompat_i386.tlb

  • 일단은 32bit만 한다 64비트도 있다

    일단 C:\Program Files\Common Files\System\ado에 다운 받는다.


    커멘드창을 실행하고  

    C:\Program Files\Common Files\System\ado>  이렇게 실행 위치를 바꾸고

    %windir%\Microsoft.NET\Framework\v4.0.30319\regtlibv12 msado60_Backcompat_i386.tlb


    그럼 바로 요런 메세지가 뜰것이다

    Registration of msado60_Backcompat_i386.tlb successful.

     

    그렇다면 레지스트

    리를 확인해보자

    HKEY_CLASSES_ROOT\TypeLib\{0C0FF45D-87C8-4333-9075-3D9B4D64F9FC}\6.0\0\win32

     

    데이터위치가

    C:\Program Files\Common Files\System\ado\msado60_Backcompat_i386.tlb 이렇게 되어있는지 확인한다.

     

    여기까지 됐다면 당신은 성공한것이다 그럼 계속 아래 글대로 따라해보기 바란다.

     

    stdafx.h에서 바꾸란다.

    #import! "msado15.dll" no_namespace rename("EOF","EndOfFile")요런걸

    #import! "msado60_Backcompat.tlb" no_namespace rename("EOF","EndOfFile")게 바꾸란다 


    Msado60_Backcompat_i386.tlb 파일을

    비쥬얼 스튜디오에 추가시킨다


    //#import! "c:\program files\common files\system\ado\msado15.dll" rename ("EOF","adoEOF") no_namespace
    #import! "C:/Program Files/Common Files/System/ado/msado60_Backcompat_i386.tlb" no_namespace rename("EOF","EndOfFile")

    그리고 나는 이렇게 바꿨다.

     



     그랬더니 빌드가 되면서 에러가 뜬다.

     

    _RecordsetPtr 에 멤버 변수가 바꿨다고 에러가 뜬다

     

    adoEOF---->> EndOfFile 로 바꿨다고 나온다

    이렇게 하고 빌드했더니 이제 잘된다..


    출처: http://blog.daum.net/cjp777/1

    'etc' 카테고리의 다른 글

    DIR vs PATH  (0) 2015.01.28
    WDK 샘플 설치 삽질기  (0) 2013.07.28
    FTP vs HTTP  (0) 2011.04.14
    파일날짜 변경 시점  (0) 2010.07.09
    MSComm32.ocx 라이센스 등록  (0) 2010.06.18
    블로그 이미지

    란마12

    ,

    원격 디버깅

    tool/VS10 2012. 7. 10. 20:21

    Visual Studio 2008을 설치했다면 C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger\x86\에 가면 있을 것이다. 64bit x64 폴더에 있을 것이다실행파일은 msvsmon.exe이다.

     

    프로그램을 실행할 PC(test pc)에 디버깅 모니터 툴을 설치한다없다면 위에 x86 폴더나

    x64폴더를 컴퓨터 환경에 맞게 그대로 복사해도 된다.

     


     * 원격 디버깅 시작

     

    프로그램 소스 중 멈출 곳 바로 위에 __debugbreak() 함수를 넣어준다.

      (__debugbreak() 함수는 브레이크 포인트를 걸은 것과 같은 효과를 지닌다.)

       컴파일하고 실행할 준비를 한다.




    Visual Sutdio 원격 디버깅 모니터를 실행한다.

    Visual Studio 원격 디버깅 모니터 툴 >> 도구 >> 옵션에 가자.

    인증 안 함(네이티브 전용)을 선택

    모든 사용자가 디버깅할 수 있도록 허용에 체크

    최대 유휴 시간() 0으로 설정한다.

     


    [참고] Windows XP SP2 이상에서는 원격 디버깅 모니터를 실행할 경우 '네트워크 액세스: 로컬 계정에 대한 공유 및 보안' 로컬 보안 정책 옵션이 '게스트 전용 - 로컬 사용자를 게스트로 인증'으로 설정되어 있으므로 Visual Studio 원격 디버깅 모니터에서 응용 프로그램을 디버깅할 수 없습니다. 이것은 로컬 보안 설정' 관리도구에서 구성할 수 있습니다.' 라는 경고가 뜬다.

    이를 풀기 위해서는 '제어판-관리도구-로컬보안정책'을 실행한 후, '로컬정책-보안옵션' 항목 중 '네트워크 액세스: 로컬 계정에 대한 공유 및 보안' 항목의 값을 '일반 - 로컬 사용자를 그대로 인증'으로 바꿔주면 된다.





      



    이제 프로그램을 실행하면 위와 같이 오류 관련 경고 윈도우가 뜬다.

     

    디버깅할 PC에 Visual Studio 2008(이하 VS2008라 칭함)로 가자

     



    도구 >> 프로세스에 연결에 들어가자.

    전송에 원격(네이티브 전용인증 안 함)으로 설정한다.

    정자에 디버깅하려고 하는 PC IP를 적는다.

    이제 사용 가능한 프로세스에 디버깅 할 프로세스를 선택하고 연결을 누른다.

    그리고 나서 아까 오류 관련 윈도우 경고 창이 뜬 곳에서 보내지 않음을 누른다.

     




    중단을 누르고 재미난 디버깅의 세계에 빠져들어 보자.

     

     

    실행되는 PC에 운영체제가 Vista인 경우

     

    Vista에서 오류 보고 윈도우가 안 뜰 수도 있고뜨더라도 프로그램이 종료되는 상황이 발생할 것이다예를 들어서 DLL이나 Service 프로그램을 디버깅할 때 말이다하지만 걱정하지 마시길~ Vistavsjitdebugger.exe 을 시스템 폴더(system32)에 설치하고 그 뒤에 vsjit.reg 파일을 레지스트리에 등록하면 된다그러면 아래와 같은 오류 보고 창에

      프로그램 디버그 항목이 하나 더 뜨는데 그것을 누르면 된다.



     
     VS2008
    에서 도구 >> 프로세스에 연결이 안될 수 있는데 그럴 때는 Visual Studio 원격 디버깅 모니터 툴을 관리자 권한으로 실행해야 한다그리고 해당 PC에 네트워크 연결이 안될 경우에는 방화벽 옵션을 해제하면 된다.

      

    * Tip

     

     -  __debugbreak() 함수 대신에 getchar(), Sleep() 등을 사용해서 VS2008에서 attach를 할 수 있도록 해 주면 간편하게 원격 디버깅을 할 수 있다.


    출처: http://blog.daum.net/jangbi/16474779

    블로그 이미지

    란마12

    ,

    const

    language/C/C++ 2012. 5. 21. 16:11

    void main(void)

    {

        const int a = 1;    // a에 대해서 상수로 보호

        //a = 3;        // Compile Error C3892: 'a' : const인 변수에 할당할 수 없습니다.

     

        int const a2 = 1;   // a2에 대해서 상수로 보호

        //a2 = 3;       // Compile Error C3892: 'a2' : const인 변수에 할당할 수 없습니다.

     

        const int *b = NULL;    // *b에 대해서 상수로 보호

        b = &a;

        //*b = 1;       // Compile Error C3892: 'b' : const인 변수에 할당할 수 없습니다.

     

        int const *c = NULL;    // *c에 대해서 상수로 보호

        c = &a;

        //*c = 1;       // Compile Error C3892: 'c' : const인 변수에 할당할 수 없습니다.

     

        int aa = 2;


        int* const d = &aa;     // d에 대해서 상수로 보호

        //d = &aa;      // Compile error C3892: 'd' : const인 변수에 할당할 수 없습니다.

        *d = 3;

     

        const int* const e = &aa;   // *e와 e에 대해서 상수로 보호

        //e = &aa;      // Compile error C3892: 'e' : const인 변수에 할당할 수 없습니다.

        //*e = 5;       // Compile error C3892: 'e' : const인 변수에 할당할 수 없습니다.

     

        int const* const f = &aa;   // *f와 f에 대해서 상수로 보호

        //f = &aa;      // Compile error C3892: 'f' : const인 변수에 할당할 수 없습니다.

        //*f = 5;       // Compile error C3892: 'f' : const인 변수에 할당할 수 없습니다.

     

        printf( "b = %d\n", *b );

        printf( "c = %d\n", *c );

        printf( "d = %d\n", *d );

        printf( "e = %d\n", *e );

        printf( "f = %d\n", *f );

    [출처] [c/c++] const 위치에 따른 상수 보호 범위|작성자 슈퍼베리코더



    int nTmp1 = 0;

    int nTmp2 = 0;


    const int* pnConst1 = 0;

    pnConst1 = &nTmp1; 

    *pnConst1 = 0; //err


    int* const pnConst2 = 0;

    pnConst2 = &nTmp1; //err

    *pnConst2 = 0;


    const int* const pnConst3 = 0;


    const int& rnConst1 = nTmp1;

    rnConst1 = 0; //err

    rnConst1 = nTmp2; //err


    int& const rnConst2 = nTmp1; //const 무의미?

    rnConst2 = 0;

    rnConst2 = nTmp2;



    const int& MyClass::foo(const int& a_rn) const;

    마지막 const는 this를 다음과 같이 만듬.

    const MyClass * const this;

    즉, this->var = xxx; //err

    블로그 이미지

    란마12

    ,

    댓글로 문제점이나 불편한 점들을 적어주십시오.

     

    - 즐겨찾기 폴더

    - 폴더경로 변경 시 기존 선택됐던 파일정보 초기화

    'project > 똘똘 플레이어' 카테고리의 다른 글

    사용법  (0) 2012.04.10
    블로그 이미지

    란마12

    ,

    작성중...

    'project > 똘똘 플레이어' 카테고리의 다른 글

    개선 예정 사항  (0) 2012.04.10
    블로그 이미지

    란마12

    ,

    1. 시작 ? 모든 프로그램 ? Windows Virtual PC 를 클릭하여 실행합니다.

    2. Windows XP mode 항목을 마우스 우측 버튼 클릭 후 [설정] 버튼을 클릭합니다.

    3. [통합 기능] 메뉴를 클릭 후 오른쪽 화면에 [시작할 때 사용] 의 체크를 해제합니다.

    4. [닫기] 메뉴를 클릭 후 오른쪽 화면에 [종료] 로 선택합니다.

    5. [확인] 버튼을 클릭합니다.

    6. Windows XP mode 를 실행합니다.

    7. 상단 탭 메뉴 중 [작업] ? [다시 시작] 메뉴를 클릭합니다.

    8. 시스템이 재 부팅되는 과정에서 F8 키를 여러 차례 눌러주시면 고급 옵션 메뉴가 활성화 되고 그 중 [안전 모드] 를 선택한 후 Enter 키를 누릅니다

    9. 안전 모드로 부팅이 진행된 후 Windows 로그온 창이 실행되면 사용자 이름에 입력된 XPMUser 은 제거한 후 Administrator 를 입력한 후 [확인] 버튼을 클릭합니다.

    10. 안전모드에서 작업을 계속할 것인지 메시지가 나타나면 [예] 를 눌러 실행합니다.

    11. 시작 ? 제어판 ? [사용자 계정] 을 클릭합니다.

    12. XPMUser 계정을 클릭합니다.

    13. 암호 제거 메뉴를 클릭합니다.

    14. 제거가 모두 완료되었다면 Windows XP 모드를 종료합니다.

    15. 위 1~5 번 단계를 다시 한번 설정합니다. (통합 기능 ? 시작할 때 사용 에 체크 설정 및 최대 절전 모드 설정)

    이후 XPMUser 계정을 별도의 암호 입력 없이 로그인이 가능합니다.

    http://answers.microsoft.com/ko-kr/windows/forum/windows_7-windows_programs/windows-xp-mode-%EC%97%90%EC%84%9C/972ef26f-b656-4099-b15b-e05df202e7f6
    블로그 이미지

    란마12

    ,

    doxygen

    tool 2011. 12. 6. 13:23
    + http://www.stack.nl/~dimitri/doxygen/download.html

    + 한글 설정
     - expert 탭에서,
           Project 항목
             DOXYFILE_ENCODING : EUC-KR
             OUTPUT_LANGUAGE : Korean-en
            Input 항목 
              INPUT_ENCODING : CP949
      - Error: failed to translate characters from CP949 to UTF-8: check INPUT_ENCODING
        오류가 발생하는 파일을 메모장에서 UTF-8로 저장한다.

    + 매크로
     - 도구 -> 매크로 -> 매크로 IDE 에 스크립트 추가
     - 단축키 추가

    'tool' 카테고리의 다른 글

    7z 압축파일 자동풀기 실행프로그램 만들기  (0) 2014.10.17
    탐색기에서 현재 경로 커맨드창으로 열기  (0) 2014.04.23
    crash dump  (0) 2011.11.11
    WinDbg  (0) 2011.01.30
    VC .Net에서 산출물(output/intermediate) 관리하기  (0) 2010.12.23
    블로그 이미지

    란마12

    ,

    Which one is better to use among the below statements in c:

    static const int var=5; 

    or

    #define var 5 



















    It depends on what you need the value for.
    1. static const int var = 5;
    2. #define var 5
    3. enum { var = 5 };

    Ignoring issues about the choice of name, then:

    • If you need to pass a pointer around, you must use (1).
    • Since (2) is apparently an option, you don't need to pass pointers around.
    • Both (1) and (3) have a symbol in the debugger's symbol table - that makes debugging easier. It is more likely that (2) will not have a symbol, leaving you wondering what it is.
    • (1) cannot be used as a dimension for arrays at global scope; both (2) and (3) can.
    • (1) cannot be used as a dimension for static arrays at function scope; both (2) and (3) can.
    • Under C99, all of these can be used for local arrays. Technically, using (1) would imply the use of a VLA (variable-length array), though the dimension referenced by 'var' would of course be fixed at size 5.
    • (1) cannot be used in places like switch statements; both (2) and (3) can.
    • (2) can change code that you didn't want changed because it is used by the preprocessor; both (1) and (3) will not have unexpected side-effects like that.
    • You can detect whether (2) has been set in the preprocessor; neither (1) nor (3) allows that.

    So, in most contexts, prefer the 'enum' over the alternatives. Otherwise, the first and last bullet points are likely to be the controlling factors - and you have to think harder if you need to satisfy both at once.

    If you were asking about C++, then you'd use option (1) - the static const - every time.

    http://stackoverflow.com/questions/1674032/static-const-vs-define-in-c

    'language > C/C++' 카테고리의 다른 글

    클래스내의 배열변수의 크기를 상수로 지정하고 싶을 때  (0) 2014.12.11
    const  (0) 2012.05.21
    2차원 배열이 더블포인터인가?  (0) 2010.11.10
    메모리오류 시 디버거가 설정해 주는 값  (0) 2010.09.17
    지침  (0) 2010.09.17
    블로그 이미지

    란마12

    ,

    crash dump

    tool 2011. 11. 11. 12:05

    + windows 7

    C:\Users\yonjh\AppData\Local\CrashDumps 경로에 '전체 덤프' 파일 쌓음
    미니덤프는 DumpType을 1로

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps]
    "DumpFolder"=hex(2):25,00,4c,00,4f,00,43,00,41,00,4c,00,41,00,50,00,50,00,44,\
      00,41,00,54,00,41,00,25,00,5c,00,43,00,72,00,61,00,73,00,68,00,44,00,75,00,\
      6d,00,70,00,73,00,00,00
    "DumpCount"=dword:00000010
    "DumpType"=dword:00000002
    "CustomDumpFlags"=dword:00000000

    'tool' 카테고리의 다른 글

    탐색기에서 현재 경로 커맨드창으로 열기  (0) 2014.04.23
    doxygen  (0) 2011.12.06
    WinDbg  (0) 2011.01.30
    VC .Net에서 산출물(output/intermediate) 관리하기  (0) 2010.12.23
    vs2008 프로젝트속성 상속  (0) 2010.09.27
    블로그 이미지

    란마12

    ,

    메모리 누수 체크

    library/CRT 2011. 10. 27. 19:49

    #define _CRTDBG_MAP_ALLOC_NEW
    #include <stdlib.h>
    #include <crtdbg.h>

    #ifdef _DEBUG
    #define new new(_CLIENT_BLOCK, __FILE__, __LINE__)
    #endif

    void ExitHandler(){
      _CrtDumpMemoryLeaks();
    }

    void main(){
    #ifdef _DEBUG
      _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
     //_crtBreakAlloc = 129;
     //_CrtSetBreakAlloc(132);
     atexit(&ExitHandler);
    #endif
    }

    다음과 같이 누수가 보고됐다면

    Detected memory leaks!
    Dumping objects ->
    {994} normal block at 0x00DA55A0, 8 bytes long.
     
    Data: <        > CD CD CD CD CD CD CD CD
    {993} normal block at 0x00DA5558, 8 bytes long.
     
    Data: <        > CD CD CD CD CD CD CD CD
    {992} normal block at 0x00DA54C8, 8 bytes long.
     
    Data: <        > CD CD CD CD CD CD CD CD


    중괄호 안의 숫자, 예를 들어 {994} 지점에서 중단점을 설정

    _crtBreakAlloc = 994; 또는 _CrtSetBreakAlloc(994);


    - stl변수가 전역으로 초기화 되면 릭이 발생된 것으로 표시됨.
      가능하면 전역으로 쓰지말고 함수의 정적변수로 사용.

    - vld쓰다가 최신 버전으로 교체했는데 멀티스레드에서 com사용할 때 문제가 있는 듯.

    - 메인 프로세스에서 참조하고 있는 dll library내의 누수는 잡지 못함.(dll내에서 초기화시 위와 같은 체크준비를 똑같이 해야 함)




    'library > CRT' 카테고리의 다른 글

    CRT(C Runtime) Debugger사용방법  (0) 2014.05.14
    컴파일 옵션  (0) 2013.02.22
    errno  (0) 2011.01.08
    유니코드를 위한 함수  (0) 2011.01.08
    시간과 날짜와 관련된 라이브러리 함수들  (0) 2010.12.15
    블로그 이미지

    란마12

    ,