천객만래 [千客萬來] (It has an interminable succession of visitors)
[Delphi] TWebbrowser 의 찾는 문자열에 형광팬 효과 주기   델파이 
2009/11/04 17:40
http://blog.naver.com/yagyu82/92553070
uses 절에는 MsHTML 을 추가합니다. 그리고 함수는 다음과 같습니다.

var
  tr: IHTMLTxtRange;
begin
  tr := ((WebBrowser.Document as IHTMLDocument2).body 
as IHTMLBodyElement).createTextRange;

while tr.findText('찾는 문자열', 1, 0) do
  begin
    tr.pasteHTML('<span style="background-color: Lime; font-weight: bolder; font-size: 30">' 
+ tr.htmlText + '</span>');

    tr.scrollIntoView(True);
  end;
end;

즉 tr 에 TWebbrowser 내부의 로딩된 도큐먼트를 IHTMLDocument 2로 반환해서 해당 html 의 body 테그에 해당하는 부분, 즉, 본문 내용을 저장합니다.

이후 while 문으로 tr 의 findText 함수로 문자열을 검색합니다.

tr 의 htmlText 함수로 해당 문자열을 알수 있으며 pasteHTML 로 앞 뒤에 형광팬 효과를 위한 태그를 추가합니다.

tr.scrollIntoView 는 해당 위치로 자동 스크롤 하는 명령입니다.

즉, 형광효과란, 해당 문자열을 찾아서 문서에 임의의 테그를 추가하여 문서를 변화시키는 방법입니다.

당연히 해당 테그를 수정하면 사이즈, 배경색, 기울임 효과등도 추가할 수 있습니다.

다시 원 문서로 돌리고 싶으시다면 Webbrowser.ReFlesh() 해주세요

당연히 원래 문서를 재 로딩하고, 효과는 취소됩니다.

이 코드를 이용하면 익스플로러 툴바 중 알툴바의 형광팬 효과와 똑같이 구현할 수 있습니다


Posted by SB패밀리

일단, 기초부터 살펴보고 가겠습니다. DateTime 구조체를 사용하여 현재의 시간을 얻어오고 싶다면 어떻게 하면 될까요? 그렇습니다. 아주 간단하게도 다음과 같이 코드를 작성하기만 하면 됩니다.

 

DateTime.Now

 

DateTime 구조체의 Now라는 정적 속성이 현재의 날짜정보를 알려주니까요.  ^^;  현재의 날짜 시간정보를 알아내기 위해서 굳이 DateTiem의 인스턴스를 만들 필요는 없답니다.

 

그렇다면, 특정 날짜와 시간을 지정하여 그 날짜에 해당하는 값을 얻어오고 싶다면 어떻게 해야 할까요? 다음과 같이 그 값을 생성자의 인자로써 지정해 주면 됩니다. 인자는 순서대로 년, 월, 일, 시, 분, 초가 되니까요 ^^

 

DateTime dateTime = new DateTime(1973, 11, 22, 9, 10, 23);

 

위의 코드는 1973-11-22 9:10:23 의 날짜 정보를 갖는 DateTime 구조체를 만든 것이 됩니다. 아주 간단하죠? 코드로써 확인하고 들어가겠습니다

 

여러분의 프로젝트에(ASP.NET 응용 프로그램) 웹 폼 페이지를 하나 새로이 추가하시구요(저는 DateTimeEx01.aspx라는 이름을 지정해 보았습니다). 웹 폼위에 Label 컨트롤을 하나 올려주세요. 그러면, 그 Label 컨트롤의 아이디는 기본적으로 Label1 이라고 지정될 겁니다. 그 기본값 그대로 두시구요..  ^^

 

코드 비하인드 페이지로 이동해서 Page_Load 이벤트 처리기에 다음과 같은 코드를 작성해 보도록 하세요

private void Page_Load(object sender, System.EventArgs e)
{
    DateTime dateTime = new DateTime( 1972,        // Year
                                                               11,        // Month
                                                               18,        // Day
                                                               03,        // Hour
                                                               20,        // Minute
                                                               12);       // Second

    Label1.Text = "<br>현재 날짜정보 : " + DateTime.Now.ToString();
    Label1.Text += "<br>지정 날짜정보 : " + dateTime.ToString();
}

 

그리고, 페이지를 컴파일하고 실행해 보세요. [솔루션 탐색기]에서 현재의 웹 폼 파일을 선택하고, 마우스 우측 클릭!! [빌드 및 찾아보기]를 클릭하시면 됩니다.

 

 

보시다시피, 현재의 날짜와 우리가 조작한 날짜의 정보가 멋지게 출력되는 것을 확인할 수 있습니다.

 

하지만, 제가 하려는 이야기의 본문은 이게 아닙니다. 이야기하려는 부분은 이렇게 구성된 날짜 정보를 우리가 원하는 형태로 어떻게 조합할 수 있느냐는 것입니다.

 

예를 들어, 우리는 가끔 어떤 목적에 의해 현재의 년,월,일,시,분,초 값을 주욱 하나의 문자열로 나열한 값을 얻어내고 싶을 수도 있습니다. 즉, 현재를 2003-02-20 오전 11:19:34 이라고 가정한다면,

20030220111934

와 같은 값을 얻어내고 싶을 수 있다는 것이죠.

 

혹은, 년,월,일,시,분,초 값을 .(쩜)을 구분자으로 하여 나열하는 다음과 같은 값을 얻어오고 싶을 경우도 있습니다.

2003.02.20.11.19.34

 

그렇습니다. 이번 팁은 바로 이러한 문자열을 쉽게 얻어오는 방법에 대한 것입니다. 날짜정보를 이렇게 원하는 포맷으로 얻어오는 방법에는 크게 두 가지 방법이 있습니다

 

하나는 엄청난 코드량의 압박(!)을 느끼면서 무지하게 많은 코드를 작성하는 방법으로 DateTime.Now로부터 각각의 년,월,일,시,분,초 값을 개별적으로 얻어와 문자열 결합을 하는 방법이구요.(개인적으로는 비추천하는 방법입니다)

 

또 다른 하나는 DateTime 구조체의 ToString() 메서드를 아주 효과적으로 사용하는 방법입니다.

그렇다면, 하나씩 알아보도록 하죠. ASP에 익숙하거나 VB를 조금 할 줄 아는 사람들이라면 아마도 가장 먼저 첫번째 방법을 생각해 냈을 것이라 생각합니다. 예를 들면, 코드를 다음과 같이 작성하는 것이죠

 

private void Page_Load(object sender, System.EventArgs e)
{
     // 첫번째 방법 - 엄청난 코드량의 압박이 느껴진다.
     string strYear = DateTime.Now.Year.ToString() ;
     string strMonth = DateTime.Now.Month.ToString() ;
     string strDay = DateTime.Now.Day.ToString() ;
     string strHour = DateTime.Now.Hour.ToString() ;
     string strMinute = DateTime.Now.Minute.ToString() ;
     string strSecond = DateTime.Now.Second.ToString() ;

     if(strMonth.Length == 1 ) strMonth = "0" + strMonth;
     if(strDay.Length == 1 ) strDay = "0" + strDay;
     if(strHour.Length == 1 ) strHour = "0" + strHour;
     if(strMinute.Length == 1 ) strMinute = "0" + strMinute;
     if(strSecond.Length == 1 ) strSecond = "0" + strSecond;

     Label1.Text = strYear + "." + strMonth + "." + strDay + "." +
                          strHour + "." + strMinute + "." + strSecond;
}

 

코드를 작성하셨다면, 컴파일하고 실행하여 결과를 확인해 보도록 하세요. 물론, 결과는 만족스럽게 나오고 있을 겁니다

 

 

하지만, 코드는 그다지 만족스럽지 못합니다. 너무 복잡해 보이기 때문이지요. 코드는 현재 년, 월, 일, 시, 분, 초 값을 각각 별도로 구해서 별도의 string 변수에 그 얻어진 값을 넣고, 만일 그 값이 혹 1~9 까지의 한자리 숫자일 경우는 두자리로 맞춰주기 위해서 "0" 이라는 문자열을 기존의 값 앞에 더하는 로직도 들어 있습니다. 물론, 이 코드가 나쁘다는 것은 아니지만 조잡함과 가독성의 저하가 존재한다는 것을 부정하지는 못할 것입니다.

 

"난 이게 가독성이 더 좋고, 유지 보수하기 더 좋다고 생각해~~!!!" 라고 우기신다면, 어쩌겠습니까? 자신이 좋아하는 코드를 사용해야 하겠죠. 하지만, 프로젝트는 혼자서 진행하는 것이 아니기에, 자기에게 편리한 코드보다는 범용적으로 보편화된 코드를 사용하는 것이 좋을 것입니다.

 

그렇다면, 과연 두번째 방법은 무엇일지 궁금하지 않습니까? 공개합니다. 이것이 바로 심플함의 예술성이 느껴지는 ToString() 메서드의 오버로드 버전을 이용하는 방법입니다

 

private void Page_Load(object sender, System.EventArgs e)
{
     // 두번째 방법 - 심플함의 파워를 느낄 수 있다.
     string strDate = DateTime.Now.ToString("yyyy.MM.dd.HH.mm.ss");
     Label1.Text = strDate;
}

 

DateTime 구조체의 ToString() 메서드는 포맷 문자열을 지정할 수 있는 오버로드된 버전을 제공하기에 이러한 구성이 가능합니다. ToString() 메서드의 첫 번째 인자로 쓰인 문자열이 바로 포맷 문자열인데, 위 코드의 경우는 우리가 그 포맷 문자열을 사용자 정의한 것입니다 문자열에서 yyyy는 4자리의 년도를 의미하고, MM은 두자리의 월을, dd는 두자리의 날짜값을 의미합니다. 또한, HH는 24시간 기준의 현재 시간 값이구요. mm과 ss는 각각 두자리의 현재 분, 초 값을 의미하는 것이 됩니다.(이 각각의 키워드들에 대해서는 곧 알아보게 됩니다)

 

사실, 위에서 이야기한 두가지 방법의 성능적인 차이는 매우 미비한 편입니다. 사실, 의외이기는 했지만 제 노트북에서의 테스트 결과 거의 차이가 없었습니다. 다음은 그 화면을 캡춰한 것인데요

 

 

 

첫번째 스타일인 일명 '코드량 압박 코드'의 처리 시간은 0.000062 , 그리고 두번째 스타일인 '심플 코드'의 경우는 0.000053 임을 볼 수 있습니다. 현재 캡춰한 화면은 이러하지만, 여러번 테스트를 반복해보니 그 시간의 차이는 거의 없는 편이더라구요... -_-+ 제 노트북에서의 테스트 기준으로 평균 차이가 0.00001 내인 편이었거든요...

 

고로, 두 방법의 성능상의 차이는 크게 없다고 생각해도 되겠지만, 여전히 첫번째 방법은 코드의 량도 많고, 유지보수가 힘들고, 가독성이 떨어진다는 단점이 존재합니다. 해서, 저는 여러분에게 두번째 방법을 소개하고 있구요. 그것을 추천하는 것이죠.

 

그렇다면, 그 두 번째 방법, 즉, 출력 포맷을 우리가 지정해서 사용할 수 있는 방법에 대해서 조금 더 알아보도록 해요. 일단, 그 포맷 문자열에 사용할 수 있는 키워드(공식 명칭은 '서식 패턴')에는 어떠한 것들이 있는지 한번 표로써 살펴보시죠~

 

서식 문자 출력 값
d 일(日)자. 숫자 하나인 일자에는 앞에 0이 붙지 않습니다.

예 : 1, 2, 3, 4, 10, 12, 33 (엇? 갑자기 로또가 떠오른다!!)
dd 두개의 문자로 구성되는 일(日)자.

예 : 01, 02, 07, 12, 44, 45
ddd 약식 요일 이름

예(국가/언어 설정이 '영어'인 경우) : "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
예(국가/언어 설정이 '한국어'인 경우) : "일", "월", "화", "수", "목", "금", "토"
dddd 자세한 요일 이름

예(국가/언어 설정이 '영어'인 경우) :
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
예(국가/언어 설정이 '한국어'인 경우) :
"일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"
M 월(月) 숫자. 숫자 하나인 경우 앞에 0이 붙지 않습니다.

예 : 1, 2, 3, 4, 10, 12
MM 두개의 문자로 구성되는 월(月) 숫자.

예 : 01, 02, 07, 12
MMM 약식 월 이름

예(국가/언어 설정이 '영어'인 경우) :
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
예(국가/언어 설정이 '한국어'인 경우) :
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"
MMMM 자세한 월 이름

예(국가/언어 설정이 '영어'인 경우) :
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
예(국가/언어 설정이 '한국어'인 경우) :
"1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"
y 세기 표시 제외 연도로 연도의 마지막 한자리 숫자를 의미한다.
세기 부분을 제외한 연도가 10보다 작은 경우 연도 앞에 0이 붙지 않는다.

예 : 1, 2, 5, 9
yy 세기 표시 제외 연도로 연도의 뒤쪽 두자리 숫자를 의미한다
세기 부분을 제외한 연도가 10보다 작은 경우 연도 앞에 0이 붙는다

예 : 01, 02, 05, 09
yyyy 세기를 포함한 네 자리 숫자 연도

예 : 2003
h 12시간제 시간. 숫자 하나인 시간에는 앞에 0이 붙지 않습니다.

예 : 1, 2, 05, 09
hh 12시간제 시간. 숫자 하나인 시간에는 앞에 0이 붙습니다.

예 : 01, 02, 05, 09
H 24시간제 시간. 숫자 하나인 시간에는 앞에 0이 붙지 않습니다.

예 : 1, 2, 16, 23
HH 24시간제 시간. 숫자 하나인 시간에는 앞에 0이 붙습니다.

예 : 01, 02, 16, 23
m 분. 숫자 하나인 분에는 앞에 0이 붙지 않습니다.

예 : 1, 7, 34, 59
mm 분. 숫자 하나인 분에는 앞에 0이 붙습니다.

예 : 01, 07, 34, 59
s 초. 숫자 하나인 초에는 앞에 0이 붙지 않습니다.

예 : 1, 7, 34, 59
ss 초. 숫자 하나인 초에는 앞에 0이 붙습니다.

예 : 01, 07, 34, 59

 

위의 경우는 우리가 출력될 날짜 포맷을 직접 정의해 보았지만, 사실 DateTime 값의 형식은 위와 같은 사용자 지정 패턴 말고도, DateTimeFormatInfo 속성에 저장된 표준을 지정하여 사용할 수도 있습니다. 다시 말해서, 자주 사용되는 서식 패턴이 이미 어느 정도 정의 되어져 있기에, 그 패턴을 사용해도 된다는 이야기이지요. 이미 저장되어져 있는 표준 패턴에는 다음과 같은 것들이 있습니다.여기서는 일부만 보여드립니다.

 

서식 문자 관련 서식 패턴의 예(en-US) 설명
d MM/dd/yyyy  
D dddd, dd MMMM yyyy  
f dddd, dd MMMM yyyy HH:mm 전체 날짜 및 시간
F dddd, dd MMMM yyyy HH:mm:ss 자세한 날짜와 자세한 시간
g MM/dd/yyyy HH:mm 간단한 날짜와 간단한 시간
G MM/dd/yyyy HH:mm:ss 간단한 날짜와 자세한 시간
m, M MMMM dd  
r, R ddd, dd MMM yyyy HH':'mm':'ss 'GMT'  
s yyyy'-'MM'-'dd'T'HH':'mm':'ss  
t HH:mm  
T HH:mm:ss  
u yyyy'-'MM'-'dd HH':'mm':'ss'Z'  
U dddd, dd MMMM yyyy HH:mm:ss  
y, Y yyyy MMMM  

 

이를 사용하기 위해서는 각 표준 패턴에 해당하는 '서식 문자'를 ToString() 메서드의 첫번째 인자로 지정해 주시면 됩니다. 예를 들어, 기존의 코드를 다음과 같이 바꾸면

 

private void Page_Load(object sender, System.EventArgs e)
{
     // 두번째 방법 - 심플함의 파워를 느낄 수 있다.
     string strDate = DateTime.Now.ToString("d");
     Label1.Text = strDate;
}

 

이는 위의 표에서 이야기한대로, MM/dd/yyyy 형태의 날짜 포맷을 나타내게 되는 것입니다. ^^;

해서 결과는 다음과 같아지죠.

 

 

엇? 나의 경우는 위와 같이 나오지 않고, 다음과 같이 나온다??? 이게 어찌된 일이지? 하시는 분들도 있을 겁니다

 

 

차이가 생기는 이유는 간단합니다. 위의 표에서 설명드린 포맷은 여러분의 웹 어플리케이션(ASP.NET 프로그램)이 'en-US' 이라는 '언어-국가/지역 코드'를 가질 경우의 포맷이기 때문이죠. 하지만, 여러분은 대부분 Korean 버전의 .NET Framework를 사용하고 있을 것이기에, 기본적인 '언어-국가/지역 코드'가 ko-KR 로 설정되어 있어서 출력 문자 포맷이 다른 것 뿐입니다.

 

만일, "그렇다면, 나두 '언어-국가/지역 코드'를 'en-US'인 상태로 결과를 확인하고 싶어요~" 라고 한다면... 다음과 같이 현재 웹 어플리케이션의 web.config 파일을 <globalization > 요소 구역을 다음과 같이 편집하시면 됩니다. 즉, '언어-국가/지역'을 설정하는 culture 의 값을 eu-US로 맞추어주기만 하면 되는 것이죠~

 

<globalization
     requestEncoding="utf-8"
     responseEncoding="utf-8"
     culture="en-US" />

 

하지만, 여러분 중에는 "난 en-US 기준의 출력 포맷은 관심없어, ko-KR 기준의 포맷을 알려달라구~" 하시는 분들이 있을 수도 있을 것 같습니다. 사실, 그 부분은 여러분이 직접 각각의 '서식 문자'를 지정해서 출력되는 결과를 확인함으로써 알아보시기를 추천합니다. 그 정도의 성의는 보여주셔야 할 것이라는 생각이거든요.

 

하지만, 또.. 뭐 야박하게 여러분에게만 그것을 떠넘기자는 그것도 좀 그러네요. 어차피 이 결과는 자주 찾아보게 될 것 같다는 생각두 있구요... 해서, 정리해 보았습니다. ^^

 

다음은 ko-kR culture 일 경우의 패턴 문자열이옵니다. ^^;

서식 문자 출력 값
d 2003-02-20
D 2003년 2월 20일 목요일
f 2003년 2월 20일 목요일 오후 1:29
F 2003년 2월 20일 목요일 오후 1:29:24
g 2003-02-20 오후 1:29
G 2003-02-20 오후 1:29:24
m 혹은 M 2월 20일
r 혹은 R Thu, 20 Feb 2003 13:29:24 GMT
s 2003-02-20T13:29:24
t 오후 1:29
T 오후 1:29:24
u 2003-02-20 13:29:24Z
U 2003년 2월 20일 목요일 오전 4:29:24
y 혹은 Y 2003년 2월

 

자료출처 : http://taeyo.pe.kr/

쌈꼬쪼려 소백촌닭

Posted by SB패밀리

protected string strOrig = "test your coding";
  protected string strResult = "";
  protected string reOrig = "";
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   //암호화

   byte[] byteOrig = new byte[strOrig.Length];
   for (int i = 0; i < strOrig.Length; i++)
   {
    byteOrig[i]= Convert.ToByte(Convert.ToChar(strOrig.Substring(i,1)));
   }
   this.strResult = Convert.ToBase64String(byteOrig);//결과

  //해독

   this.reOrig = System.Text.Encoding.Default.GetString(System.Convert.FromBase64String(strResult));

  }

Posted by SB패밀리

LPSTR : char *

LPCSTR : const char *

LPCTSTR : const char * 또는 const WCHAR *



WORD : 보통 2바이트의 부호없는 정수형   (*.word형을 string형으로 바꾸기 string := IntToStr(word); )

DWORD : 4바이트의 부호없는 정수형    DWORD unsigned long

그럼, WORD와, int의 차이점은...

WORD는 4글자 int는 3글자
typedef unsigned short         WORD;    //WORD는 예약어가 아니죠  (typedef는 변수부분)

                                                                                               (cf.define은 전처리 부분)


*.단순참고

char, unsigned char, signed char : 1 byte
short, unsigned short : 2 bytes
int, unsigned int : 4 bytes
long, unsigned long : 4 bytes
float : 4 bytes
double : 8 bytes
long double : 10 bytes

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



1. C 자료형
   char(1), short(2), int(4), long(4), float(4), double(8), bool
   문자: char



 
2. Win32 API 자료형
   BYTE(1, unsigned char), WORD(2, unsigned short), UINT(4, unsigned int)
   DWORD(4, unsigned long), LONG(4,long), BOOL
   문자: UCHAR(unsigned char)
   Handle: 대상을 구분하는 4바이트 정수(HWND,HDC...)
  
   MBCS문자(열)  유니코드문자(열)  자동매크로문자(열)
   ------------         -----------------        ------------------
   char   wchar_t    TCHAR
   LPSTR(char*)         LPWSTR(wchar_t*)         LPTSTR
   LPCSTR(const char*)  LPCWSTR(const wchar_t *) LPCTSTR
 
   .LPTSTR과 LPCTSTR를 사용하는 것이 좋음.
   .OLECHAR(wchar_t), LPOLESTR(LPWSTR), LPCOLESTR(LPCWSTR), OLESTR(x) = _T(x)




3. COM 스트링
   BSTR : 문자열 길이를 시작전에 저장하고, 이어서 유티코드문자열을 저장하는 방식
   LPCWSTR -> BSTR : 생성안됨. 생성함수를 이용해야 함.
                     BSTR bstr = sysAllocString(L"HELLO HI"); // 메모리 할당
                                 sysFreeString(bstr);         // 메모리 제거



   VARIANT: 문자열이 들어올때 BSTR과 동일

VARIANT 자료형은 각 개발 환경의 자료형의 차이를 해결하기위하여 제공되는 공용체 이다.


예제) INT nIndex 와 CString strItem이 있다고 가정하고...


// VARIANT 형 선언

VARIANT varIndex, varItem;


// VARIANT type 지정
varIndex.vt = VT_INT;
varItem.vt = VT_BSTR;


// VARIANT 값 할당.
varIndex.intVal = nIndex;
varItem.bstrVal = strItem.AllocSysString();// CString을 bstr로 변환하는 함수


// VARIANT 인자를 사용하여 함수 호출




 

4. CRT(c runtime library)지원 스트링 클래스 (#include "comdef.h")
   4-1. _bstr_t
        :BSTR 랩퍼 클래스, 메모리 할당/제거를 자동으로 수행
      
        . LPCSTR, LPCWSTR  -> _bstr_t
          :_bstr bstr = "hello hi";
        . _bstr_t -> LPCSTR, LPCWSTR
          : LPCSTR psz1 = (LPCSTR)bs1;
        . _bstr_t -> BSTR
          : 형변환 안됨. 함수이용
            BSTR bstr = bs1.copy();
            sysFreeString(bstr); // BSTR은 사용후 메모리 해제를 해야함.

   4-2. _variant_t
        :VARIANT 랩퍼 클래스, 메모리 할당/제거 자동 수행
       
        . LPCSTR, LPCWSTR -> _variant_t
          : _variant_t v1 = "hello hi";
        . _variant_t -> _bstr_t -> LPCSTR,LPCWSTR
          : LPCSTR psz1 = (LPCSTR)(_bstr_t)v1;




5. ATL 지원 스트링클래스
   5-1 CComBSTR : BSTR랩퍼클래스, 메모리할당/제거 자동 수행
      . LPCSTR, LPCWSTR -> CComBSTR
        CComBSTR bs1 = "hello hi";
      . CComBSTR -> BSTR -> LPCWSTR
        BSTR bs = (BSTR)bs1;
      . BSTR -> CComBSTR
        CComBSTR bs2; bs2.Attach(W2BSTR(L"hello hi");

   5-2 CComVariant: VARIANT랩퍼클래스, 메모리할당/제거 자동 수행
      . LPCSTR, LPCWSTR -> CComVariant
        CComVariant bs1 = "hello hi";
      . CComVariant -> CComBSTR -> BSTR -> LPCWSTR
        CComBSTR bs = bs1.bstrVal;



6. STL 스트링
   6-1 string
       . LPCSTR -> string
         string str = "hello hi";
       . string -> LPCSTR (형변환 안됨. 함수 이용)
         LPCSTR psz = str.c_str();
   6-2 wstring
       . LPCWSTR -> wstring
         wstring str = "hello hi";
       . wstring -> LPCWSTR
         LPCWSTR psz = str.c_str();



7. MFC 스트링
   . LPCSTR, LPCWSTR -> CString
     CString str = "hello hi";
   . CString -> LPCTSTR
     1. LPCTSTR lpsz = (LPCTSTR)str;
     2. LPTSTR lptsz = str.getBuffer(0), str.ReleaseBuffer(); (올바른 사용)
     3. LPTSTR lptsz = (LPTSTR)(LPCTSTR)str; (잘못된 표현)
     4. CString -> BSTR
        BSTR bstr = str.AllocSysString(); sysFreeString(bstr);



8. VC7 스트링
   String: .Net에서 새로 정의한 스트링 클래스
          String* s1 = S"hello hi";
          CString s2(s1);
    

9. ETC

   1. BSTR --> LPCSTR
      USES_CONVERSION;
      LPCSTR lpaszTemp = OLE2CA(bstrValue);

   2. LPCSTR --> BSTR
      USES_CONVERSION;
      BSTR bstrTemp = ::SysAllocString(A2COLE(lpaszValue));

   3. CString --> LPCSTR
      1) ANSI 버전
          LPCSTR lpaszTemp = (LPCSTR) strValue;
      2) UNICODE 버전
          USES_CONVERSION;
          LPCSTR lpaszTemp = T2CA((LPCTSTR) strValue);

   4. LPCSTR --> CString
      1) ANSI 버전
         CString strTemp = lpaszValue;
      2) UNICODE 버전
          USES_CONVERSION;
          CString strTemp = A2CT(lpaszValue);

Posted by SB패밀리