반응형

C# 30일완성 Lesson 41 C# 30일완성 Lesson 41 블로그 0 42 0 09.05.04
C# 30일완성 Lesson 42
C# 30일완성 Lesson 42 블로그 0 27 0 09.05.04
C# 30일완성 Lesson 43
C# 30일완성 Lesson 43 블로그 0 37 0 09.05.04
C# 30일완성 Lesson 44
C# 30일완성 Lesson 44 블로그 0 31 0 09.05.03
C# 30일완성 Lesson 45
C# 30일완성 Lesson 45 블로그 0 21 0 09.05.03
C# 30일완성 Lesson 46
C# 30일완성 Lesson 46 블로그 0 23 0 09.05.03
C# 30일완성 Lesson 47
C# 30일완성 Lesson 47 블로그 0 20 0 09.05.03
C# 30일완성 Lesson 48
C# 30일완성 Lesson 48 블로그 0 35 0 09.05.03
C# 30일완성 Lesson 49
C# 30일완성 Lesson 49 블로그 0 25 0 09.05.03
C# 30일완성 Lesson 50
C# 30일완성 Lesson 50 블로그 0 19 0 09.05.03

반응형

'프로그래밍(Programming) > C#' 카테고리의 다른 글

C# 일관성 없는 액세스 가능성  (0) 2013.01.22
C#강의 51~55 끝  (0) 2012.10.31
C#강의 31~40  (0) 2012.10.31
C#강의 21~30  (0) 2012.10.31
C# 강의 11~ 20  (0) 2012.10.31
반응형

C# 30일완성 Lesson 31 C# 30일완성 Lesson 31 블로그 0 42 0 09.05.04
C# 30일완성 Lesson 32
C# 30일완성 Lesson 32 블로그 0 41 0 09.05.04
C# 30일완성 Lesson 33
C# 30일완성 Lesson 33 블로그 0 45 0 09.05.04
C# 30일완성 Lesson 34
C# 30일완성 Lesson 34 블로그 0 48 0 09.05.04
C# 30일완성 Lesson 35
C# 30일완성 Lesson 35 블로그 0 37 0 09.05.04
C# 30일완성 Lesson 36
C# 30일완성 Lesson 36 블로그 0 29 0 09.05.04
C# 30일완성 Lesson 37
C# 30일완성 Lesson 37 블로그 0 41 0 09.05.04
C# 30일완성 Lesson 38
C# 30일완성 Lesson 38 블로그 0 34 0 09.05.04
C# 30일완성 Lesson 39
C# 30일완성 Lesson 39 블로그 0 28 0 09.05.04
C# 30일완성 Lesson 40
C# 30일완성 Lesson 40 블로그 0 34 0 09.05.04

반응형

'프로그래밍(Programming) > C#' 카테고리의 다른 글

C#강의 51~55 끝  (0) 2012.10.31
c#강의 41~50  (0) 2012.10.31
C#강의 21~30  (0) 2012.10.31
C# 강의 11~ 20  (0) 2012.10.31
c#강의 1~10  (0) 2012.10.31
반응형

C# 30일완성 Lesson 21 C# 30일완성 Lesson 21 블로그 0 77 0 09.05.04
C# 30일완성 Lesson 22
C# 30일완성 Lesson 22 블로그 0 62 0 09.05.04
C# 30일완성 Lesson 23
C# 30일완성 Lesson 23 블로그 0 45 0 09.05.04
C# 30일완성 Lesson 24
C# 30일완성 Lesson 24 블로그 1 62 0 09.05.04
C# 30일완성 Lesson 25
C# 30일완성 Lesson 25 블로그 0 45 0 09.05.04
C# 30일완성 Lesson 26
C# 30일완성 Lesson 26 블로그 0 39 0 09.05.04
C# 30일완성 Lesson 27
C# 30일완성 Lesson 27 블로그 0 39 0 09.05.04
C# 30일완성 Lesson 28
C# 30일완성 Lesson 28 블로그 0 49 0 09.05.04
C# 30일완성 Lesson 29
C# 30일완성 Lesson 29 블로그 0 30 0 09.05.04
C# 30일완성 Lesson 30
C# 30일완성 Lesson 30 블로그 0 27 0 09.05.04

반응형

'프로그래밍(Programming) > C#' 카테고리의 다른 글

C#강의 51~55 끝  (0) 2012.10.31
c#강의 41~50  (0) 2012.10.31
C#강의 31~40  (0) 2012.10.31
C# 강의 11~ 20  (0) 2012.10.31
c#강의 1~10  (0) 2012.10.31
반응형

C# 30일완성 Lesson 11 C# 30일완성 Lesson 11 블로그 0 85 0 09.05.05

C# 30일완성 Lesson 12 C# 30일완성 Lesson 12 블로그 0 96 0 09.05.05
C# 30일완성 Lesson 13 C# 30일완성 Lesson 13 블로그 0 78 0 09.05.05
C# 30일완성 Lesson 14 C# 30일완성 Lesson 14 블로그 0 77 0 09.05.05
C# 30일완성 Lesson 15 C# 30일완성 Lesson 15 블로그 0 68 0 09.05.05
C# 30일완성 Lesson 16 C# 30일완성 Lesson 16 블로그 0 63 0 09.05.05
C# 30일완성 Lesson 17 C# 30일완성 Lesson 17 블로그 0 64 0 09.05.05
C# 30일완성 Lesson 18 C# 30일완성 Lesson 18 블로그 0 64 0 09.05.05
C# 30일완성 Lesson 19 C# 30일완성 Lesson 19 블로그 0 48 0 09.05.05
C# 30일완성 Lesson 20 C# 30일완성 Lesson 20 블로그 0 68 0 09.05.04

반응형

'프로그래밍(Programming) > C#' 카테고리의 다른 글

C#강의 51~55 끝  (0) 2012.10.31
c#강의 41~50  (0) 2012.10.31
C#강의 31~40  (0) 2012.10.31
C#강의 21~30  (0) 2012.10.31
c#강의 1~10  (0) 2012.10.31
반응형

C# 30일완성 Lesson 01 C# 30일완성 Lesson 01 블로그 0 1046 0 09.05.05

C# 30일완성 Lesson 02 C# 30일완성 Lesson 02 블로그 0 443 0 09.05.05
C# 30일완성 Lesson 03 C# 30일완성 Lesson 03 블로그 0 260 0 09.05.05
C# 30일완성 Lesson 04 C# 30일완성 Lesson 04 블로그 0 250 0 09.05.05
C# 30일완성 Lesson 05 C# 30일완성 Lesson 05 블로그 0 231 0 09.05.05
C# 30일완성 Lesson 06 C# 30일완성 Lesson 06 블로그 0 178 0 09.05.05
C# 30일완성 Lesson 07 C# 30일완성 Lesson 07 블로그 0 162 0 09.05.05
C# 30일완성 Lesson 08 C# 30일완성 Lesson 08 블로그 0 172 0 09.05.05
C# 30일완성 Lesson 09 C# 30일완성 Lesson 09 블로그 0 173 0 09.05.05
C# 30일완성 Lesson 10 C# 30일완성 Lesson 10 블로그 0 135 0 09.05.05

반응형

'프로그래밍(Programming) > C#' 카테고리의 다른 글

C#강의 51~55 끝  (0) 2012.10.31
c#강의 41~50  (0) 2012.10.31
C#강의 31~40  (0) 2012.10.31
C#강의 21~30  (0) 2012.10.31
C# 강의 11~ 20  (0) 2012.10.31
반응형

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNO=20&no=8454

MiniDump를 위한 심볼/소스 서버 구성하기

팀에서 사용하려고 만든 문서 올려봅니다.

SVN을 기준으로 작성했으나.. 소스세이프나 CVS등도 가능합니다.

수정/개선 사항 있으면 코맨트 부탁드립니다.

---------------------------------------------------------------------------------------------------------------

개발한 응용프로그램을 배포하면 뜻하지 않게 프로그램이 죽는 문제를 만나게 된다. 이런 경우 어디에서 왜 죽었는지를 파악하기 위해 dump파일을 생성하게 된다.

그러나 이렇게 생성된 dump파일도 해당 프로세스의 버전과 동일한 .pdb 및 소스가 없다면 무용지물이 된다.

제품을 출시한 후에 소스를 끊임없이 수정하는 상황에서는 소스 및 pdb 파일의 관리가 어려워진다.

이 문서는 생성된 dmp파일이 올바른 pdb및 소스를 자동으로 찾도록 해서

관리를 쉽게 할 수 있는 심볼/소스 서버를 구축하는 방법을 소개한다.

1. Debugging Tools for Windows 설치하기

서버를 구성하기 위해서는 symchk, symstore 등 심볼을 관리하는 프로그램이 필요하다. 이것은 Debugging Tools for Windows에서 제공하고 있다.

아래의 주소에서Debugging Tools for Windows를 최신 버전으로 다운로드 해서 설치한다.

32비트http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
64
비트http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx#

그러나 2010/02/26버전부터 WDK(Windows Driver Kit)에 통합됐기 때문에 32/64에 무관하게 아래의 주소에서 다운로드 받으면 된다.

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=36a2630f-5d56-43b5-b996-7633f2ec14ff

2. OS심볼의 자동 다운로드 설정

WinDbg Visual Studio에서 OS exe/dll 파일의 심볼을 자동으로 다운로드 할 수 있도록 다음과 같이 시스템 변수를 등록해야 한다.

변수 이름 : _NT_SYMBOL_PATH
변수 값 : SRV*E:\Debugging\Symbols\Os\*http://msdl.microsoft.com/download/symbols

빨간색으로 된 부분은 각자의 환경에 맞게 설정해야 한다. 위의 경로는 OS의 심볼들을 위한 것이고 후에 우리가 만든 제품의 심볼을 저장할 경로도 설정할 것이므로 Symbols밑에 OS로 폴더를 구분하는 것을 추천한다.

3. 심볼/소스 서버의 경로 설정

우리가 작업하는 프로젝트의 위치는 가변적이기 때문에 심볼/소스 서버의 관리 프로그램의 경로를 설정한다.(다음 페이지 그림 참조)

64비트의 경우 기본 경로는 아래와 같다.
(
심볼 서버
) C:\Program Files\Debugging Tools for Windows (x64)\
(
소스 서버) C:\Program Files\Debugging Tools for Windows (x64)\srcsrv\

4. VisualSVN 설치

소스 서버에 접속해서 버전에 맞는 소스를 가져오기 위한 클라이언트를 설치한다. 클라이언트 마다 후반부에 설정이 약간 달라지며, 여기서는 VisualSVN을 기준으로 설명한다.

아래의 두 프로그램을 설치한다.

http://www.visualsvn.com/visualsvn/download/tortoisesvn/
http://www.visualsvn.com/visualsvn/download/

5. Visual Studio 설정(2005/2008)

dmp 파일을 Visual Studio에서 로드하면 dmp가 생성됐을 당시의 OS dll pdb 파일이 필요하다.

다음의 두 그림처럼 옵션을 설정하면 필요 시 자동으로 다운로드 한다.
(2. OS
심볼의 자동 다운로드 설정이 필요한 이유이다.)

6. ActivePerl 설치하기

다음 단계에서 사용 할 소스 서버 관리 프로그램인 svnindex.cmd Perl이라는 스크립트이다. 이 스크립트를 실행할 수 있도록 아래의 경로에서 프로그램을 다운 받아 설치한다.

설치 할 때 여러 가지 물어보는 데 잘 읽어보자.

http://www.activestate.com/activeperl/downloads/

7. 리부팅

설정한 path도 적용할 겸 리부팅 한 번 하자.

8. 소스 서버 접속 정보 설정

소스 서버에 접속해서 적합한 소스 파일을 얻기 위하여 소스 서버의 접속 정보를 설정해야 한다. 아래의 파일을 수정한다.(내용이 많으나 다 지우고 아래 언급한 것만 남기면 된다.)

C:\Program Files\Debugging Tools for Windows (x64)\srcsrv\srcsrv.ini

MYSERVER는 소스 서버의 주소 및 저장될 위치이다.(아래 그림 참조)
trusted commands
는 소스 서버에 접속 할 클라이언트 프로그램의 위치이다.

[variables]
MYSERVER=https://192.168.0.70:8443/svn/

[trusted commands]
svn.exe=C:\Program Files (x86)\VisualSVN\bin\svn.exe

9. 소스 서버에 솔루션의 등록

Visual Studio 2005/2008의 솔루션 탐색기에서 오른쪽 버튼을 누르면 다음과 같이 메뉴가 나타난다. Add Solution to Subversion을 실행하자

해당 솔루션의 루트 폴더를 지정하자. 뒷 부분에서 pdb파일에 소스 정보를 입력할 때 아래의 경로가 사용된다.

다음 단계에서는 대부분은 소스 서버의 관리자가 아니기 때문에 그냥 기존에 있는 걸 사용한다.

"8. 소스 서버 접속 정보 설정" 단계에서 설정한 서버의 주소를 사용한다.

Finish 버튼까지 모두 마치면 아래의 그림처럼 솔루션이 소스 서버에 등록 된다.

10. 프로젝트 빌드

이제 드디어 빌드를 할 수 있다. 빌드를 해서 exe도 만들고 pdb 파일도 생성하자.
빌드가 끝나면 소스를 소스 서버에 commit 하는 것도 잊지 말자.

11. pdb에 소스 버전 정보 삽입

svnindex를 사용해서 아래와 같이 입력하면 pdb에 소스 버전 및 위치 등을 입력한다.
/source
"9. 소스 서버에 솔루션의 등록"에서 지정한 솔루션의 루트 폴더이다
.
/symbols
는 빌드가 돼서 pdb가 존재하는 경로를 지정한다.

경로를 지정할 때에는 반드시 절대 경로를 사용한다. 상대 경로에는 몇몇 경우에 오류를 발생 시킨다고 한다.

E:\>svnindex /source="E:\Current Projects\Visual Studio 2008\Projects\TestMiniDump" /symbols="e:\Current Projects\Visual Studio 2008\Projects\TestMiniDump\Debug"

12. 소스 정보 확인

pdb에 소스 정보가 제대로 저장됐는지 확인하려면 srctool을 사용하면 된다.

E:\Current Projects\Visual Studio 2008\Projects\TestMiniDump\Debug>srctool TestMiniDump.pdb

아래 그림처럼 나온다면 성공이다.

13. 심볼 서버에 저장

이제 멀쩡한 심볼을 만들었으니 심볼 서버에 저장하면 된다. 아래의 명령은 E:\Current Projects에 있는 모든 exe/dll 등을 E:\Debugging\Symbols\Product에 저장한다는 뜻이다. 각각의 경로는 환경에 맞게 설정한다.

/t 옵션은 Title의 약자로 프로젝트 마다 설정하는 것으로 예상되나 각자 마음에 드는 것을 선택해도 상관없다. 다만 한 번 지정된 이름을 변경하면 안 된다는 것만 주의하자.

symstore add /r /f "E:\Current Projects\*.*" /s "E:\Debugging\Symbols\Products\" /t "AronStaff"

14. dmp파일의 확인

이제 모든 준비가 끝났다. dmp 파일을 더블 클릭해서 Visual Studio를 실행하고 F5를 눌러서 실행하기 버튼을 누르면 자동으로 문제가 발생한 소스의 위치와 당시의 스택 정보를 보여준다.

15. 조금 더 편하게

svnindex symsotre를 프로젝트 마다 경로를 지정하고 실행하는 것은 번거롭다.(매우 번거롭다) 그러나 Visual Studio "빌드 후 이벤트" 기능을 사용하면 보다 편하게 사용할 수 있다.

빌드 후 이벤트 항목에 아래처럼 입력하자.

call svnindex /source="$(ProjectDir)" /symbols="$(TargetDir)"
call symstore add /r /f "$(TargetDir)*.*" /s "E:\Debugging\Symbols\Products" /t "$(SolutionName)"

만약에 매 번 빌드 할 때 마다 저장되는 것이 부담스럽다면 Release 모드에서만 위의 명령을 실행하도록 설정하자. Release Debug 보다 빌드 횟수가 적어서 덜 부담스러울 것이다.

반응형
반응형

#pragma comment( linker , "/subsystem:console")

를 추가하거나

Win32 콘솔로 프로젝트를 만들거나 하면 된다

반응형
반응형

function & method 의 주석 정보


1.루틴이 무엇을 하는지

2. 메서드가 어떤 가정을 하고 있는지

3. 각각의 입력 매개 변수가 무엇을 포함해야 하는지

4. 가각의 출력 매개 변수가 성공과 실패에 대해서 무엇을 포함해야 하는지

5. 가능한 반환 값

6. 메서드에서 발생할 수 있는 예외

반응형
반응형

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNO=20&no=762711&ref=762711




VS 2005에서 "새 데이터 중단점"이 활성화가 안되길레...

어떻게 하는건가 싶어서 VS의 Help에 검색해봤더니...

 

==================================================

방법: 데이터 중단점 설정(네이티브 전용)

 

데이터 중단점을 사용하면 특정 메모리 위치에 저장된 값이 기록될 때 실행을 중단할 수 있습니다. 값을 쓰지 않고 읽을 때는 실행이 중단되지 않습니다.

 

디버깅되지 않는 프로세스에서 해당 메모리 위치에 쓰는 경우나 둘 이상의 프로세스에서 해당 메모리 위치를 공유하는 경우에는 데이터 중단점이 작동하지 않습니다. 커널 내에서 메모리 위치가 업데이트되는 경우에도 데이터 중단점이 작동하지 않습니다. 예를 들어 32비트 Windows ReadFile 함수에 메모리가 전달된 경우 커널 모드에서 메모리가 업데이트되므로 메모리에 쓸 때 디버거에서 실행이 중단되지 않습니다.

 

데이터 중단점을 설정하려면 디버거가 중단 모드여야 합니다.

 

변수의 주소는 디버깅 세션마다 달라집니다. 이러한 이유로 데이터 중단점은 각 디버깅 세션이 끝날 때 자동으로 해제됩니다.

데이터 중단점을 지역 변수에 설정한 경우에는 함수가 종료되어도 데이터 중단점이 설정된 상태로 유지됩니다. 그러나 설정된 메모리 주소의 의미는 달라집니다. 따라서 이러한 중단점의 결과는 예측할 수 없습니다. 지역 변수에 데이터 중단점을 설정한 경우에는 함수가 종료되기 전에 중단점을 제거하거나 해제하는 것이 좋습니다.

 

Visual Studio에서는 솔루션당 최대 4개의 데이터 중단점을 지원합니다.

 

메모리 변경 중단점을 설정하려면

  1. 디버그 메뉴에서 새 중단점을 선택한 다음 새 데이터 중단점을 클릭합니다.

    ? 또는 ?

    중단점 창 메뉴에서 새로 만들기를 클릭한 다음 새 데이터 중단점을 선택합니다.

    새 중단점 대화 상자가 나타납니다.

  2. 주소 상자에 메모리 주소나 메모리 주소를 계산하는 식을 입력합니다. 예를 들어, &avar 를 입력하면 avar 변수의 내용이 바뀔 때 실행이 중단됩니다.

  3. 바이트 계산 상자에 디버거에서 조사할 바이트 수를 입력합니다. 예를 들어, 4를 입력하면 디버거에서 &myFunction부터 4바이트를 조사하고 이러한 바이트의 값이 변경되면 실행을 중단합니다.

  4. 확인을 클릭합니다.

 

=======================================================

 

라고 나오네요. ;;;; ㅎㅎㅎ

 

그런데 여기서.... "네이티브 전용"이라는 말의 의미를 모르겠어서... 이렇게 질문을 드립니다.

객체의 멤버 변수들을 모두 NULL값으로 초기화 해서 생성했는데, 막상 사용할때 보니 쓰레기 값이 들어가있는 멤버들이 몇개 있어서... 이러고 있답니다. 에휴...

 

멋진분의 답변을 기다리고 있겠습니다.감사합니다.

반응형
반응형

문자열변환2

송정헌 2010-01-18 11:47:30 주소복사
조회 28 스크랩 0

char *, wchar_t *, _bstr_t, CComBSTR, CString, basic_string, System.String 변환

char *

char *orig = "Hello, World!";

size_t origsize = strlen(orig) + 1; // wchar_t *

const size_t newsize = 100;

size_t convertedChars = 0;

wchar_t wcstring[newsize];

mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);

wcscat_s(wcstring, L" (wchar_t *)");

_bstr_t bstrt(orig); // _bstr_t

bstr += " (_bstr_t)";

CComBSTR ccombstr(orig); // CComBSTR

if(ccombstr.Append(L"(CComBSTR)") == S_OK) CW2A printstr(ccombstr);

CString cstring(orig); // CString

cstring += " (CString)";

string basicstring(orig); // basic_string

basicstring += " (basic_string)";

String ^systemstring = gcnew String(orig); // System.String

systemstring += " (System::String)";

delete systemstring;

wchar_t *

wchar_t *orig = L"Hello, World!";

size_t origsize = wcslen(orig) + 1; // char *

const size_t newsize = 100;

size_t convertedChars = 0;

char nstring[newsize];

wcstombs_s(&convertedChars, nstring, origsize, orig, _TRUNCATE);

strcat_s(nstring, " (char *)");

_bstr_t bstrt(orig); // _bstr_t

bstrt += " (_bstr_t)";

CComBSTR ccombstr(orig); // CComBSTR

if(ccombstr.Append(L" (CComBSTR)") == S_OK) CW2A printstr(ccombstr);

CString cstring(orig); // CString

cstring += " (CString)";

wstring basicstring(orig); // basic_string

basicstring += L" (basic_string)";

String ^systemstring = gcnew String(orig); // System.String

systemstring += " (System::String)";

delete systemstring;

_bstr_t

BSTR을 캡슐화하는 COM 지원 클래스 (comutil.h, comsuppw.lib 또는 comsuppwd.lib)

_bstr_t orig("Hello, World!");

const size_t newsize = 100; // char *

char nstring[newsize];

strcpy_s(nstring, (char *)orig);

strcat_s(nstring, " (char *)");

wchar_t wcstring[newsize]; // wchar_t *

wcscpy_s(wcstring, (wchar_t *)orig);

wcscat_s(wcstring, L" (wchar_t *)");

CComBSTR ccombstr((char *)orig); // CComBSTR

if(ccombstr.Append(L" (CComBSTR)") == S_OK) CW2A printstr(ccombstr);

CString cstring((char *)orig); // CString

cstring += " (CString)";

string basicstring((char *)orig); // basic_string

basicstring += " (basic_string)";

String ^systemstring = gcnew String((char *)orig); // System.String

systemstring += " (System::String)";

delete systemstring;

CComBSTR ATL의 BSTR wrapper 클래스 (atlbase.h)

CComBSTR orig("Hello, World!");

CW2A printstr(orig);

const size_t newsize = 100; // char *

char nstring[newsize];

CW2A tmpstr1(orig);

strcpy_s(nstring, tmpstr1);

strcat_s(nstring, " (char *)");

wchar_t wcstring[newsize]; // wchar_t *

wcscpy_s(wcstring, orig);

wcscat_s(wcstring, L" (wchar_t *)");

_bstr_t bstrt(orig); // _bstr_t

bstrt += " (_bstr_t)";

CString cstring(orig); // CString

cstring += " (CString)";

wstring basicstring(orig); // basic_string

basicstring += L" (basic_string)";

String ^systemstring = gcnew String(orig); // System.String

systemstring += " (System::String)";

delete systemstring;

CString ATL/MFC의 템플릿 클래스인 CStringT의 기본 구현 클래스.

CString orig("Hello, World!");

const size_t newsize = 100; // char *

char nstring[newsize];

strcpy_s(nstring, orig);

strcat_s(nstring, " (char *)");

// wchar_t * (이 작업을 하려면 먼저 char *로 바꿔야 한다)

size_t origsize = strlen(orig) + 1;

size_t convertedChars = 0;

wchar_t wcstring[newsize];

mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);

wcscat_s(wcstring, L" (wchar_t *)");

_bstr_t bstrt(orig); // _bstr_t

bstrt += " (_bstr_t)";

CComBSTR ccombstr(orig); // CComBSTR

if(ccombstr.Append(L" (CComBSTR)") == S_OK) CW2A printstr(ccombstr);

string basicstring(orig); // basic_string

basicstring += " (basic_string)";

String ^systemstring = gcnew String(orig); // System.String

systemstring += " (System::String)";

delete systemstring;

basic_string STL 클래스 (<string>)

string orig("Hello, World!");

const size_t newsize = 100; // char *

char nstring[newsize];

strcpy_s(nstring, orig.c_str());

strcat_s(nstring, " (char *)");

// wchar_t * (이 작업을 하려면 먼저 char *로 바꿔야 한다)

size_t origsize = strlen(orig.c_str()) + 1;

size_t convertedChars = 0;

wchar_t wcstring[newsize];

mbstowcs_s(&convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);

wcscat_s(wcstring, L" (wchar_t *)");

_bstr_t bstrt(orig.c_str()); // _bstr_t

bstrt += "(_bstr_t)";

CComBSTR ccombstr(orig.c_str()); // CComBSTR

if(ccombstr.Append(L" (CComBSTR)") == S_OK) CW2A printstr(ccombstr);

Cstring cstring(orig.c_str()); // CString

cstring += " (CString)";

String ^systemstring = gcnew String(orig.c_str()); // System.String

systemstring += " (System::String)";

delete systemstring;

System.String .NET 프레임워크 클래스 (mscorlib)

String ^orig = gcnew String("Hello, World!");

pin_ptr<const wchar_t> wch = PtrToStringChars(orig);

size_t origsize = wcslen(wch) + 1; // char *

const size_t newsize = 100;

size_t convertedChars = 0;

char nstring[newsize];

wcstombs_s(&convertedChars, nstring, origsize, wch, _TRUNCATE);

strcat_s(nstring, " (char *)");

wchar_t wcstring[newsize]; // wchar_t *

wcscpy_s(wcstring, wch);

wcscat_s(wcstring, L" (wchar_t *)");

_bstr_t bstrt(wch); // _bstr_t

bstrt += " (_bstr_t)";

CComBSTR ccombstr(wch); // CComBSTR

if(ccombstr.Append(L" (CComBSTR)") == S_OK) CW2A printstr(ccombstr);

CString cstring(wch); // CString

cstring += " (CString)";

wstring basicstring(wch); // basic_string

basicstring += L" (basic_string)";

delete orig;

반응형

+ Recent posts