<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>좋은생각 - c++ category</title>
  <link>http://goodidea.blogsite.org/categories/programming/cplusplus/</link>
  <description>크게 성공한 사람은 작은 성공을 계속하는 사람일 뿐이다. -- 크리스토퍼 몰리</description>
  <language>ko</language>
  <copyright>고진혁</copyright>
  <lastBuildDate>Tue, 22 Sep 2009 02:25:53 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>std::basic_string을 VARIANT의  bstrVal 타입에 대입하기와  반대로 VARIANT의 bstr</title>
    <link>http://goodidea.blogsite.org/2007/09/19/1190187822544.html</link>
    
      
        <description>
          &lt;strong&gt;std::basic_string을 VARIANT의  bstrVal 타입에 대입하기와  반대로 VARIANT의 bstrVal을 std::basic_string을 넣기 예제    -- 작성자 goodidea.blogsite.org: 고진혁&lt;br /&gt;
&lt;br /&gt;
&lt;/strong&gt;&lt;br /&gt;
보통 IDispatch 를 통해 외부에 interface로 호출할때  VARIANT로  값을 넘기고 받게 되는데 이때 문자열처리예제이다.&lt;br /&gt;
&lt;br /&gt;
아래는 IE에서 띄운 ActiveX 에서 javascript 함수쪽에 이벤트를 발생해서 다시 javascript 함수결과를 받아서 처리하는경우이다.&lt;br /&gt;
&lt;br /&gt;
void  foo::sample( int messageType, std::basic_string&lt;char&gt; *message){&lt;br /&gt;
&lt;br /&gt;
VARIANT    vtT[1];  // 리턴용&lt;br /&gt;
VARIANT rgargs[2]; // 파라메터용&lt;br /&gt;
&lt;br /&gt;
rgargs[1].vt =VT_INT;&lt;br /&gt;
rgargs[1].intVal=messageType;&lt;br /&gt;
&lt;br /&gt;
rgargs[0].vt =VT_BSTR;&lt;br /&gt;
&lt;font color=&#034;#ff0000&#034;&gt;&lt;strong&gt;       // 이부분은 std::basic_string 을 bstrVal 로 대입할때&lt;br /&gt;
&lt;/strong&gt;&lt;/font&gt;        rgargs[0].bstrVal=SysAllocString( _bstr_t(message-&amp;gt;c_str()));&lt;br /&gt;
&lt;br /&gt;
(*message)=&amp;quot;기본메시지&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
if (m_dispEvents)&lt;br /&gt;
{&lt;br /&gt;
if (SUCCEEDED(DsoDispatchInvoke(m_dispEvents, NULL, SOME_EVENT_ID, 0, 2, rgargs, &amp;amp;vtT[0])))&lt;br /&gt;
{&lt;br /&gt;
char buf[2048];&lt;br /&gt;
&lt;br /&gt;
// 핵심은 이부분이다.    이벤트 결과로 받은 bstrVal을 std::basic_string으로 넣는경우이다.            &lt;br /&gt;
wcstombs(buf,vtT[0].bstrVal,2048);&lt;br /&gt;
&lt;br /&gt;
(*message)=buf;&lt;br /&gt;
&lt;br /&gt;
&lt;font color=&#034;#ff0000&#034;&gt;&lt;strong&gt;             // 받은곳에서 클리어   ActiveX 에서 브라우져쪽에 javascript를 호출해서 javascript 함수내에서 문자열을 되돌린경우 이에대한 메모리 해제책임은 넘겨받은 쪽에있다.&lt;/strong&gt;&lt;br style=&#034;font-weight: bold;&#034; /&gt;
&lt;/font&gt;            VariantClear(&amp;amp;vtT[0]);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}else{&lt;br /&gt;
&lt;br /&gt;
(*message) = &amp;quot;invoke error&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
** 하여간 c나 c++ 은  타입처리가 정말이지... 뭣 같다... java가 좋아..&lt;br /&gt;
&lt;/char&gt;
        </description>
      
      
    
    
    
    <category>c++</category>
    
    <comments>http://goodidea.blogsite.org/2007/09/19/1190187822544.html#comments</comments>
    <guid isPermaLink="true">http://goodidea.blogsite.org/2007/09/19/1190187822544.html</guid>
    <pubDate>Wed, 19 Sep 2007 07:43:42 GMT</pubDate>
  </item>
  
  </channel>
</rss>
