728x90
반응형
728x90
반응형
728x90
반응형
사용자 삽입 이미지
사용자 삽입 이미지







http://www.infopub.co.kr/pds/group_pds/download.asp?pdsid=1&rec_no=745&sub_no=0


...무더위를 잊기 위해서
...예제를 씹어 먹어 보아야 겠다.
...
728x90
반응형

'C# .Net' 카테고리의 다른 글

C# 버전(version)  (0) 2024.08.28
c# ref 예제  (0) 2007.06.19
c# foreach 예제  (0) 2007.06.13
줄번호 넣기 (Adding line numbers to text) C#  (0) 2007.06.08
C# 난수 (Random Number)  (0) 2007.04.09
728x90
반응형
728x90
반응형

'HTML XML' 카테고리의 다른 글

이미지 비율 유지 방법 : html , img  (0) 2024.10.04
XML 예약 문자  (0) 2007.08.17
MSXML 버전...  (0) 2007.04.25
Microsoft XML Notepad 2007  (0) 2007.04.24
728x90
반응형

윈도우즈에서 갑자기 CPU 점유율이 증가해서

그 원인을 작업 관리자 등으로 찾다 보면,

TrustedInstaller.exe 라는 프로세스(Process)가 원인일 경우가 있습니다.

그럴 경우의 구글링을 통하여 찾은 해결책(꽁수) 중 하나를 소개합니다.

1) Process Explorer 라는 프로그램을 Microsoft 싸이트에서 다운받는다. (하단 링크 참조)

http://technet.microsoft.com/ko-kr/sysinternals/bb896653%28en-us%29.aspx

http://download.sysinternals.com/files/ProcessExplorer.zip


2) 다운로드 받은 압축파일(ProcessExplorer.zip)을 풀면 실행 프로그램 2개가 보입니다.

   procexp.exe : 32비트 윈도우즈용 프로그램

   procexp64.exe : 64비트 윈도우즈용 프로그램

      본인의 윈도우즈가 32비트인지 64비트인지 모르면, 제어판에서 시스템 정보를 보거나,  명령창(명령 프롬프트)에서 systeminfo를 입력합니다.

 

3) 본인의 윈도우즈에 맞는 실행 프로그램을 선택한 후, (procexp.exe 또는 proceexp64.exe)

   마우스 오른쪽 버튼을 눌러 관리자 권한으로 실행을 선택하여 실행합니다. 

4) 프로그램이 실행되면 프로세스의 목록이 보이며,

    그 중 TrustedInstaller.exe 라는 프로세스를 찾습니다.

 5) 마우스 우측 버튼을 눌러 팝업 메뉴를 보이게 한 후, Suspend 메뉴를 선택합니다.

    ( Suspend 는 프로세스 작동을 일시중지 시킵니다. )



물론 꽁수[trick]이므로, 권장 사항은 아닙니다.

하지만 CPU 점유율 때문에 작업이 어렵다면 한번 시도해 보시기 바랍니다.

도움이 되셨다면 하단 광고 한번 눌러주시면 대단히 감사하겠습니다. 건강하세요 ^^

728x90
반응형
728x90
반응형
728x90
반응형

'C# .Net' 카테고리의 다른 글

C# 버전(version)  (0) 2024.08.28
c# ref 예제  (0) 2007.06.19
c# foreach 예제  (0) 2007.06.13
Inside C# 예제 파일  (0) 2007.06.12
C# 난수 (Random Number)  (0) 2007.04.09
728x90
반응형
출처 : MSDN
http://j2doll.tistory.com/113



현재 윈도우즈 버전 얻는 코드입니다.
주 용도는 프로그램이 지원 가능한 환경에서만 실행하게 한다거나,
커스텀한 프로그램 설치 시에 플랫폼 버전별로 다른 설치를 하게 한다거나
하는 용도로 활용될수 있습니다.
그리고, 아래 코드는 기본 예제에서 약간만 수정 하였습니다.
위 프로그램은 실행 파일입니다.


 

 

#include <windows.h>

#include <stdio.h>

#include <tchar.h>

 

#define BUFSIZE 80

 

#define SM_SERVERR2            89

 

typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);

 

int _tmain(int argc, _TCHAR* argv[])

{

      OSVERSIONINFOEX osvi;

      SYSTEM_INFO si;

      PGNSI pGNSI;

      BOOL bOsVersionInfoEx;

 

      ZeroMemory(&si, sizeof(SYSTEM_INFO));

 

      // Try calling GetVersionEx using the OSVERSIONINFOEX structure.

      // If that fails, try using the OSVERSIONINFO structure.

 

      ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));

      osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

 

      if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )

      {

            osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);

            if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )

                  return FALSE;

      }

 

 

      switch (osvi.dwPlatformId)

      {

            // Test for the Windows NT product family.

 

      case VER_PLATFORM_WIN32_NT:

 

            // Test for the specific product.

 

            if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 )

            {

                  if( osvi.wProductType == VER_NT_WORKSTATION )

                        _tprintf (_T("Microsoft Windows Vista "));

                  else

                        _tprintf (_T("Windows Server \"Longhorn\" "));

            }

 

            if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )

            {

                  // Use GetProcAddress to avoid load issues on Windows 2000

                  pGNSI = (PGNSI) GetProcAddress(

                        GetModuleHandle(_T("kernel32.dll")),

                        "GetNativeSystemInfo");

                  if(NULL != pGNSI)

                        pGNSI(&si);

 

                  if( GetSystemMetrics(SM_SERVERR2) )

                        _tprintf( _T("Microsoft Windows Server 2003 \"R2\" "));

                  else if( osvi.wProductType == VER_NT_WORKSTATION &&

                        si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)

                  {

                        _tprintf( _T("Microsoft Windows XP Professional x64 Edition "));

                  }

                  else

                        _tprintf (_T("Microsoft Windows Server 2003, "));

            }

 

            if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )

            {

                  _tprintf (_T("Microsoft Windows XP "));

            }

 

            if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )

            {

                  _tprintf (_T("Microsoft Windows 2000 "));

            }

 

            if ( osvi.dwMajorVersion <= 4 )

            {

                  _tprintf (_T("Microsoft Windows NT "));

            }

 

            // Test for specific product on Windows NT 4.0 SP6 and later.

            if( bOsVersionInfoEx )

            {

                  // Test for the workstation type.

                  if ( osvi.wProductType == VER_NT_WORKSTATION &&

                        si.wProcessorArchitecture!=PROCESSOR_ARCHITECTURE_AMD64)

                  {

                        if( osvi.dwMajorVersion == 4 )

                             _tprintf ( _T("Workstation 4.0 ") );

                        else if( osvi.wSuiteMask & VER_SUITE_PERSONAL )

                             _tprintf ( _T("Home Edition ") );

                        else _tprintf ( _T("Professional ") );

                  }

 

                  // Test for the server type.

                  else if ( osvi.wProductType == VER_NT_SERVER ||

                        osvi.wProductType == VER_NT_DOMAIN_CONTROLLER )

                  {

                        if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==2)

                        {

                             if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_IA64 )

                             {

                                   if( osvi.wSuiteMask & VER_SUITE_DATACENTER )

                                         _tprintf ( _T("Datacenter Edition for Itanium-based Systems") );

                                   else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )

                                         _tprintf ( _T("Enterprise Edition for Itanium-based Systems") );

                             }

 

                             else if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )

                             {

                                   if( osvi.wSuiteMask & VER_SUITE_DATACENTER )

                                         _tprintf ( _T("Datacenter x64 Edition ") );

                                   else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )

                                         _tprintf ( _T("Enterprise x64 Edition ") );

                                   else _tprintf( _T("Standard x64 Edition ") );

                             }

 

                             else

                             {

                                   if( osvi.wSuiteMask & VER_SUITE_DATACENTER )

                                         _tprintf ( _T("Datacenter Edition ") );

                                   else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )

                                         _tprintf ( _T("Enterprise Edition ") );

                                   else if ( osvi.wSuiteMask == VER_SUITE_BLADE )

                                         _tprintf ( _T("Web Edition ") );

                                   else _tprintf ( _T("Standard Edition ") );

                             }

                        }

                        else if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==0)

                        {

                             if( osvi.wSuiteMask & VER_SUITE_DATACENTER )

                                   _tprintf ( _T("Datacenter Server ") );

                              else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )

                                   _tprintf ( _T("Advanced Server ") );

                             else _tprintf ( _T("Server ") );

                        }

                        else  // Windows NT 4.0

                        {

                             if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )

                                   _tprintf (_T("Server 4.0, Enterprise Edition ") );

                             else _tprintf ( _T("Server 4.0 ") );

                        }

                  }

            }

            // Test for specific product on Windows NT 4.0 SP5 and earlier

            else 

            {

                  HKEY hKey;

                  TCHAR szProductType[BUFSIZE];

                  DWORD dwBufLen = BUFSIZE * sizeof(_TCHAR);

                  LONG lRet;

 

                  lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,

                        _T("SYSTEM\\CurrentControlSet\\Control\\ProductOptions"),

                        0, KEY_QUERY_VALUE, &hKey );

                  if( lRet != ERROR_SUCCESS )

                        return FALSE;

 

                  lRet = RegQueryValueEx( hKey, _T("ProductType"), NULL, NULL,

                        (LPBYTE) szProductType, &dwBufLen);

                  RegCloseKey( hKey );

 

                  if( (lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE) )

                        return FALSE;

 

                  if ( lstrcmpi( _T("WINNT"), szProductType) == 0 )

                        _tprintf( _T("Workstation ") );

                  if ( lstrcmpi( _T("LANMANNT"), szProductType) == 0 )

                        _tprintf( _T("Server ") );

                  if ( lstrcmpi( _T("SERVERNT"), szProductType) == 0 )

                        _tprintf( _T("Advanced Server ") );

                  _tprintf( _T("%d.%d "), osvi.dwMajorVersion, osvi.dwMinorVersion );

            }

 

            // Display service pack (if any) and build number.

 

            if( osvi.dwMajorVersion == 4 &&

                  lstrcmpi( osvi.szCSDVersion, _T("Service Pack 6") ) == 0 )

            {

                  HKEY hKey;

                  LONG lRet;

 

                  // Test for SP6 versus SP6a.

                  lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,

                        _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Hotfix\\Q246009"),

                        0, KEY_QUERY_VALUE, &hKey );

                  if( lRet == ERROR_SUCCESS )

                        _tprintf( _T("Service Pack 6a (Build %d)\n"),

                        osvi.dwBuildNumber & 0xFFFF );        

                  else // Windows NT 4.0 prior to SP6a

                  {

                        _tprintf( _T("%s (Build %d)\n"),

                             osvi.szCSDVersion,

                             osvi.dwBuildNumber & 0xFFFF);

                  }

 

                  RegCloseKey( hKey );

            }

            else // not Windows NT 4.0

            {

                  _tprintf( _T("%s (Build %d)\n"),

                        osvi.szCSDVersion,

                        osvi.dwBuildNumber & 0xFFFF);

            }

 

            if ( osvi.wServicePackMajor != 0 )

            {

                  //  If no Service Pack has been installed, wServicePackMajor is zero.

                  _tprintf( _T(" Service Pack Version %d.%d"),

                        osvi.wServicePackMajor,

                        osvi.wServicePackMinor );

            }

 

            break;

 

            // Test for the Windows Me/98/95.

      case VER_PLATFORM_WIN32_WINDOWS:

 

            if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)

            {

                  _tprintf (_T("Microsoft Windows 95 "));

                  if (osvi.szCSDVersion[1]=='C' || osvi.szCSDVersion[1]=='B')

                        _tprintf(_T("OSR2 ") );

            }

 

            if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)

            {

                  _tprintf (_T("Microsoft Windows 98 "));

                  if ( osvi.szCSDVersion[1]=='A' || osvi.szCSDVersion[1]=='B')

                        _tprintf(_T("SE ") );

            }

 

            if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)

            {

                  _tprintf (_T("Microsoft Windows Millennium Edition\n"));

            }

            break;

 

      case VER_PLATFORM_WIN32s:

 

            _tprintf (_T("Microsoft Win32s\n"));

            break;

      }

 

      system( "pause" );

      return 0;

}

 

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.  

 


728x90
반응형

'C C++' 카테고리의 다른 글

overloading on the c++  (0) 2007.06.14
Dialog Units  (0) 2007.06.13
상수 포인터...  (0) 2007.05.17
최대한 잘라먹기(Maximal Munch)와 컴파일러(Compiler)  (2) 2007.05.16
클래스 win32_file_iterator  (0) 2007.05.11
728x90
반응형

출처  :c+gotchas

간단히 말해서

const shar *pci;

이런 것들인데, 이걸 사용하지 말라는 이야기가 주저리주저리
책에 나오는데...상수의 포인터는 l-type 처리 시에는 문제가 되니
사용하지 말자는 것이다.
 
추가하자면, c++에서는 const 함수 접근을 위한 mutable 이라는 예약어도 존재한다.
(http://yesarang.tistory.com/344)

728x90
반응형

'C C++' 카테고리의 다른 글

Dialog Units  (0) 2007.06.13
현재 윈도우즈 버전 얻기 예제  (0) 2007.05.19
최대한 잘라먹기(Maximal Munch)와 컴파일러(Compiler)  (2) 2007.05.16
클래스 win32_file_iterator  (0) 2007.05.11
TTOF2() 함수  (0) 2007.05.09
728x90
반응형

http://j2doll.tistory.com/109

소스 출처 : C++ gotchas! 및 Internet


 최대한 잘라먹기(Maximal Munch)는 컴파일러(compiler)의 파싱(parsing) 처리 방법 중 한가지 입니다.

컴파일러가 입력한 구문(syntax)을 토큰(token)으로 파싱하여 형태소 분석(lexical analysis)을 하는 과정에서, 가장 긴 토큰을 중심으로 나누어 의미를 두는 과정을 의미합니다.

 [이해가 되시면 당신은 천재! 하단의 글은 보실 필요 없습니다.]


 +++++p->*mp 


 상단의 코드는 C++ 언어로 작성된 코드입니다.

 컴파일러는 해당 코드를 독자적인 처리 방법으로 파싱을 합니다.

 물론 처리 후 컴파일 성공 또는 오류를 출력합니다.


그런데 상단의 코드에서 애매모호한(ambiguous) 부분이 많습니다.


컴파일러는 ->* 을

-> 와 * 으로 해석할수 도 있고,

->* 로 볼 수도 있습니다. 

[솔직히 책에서 설정한 예제가 좋지는 않습니다.]


다음 예제는 STL 로 작성된 코드입니다. 

 list<vector<string>> loves; 


위의 코드도 애매모호합니다.

꺽쇠 괄호(angle bracket)는 이동 연산자(shift operator) >> 로 해석될 수 있기 때문입니다. 

 list< vector<string> > loves; 


위와 같이 해주면 의미가 명확해 집니다. 

 [노란색 영역은 공란(space) 입니다.]


자, 이제 문제가 해결되었습니다!!


그런데... 항상 그런 것은 아닙니다!

일부 컴파일러는 컴파일러가 알아서(take care of it) 성공으로 처리합니다. 

Visual C++ 2005 같은 경우는 컴파일이 성공합니다. [이 글의 초안은 2007년에 작성되었습니다.]

What the F..?! 이제 대충 감이 오십니까?


 최대한 잘라먹기의 현실 세계의 문제점은

 '컴파일러의 종류와 버전(version)'마다

 최대한 잘라먹기를 처리하는 방법의 차이가 다르다는 것입니다!!

상단의 코드를  gcc 3.4.2 로 컴파일(Compile) 및 빌딩(Building)을 해봅시다. 
gcc 3.4.2를 포함하고 있는 Dev-C++ 를 써서 컴파일을 하면

역시 오류가 발생합니다.

사용자 삽입 이미지


그 외에 Dinkumware 에서 제공해주는 웹에서 해보는 컴파일을 해봅시다.

  http://www.dinkumware.com/exam/

  [참고로 이글의 초안은 2007년에 작성되었으며, 현재 exam 페이지는 폐쇄되었습니다]

  MINGW/GCC 에서 컴파일하면, 

sourceFile.cpp: In 

   function `int main(int, char**)':
sourceFile.cpp:9: `>>' 
   should be `> >' in template class name
sourceFile.cpp:12:2: warning: no newline at end of file

역시 오류가 발생합니다.

다음은 예제 코드를 C99 에서 컴파일하는 경우입니다.

 "sourceFile.c", line 9: error: 

          space required between adjacent ">" delimiters of nested template
          argument lists (">>" is the right shift operator)
      list<vector<string>> loves;
                        ^

"sourceFile.c", line 12: warning: 
          last line of file ends without a newline
  }
   ^

역시 오류입니다. (참고로 Visual C++6(STL98) 에서도 오류입니다)


[하지만, 필자는 최근에 g++ 4.8과 g++ 7.3으로 컴파일 해본 결과, 모두 컴파일에 성공하였습니다.]


이 정도 되면 코드의 버그를 정의하기 애매합니다. 

이것이 오류이다!!! 라고 딱 집어 말하기도 애매한 것이지요.


수년전 컴파일러 사용시 버그(bug)로 판명된 코드가 

최신 컴파일러에서는 버그가 아닌 것이 됩니다!!


하지만 이건 컴파일러 개발사 만의 문제는 아닙니다.


일부 언어는 코드를 작성시 매우 엄격한 구문을 강요합니다.

탭(tab), 공란(space), 줄바꿈(CR) 등에 대한 정의가 명확한 언어도 있으며, 애매모호한 언어도 있습니다. 

일례로, 파이썬(python)의 탭과 공란은 함수 및 루틴(routine) 정의에서 필수적이기에 자바(java)에서의 탭과는 비교할 수 없는 점이 있습니다.


 비야네 스트롭의 책으로 C++를 학습한 이들은 띄어쓰기 등을 문맥에서 읽어 낼수는 없습니다. 

 C++ 배우는 이들이나 컴파일러 개발사만을 매도하기는 문제가 있습니다. 

 [개발의 고수(guru)들은 상단의 이슈 사항을 다양한 경험을 살려서 알아서~~ 피해 갑니다. 

 하지만 모두가 고수는 아닙니다. 또한 문제의 해결은 일반적인 경우를 고려하여야 합니다.]


 끝으로 한마디 덭붙이면,

 구형 컴파일러에서 오류를 내는 방식이 반드시 잘못된 것은 아니라는 점입니다.

 애매모호한 코드(ambiguous code)를 오류 처리하는 것이 과연 잘못일까요?


 현실 세계에는 맞춤법을 무시한 다양한 관용어(Idiom)를 사용합니다. 

 언어는 변화하는 것이기에 맞춤법을 준용하는 것이 옳을 수도 있으며,

 유연한 관용어구를 사용하는 것이 옳을 수도 있습니다. 


 표준(standard)을 준용했다면 처리 방법에 대한 정답은 없습니다.

 표준이 설명해 주지 못한 부분은 표준 위원회(Committee)가 노력할 일이겠지요.


 어쨌든 이런 경우도 알아 두시면  

 도움이 되시리라 믿습니다. ㅅ-ㅅ


728x90
반응형

'C C++' 카테고리의 다른 글

현재 윈도우즈 버전 얻기 예제  (0) 2007.05.19
상수 포인터...  (0) 2007.05.17
클래스 win32_file_iterator  (0) 2007.05.11
TTOF2() 함수  (0) 2007.05.09
VC+6 아직도 쓴다면...  (0) 2007.05.08
728x90
반응형

 

출처 : codeproject.com

 

파일을 찾아 주는 클래스와 예제입니다.

STL 사용하고, 콘솔 환경 외에서 실행하시면 문제가 생길 있습니다.

(현재 디버깅 중이며, 되면 공개 하겄습니다.)

그리고, 기본 공개 클래스를 임의의로 수정한 것입니다.

(원문을 원하시면 주석의 링크로 가보세요.)

 


// win32fileiterator.h 
//////////////////////////////////////////////////////////////////////////

#ifndef __WIN32_FILE_ITERATOR_H_F3019690_E6A6_4997_AB83_E0FDDC109DE2__
#define __WIN32_FILE_ITERATOR_H_F3019690_E6A6_4997_AB83_E0FDDC109DE2__

#ifndef _WIN32
#error
32-
bit Windows required.
#endif

#include
<windows.h
>

#include <iterator
>
#include <string
>

//////////////////////////////////////////////////////////////////////////
// initial class : codeproject.com

// (http://www.codeproject.com/file/win32fileiter.asp)
// updated by j2doll
//  v0.1 (10, May, 2005) : unicode / mbcs stl support 
//                       it's tested on windows xp sp2 / visual c++ 2005 sp1  
//
//////////////////////////////////////////////////////////////////////////

class win32_file_iterator : public std::iterator<std::
input_iterator_tag,
#ifdef _UNICODE
  std
::wstring
>
#else
  std
::string
>
#endif
{

private:
  class internal_handle_data{
  public:
    internal_handle_data():_h(NULL), _ref(
0
){}
    void setHandle(HANDLE handle){ _h
=
handle; }
    HANDLE getHandle(){ return _h; }
    void incRef(){ _ref
++
; }
    unsigned decRef(){ return
--
_ref; }
    operator HANDLE(){ return _h; }
  private:
    HANDLE _h;
    unsigned _ref;
  };

public:
  win32_file_iterator(
#ifdef _UNICODE
    std
::
wstring strfilter,
#else
    std
::
string strfilter,
#endif
    bool bFullPath
=
false,
    DWORD flag
= FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|
FILE_ATTRIBUTE_DIRECTORY):
    _bEnd(false), _bFullPath(bFullPath), _flag(flag){
        HANDLE h
= ::FindFirstFile(strfilter.c_str(), &
_wfd);
    _handle.setHandle(h);

    if(h
==
INVALID_HANDLE_VALUE){
      _bEnd
=
true;
    }else{
      _handle.incRef();
#ifdef _UNICODE
      std
::wstring::size_type n1 = strfilter.find_last_of(L"\\"
);
#else
      std
::string::size_type n1 = strfilter.find_last_of("\\"
);
#endif
      _strroot
= strfilter.substr(0,n1+1
);
      _chkvalid(_wfd);
    }
  }

  win32_file_iterator():_bEnd(true){}

  win32_file_iterator(win32_file_iterator
&
rhs){
   
    _handle
=
rhs._handle;
    _handle.incRef();

    _flag
=
rhs._flag;
    _bFullPath
=
rhs._bFullPath;
    _bEnd
=
rhs._bEnd;
    _wfd
=
rhs._wfd;
    _strfname
=
rhs._strfname;
    _strroot
=
rhs._strroot;   
  }

  ~win32_file_iterator(){
    if(_handle.decRef()
== 0 && _handle.getHandle() !=
NULL ){
      FindClose(_handle);
    }
  }

  reference operator
*
(){
    return _strfname;
  }

  bool operator
==(const win32_file_iterator&
rhs) const{
    return (_bEnd
==
rhs._bEnd);
  }
  bool operator
!=(const win32_file_iterator&
rhs) const{
    return (_bEnd
!=
rhs._bEnd);
  }

 
//Prefix
  win32_file_iterator& operator++
(){
    _findnext();
    return
*
this;
  }
 
//Posfix
  win32_file_iterator& operator++
(int){
    _findnext();
    return
*
this;
  }

private:
  void _findnext(){
    BOOL b
= ::FindNextFile(_handle, &
_wfd);
    if(b){
      _chkvalid(_wfd);
    }else{
      _bEnd
=
true;
    }
  }

  void _chkvalid(WIN32_FIND_DATA
&
_wfd){
    if(_wfd.dwFileAttributes
&
_flag){
      _getval(_wfd);
    }
    else{
      _findnext();
    }
  }
  void _getval(WIN32_FIND_DATA
&
wfd){
    if(_bFullPath)
      _strfname
= _strroot+
wfd.cFileName;
    else
      _strfname
=
wfd.cFileName;
  }

private:
  DWORD _flag;
  bool _bFullPath;
  bool _bEnd;
  internal_handle_data _handle;
  WIN32_FIND_DATA _wfd;
#ifdef _UNICODE
  std
::
wstring _strroot;
  std
::
wstring _strfname;
#else
  std
::
string _strroot;
  std
::
string _strfname;
#endif

};

#endif

 

 

// test function

void test1()
{


#ifdef _UNICODE

  std
::wstring pathstr = L"C:\\*.*";
 
// DWORD fileopt = FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL; 
  DWORD fileopt = FILE_ATTRIBUTE_DIRECTORY; 
// only directory 
  win32_file_iterator itBegin(pathstr, false, fileopt), itEnd;
  std
::vector<std::wstring>
vec(itBegin, itEnd);

  std
::
wstring strtemp;
  std
::vector<std::wstring>::
size_type i;
  for ( i
= 0 ; i < vec.size(); i ++
)
  {
    strtemp
=
vec.at( i );

    wprintf( L
"%s\r\n"
, strtemp.c_str() );
  }

#else

  std
::string pathstr = "C:\\*.*"
;
  
// DWORD fileopt = FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL;
  DWORD fileopt = FILE_ATTRIBUTE_DIRECTORY;
// only directory 
  win32_file_iterator itBegin(pathstr, false, fileopt), itEnd; 
  std
::vector<std::string>
vec(itBegin, itEnd);

  std
::
string strtemp;
  std
::vector<std::string>::
size_type i;
  for ( i
= 0 ; i < vec.size(); i ++
)
  {
    strtemp
=
vec.at( i );

    printf(
"[DIR]%s\r\n"
, strtemp.c_str() ); 
  }

#endif
}
 

 

 

http://j2doll.tistory.com/105
 
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

728x90
반응형

'C C++' 카테고리의 다른 글

상수 포인터...  (0) 2007.05.17
최대한 잘라먹기(Maximal Munch)와 컴파일러(Compiler)  (2) 2007.05.16
TTOF2() 함수  (0) 2007.05.09
VC+6 아직도 쓴다면...  (0) 2007.05.08
CMainFrame IDR_MAINFRAME 확장자 연결 문자열  (0) 2007.04.26
728x90
반응형
728x90
반응형
728x90
반응형

좀 연세가 있으신(?) 코더 분들중에는
아직도 Visual C++ 6.0 을 아직도 사용하시는 분들도 있다.
이런 분들을 위한 어드바이스...

1) 서비스 팩을 반드시 받아서 설치하라.
   마지막 버전은 서비스 팩 6 이며, 사용 국가 언어에 맞추어 설치하라.
   (여기서, MFC42.DLL 은 과연 몇 가지나 될까하는 의문도 생기는데,
    결론부터 이야기하자면 천개가 넘는다!!!! DA책 참조...
    이점은 배포시에도 주의하도록 해야 한다...)
   그리고,  프로세스 팩을 설치한다면 반드시 영문(English)에다가
   서비스팩 5 를 설치해야 할 것이다.

2) 플랫폼 SDK 를 활용하라.
    이거 안 쓰는 분들 많은데, 꼭 써야 기능과 호환성 문제를 가능한한 극복할 수 있다.
    참고로 VC+6 용 플랫폼 SDK 는 현재 최근 버전에서는 지원이 종료되었다.
    2003년 2월 버전까지만 지원이 되므로, 그걸로 하도록 하자.

3) WIN64 는 당연히 안 된다.
    어쩌겠는가... 미리 준비하지 않은 당신...떠나라~...어디로 가?!?!

4) 유니코드 지원은 최소한 미리 해두자.
    VC+2005 부터는 유니코드가 디폴트 설정이다. (왜? WIN98은 공식 지원이 끝난 OS 이므로
    MS 에서는 더 지원해줄 필요가 없기 때문이다...비스타까지 나왔는데...왜 허겄는가...)
    거기에다가, XP, 비스타 등의 OS 가 기본인 대세에서 유니코드 지원은 피할 수 없다!!!
    (미리 포팅하지 않고 중간에 할려면 입에서 단내가 날것이다...ㅋㅋ)

5) VC2005에서는 Secure 관련이 강화되었다.
    (이것도 중간 코드를 이식하려면 귀찮고도 짜증나는 일이 될 것이다.
     전처리기로 막을 수도 있지만, MS 비권장 사항은 절대로 하지 않는 것이 좋다!!!)
    이제 strcpy() 등의 함수는 더 이상 안 키운다...

6) 6 타입 위자드도 못 쓴다.
    6 까지는 VC위자드가 바이너리이지만, 그후는 XML 기반이다.
    다 뜯어 고치던가...접어라....

7) 매니페스트 처리도 추가하라

8) 6 에서 비스타 관련 지원...
   당연히 안 된다!!! 특히 보안 필요한 까탈한 API 호출 시는 GG 쳐라...

9) 결론은 빨리 접어라...
    위의 방법들은 어쩔 수 없는 경우의 땜빵 처리들이며, 근원적인  문제 해결은 안 된다.
    하지만, 팀원들 중 노땅(?)이나 게으른 이들은 포팅을 거부하기도 할 것이다.
    그럴 경우, 최종 지원 플랫폼은 윈 98 이나 2000 으로 하던가...말던가...쩝...  
    그리고, 가능하면 2003 도 빨리 2005 로 포팅하기를 권한다...
    여러분의 사장님은 포팅을 위한 별도의 공수(man-hour)를 할당해 주지는 않을 것이다...

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

728x90
반응형

'C C++' 카테고리의 다른 글

클래스 win32_file_iterator  (0) 2007.05.11
TTOF2() 함수  (0) 2007.05.09
CMainFrame IDR_MAINFRAME 확장자 연결 문자열  (0) 2007.04.26
GetProcAddress 과 Unicode  (0) 2007.04.14
.NET 프레임워크 인식하기  (0) 2007.04.07
728x90
반응형

CMainFrame IDR_MAINFRAME 확장자 연결 문자열

출처 : MSDN 예제>

확장자 myc 를 프호그램에 연결하고 싶은 경우,
resource editor 에서 다음처럼 편집해 본다!!

 IDR_MAINFRAME


 MyCalc Windows Application\nSheet\nWorksheet\n Worksheets (*.myc)\n.myc\nMyCalcSheet\n MyCalc Worksheet

 

728x90
반응형

'C C++' 카테고리의 다른 글

TTOF2() 함수  (0) 2007.05.09
VC+6 아직도 쓴다면...  (0) 2007.05.08
GetProcAddress 과 Unicode  (0) 2007.04.14
.NET 프레임워크 인식하기  (0) 2007.04.07
SAFEARRAY 생성 / 소거 API 예제  (1) 2007.04.03
728x90
반응형
사용자 삽입 이미지

http://support.microsoft.com/kb/269238/ko


MSXML 은 IE 에서 사용하는 WININET 과 더불어 매우 중요한 라이브러리 중 하나이다.
물론, 기능은 이름에서 알 수 있듯이 XML 의 파싱과 구성이 주된 기능이다.
그런데, 요넘은 IE 와 OS 등의 버전과 함께 맞물려 올라가기 때문에
사용 전에 자신이 사용하는 MSXML 의 버전을 미리 체크한 후에
사용해야 한다.

현재 MSXML 6 까지 공식 지원이 보이고 있는데, 향후 이것이 다른 것으로
통합될지 어떨지는 사실 알 수 없다. (M$ 맘이므로...)
그래서 향후에도 사용할 안정적인 XML 라이브러리를 찾는다면
오픈 소스 계열 것을 사용하는 것도 좋은 방법 중 하나일 것이다.
하지만, 우리는 코더!!!! 미래의 일은 그때 생각하자^_^!!! (미래는 甲의 것, 乙이하는 알봐아니다...)
현실에서 사용하기 편한 요넘을 마구마구 써주도록 한다.
그리고, 지원이 끊어져도 사용할 수 없다는 이야기는 아니다.
dshow 처럼 사용은 가능하지만 향후 버전업을 기대하지 말라는 것이므로...

또한 MSXML 은 높은 버전의 것이 낮은 버전 것보다 압도적으로
사용하기 편한 인터페이스를 가지고 있다.
현실적으로 M$에서 지원하는 최소 OS 는 2000 이므로,
거기에 맞추어 개발하는 것도 正道일 것이다..(98은 고만좀해...)
그러나 98 에도 IE6 이상을 설치 하거나 MDAC 상위 버전 설치등을 하면
어느 정도 높은 버전의 MSXML 을 사용할 수 도 있다.

728x90
반응형

'HTML XML' 카테고리의 다른 글

이미지 비율 유지 방법 : html , img  (0) 2024.10.04
XML 예약 문자  (0) 2007.08.17
XHTML 과 HTML 사이의 차이점  (0) 2007.06.09
Microsoft XML Notepad 2007  (0) 2007.04.24

+ Recent posts