인자가 자기 영광으로 모든 천사와 함께 올 때에 자기 영광의 보좌에 앉으리니 모든 민족을 그 앞에 모으고 각각 분별하기를 목자가 양과 염소를 분별하는 것같이 하여 양은 그 오른 편에, 염소는 그 왼편에 두리라, 때에 임금이 그 오른편에 있는 자들에게 이르시되 내 아버지께 복 받을 자들이여 나아와 창세로부터 너희를 위하여 예비 된 나라를 상속하라 (마태복음 25: 31-34)



● Michelangelo. The Last Judgment. 1534-1541. Fresco. Sistine Chapel, Vatican.


또 왼편에 잇는 자들에게 이르시되 저주를 받은 자들아 나를 떠나 마귀와 그 사자들을 위하여 예비된 영영한 불에 들어가라
내가 주릴 때에 너희가 먹을 것을 주지 아니하였고 목마를 때에 마시게 하지 아니하였고 나그네 되었을 때에 영접하지 아니하였고 벗었을 떼에 옷 입히지 아니하였고 병들었을 때와 옥에 갇혔을 때에 돌아보지 아니하였느니라 하시니
저희도 대답하여 가로되 주여 우리가 어느 때에 주의 주리신 것이나 목마르신 것이나 나그네 되신 것이나 벗으신 것이나 병드신 것이나 옥에 갇히신 것을 보고 공양치 아니하더이까 이에 임금이 대답하여 가라사대 내가 진실로 너희에게 이르노니 이 지극히 작은 자 하나에게 하지 아니한 것이 곧 내게 하지 이니한 것이니라 하시리니 저희는 영벌에, 의인들은 영생에 들어가리라 하시니라 (마태복음 25: 41-46)


● Michelangelo. The Last Judgment (detail). 1534-1541. Fresco. Sistine Chapel, Vatican.



● Giotto. The Last Judgment. 1304-1306. Fresco. Capella degli Scrovegni, Padua, Italy.

Active-X  컨트롤에 Safe 옵션을 추가하는 방법은 컨트롤이 인스톨 되거나 그 후에  Certains function을 컨트롤이 직접 호출하는 방법과 그 컨트롤에 직접 IObjectSafety 인터페이스를 직접구현하는 방법 두가지가 있습니다.




1. << 레지스터에 등록하는 동안 컨트롤을 마크하는 방법 >>





2. << IobjectSafety 인터페이스를 구현하는 방법 >>




 

출처 - http://www.madchick.com/Default.asp?Page=2&SubPage=2&3thPage=1
주  제 : ActiveX 컨트롤에서의 IObjectSafety 인터페이스 구현


helpers.h 입니다.

 

// Helpers.h : Declarations of object safety category helper functions

 

#include "comcat.h"

 

HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription);

HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid);

 

 

helpers.cpp 입니다.

 

// Helpers.cpp : Implementation of of object safety category helper functions

// Copied from ActiveX SDK

 

#include "stdafx.h"

 

#include "helpers.h"

 

/////////////////////////////////////////////////////////////////////////////

// CreateComponentCategory - Ensures component category exists in registry

// (Copied from ActiveX SDK docs)

 

HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription)

{

 

    ICatRegister* pcr = NULL ;  // interface pointer

    HRESULT hr = S_OK ;

 

    hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,

            NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);

    if (FAILED(hr))

        return hr;

 

    // Make sure the HKCR\Component Categories\{..catid...}

    // key is registered

    CATEGORYINFO catinfo;

    catinfo.catid = catid;

    catinfo.lcid = 0x0409 ; // english

 

    // Make sure the provided description is not too long.

    // Only copy the first 127 characters if it is

    int len = wcslen(catDescription);

    if (len>127)

        len = 127;

    wcsncpy(catinfo.szDescription, catDescription, len);

    // Make sure the description is null terminated

    catinfo.szDescription[len] = '\0';

 

    hr = pcr->RegisterCategories(1, &catinfo);

    pcr->Release();

 

    return hr;

}

 

 

 

/////////////////////////////////////////////////////////////////////////////

// RegisterCLSIDInCategory - Registers class clsid as implementing category catid

// (Copied from ActiveX SDK docs)

 

HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)

{

// Register your component categories information.

    ICatRegister* pcr = NULL ;

    HRESULT hr = S_OK ;

    hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,

            NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);

    if (SUCCEEDED(hr))

    {

       // Register this category as being "implemented" by

       // the class.

       CATID rgcatid[1] ;

       rgcatid[0] = catid;

       hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);

    }

 

    if (pcr != NULL)

        pcr->Release();

  

    return hr;

}

 

<OBJECT id=ns classid="clsid:0848EBD0-1368-4F1B-A9F4-43571D152ACD" width='600' height='150' >
    <PARAM NAME='UserID'  VALUE='11'>
    <PARAM NAME='UserPW'  VALUE='11'>
</OBJECT>

 웹페이지에서 시작시 아이디,패스워드를 주어서 ActiveX에서 아큐먼트로 받고 싶은데??


* 멤버변수로 사용하는 경우

    1. ctrl + w 를 눌러서 클래스위저드를 띄운다..

    2. automation 탭에서 Add Property 버튼 클릭..

    3. implementation은 Member variable 선택,
       사용할 이름 입력, 데이터형 선택 OK 클릭..
  
       예) sUserName 을 입력하고, CString을 선택
           했다고 하죠..
  
    4. DoPropExchange 함수에
       PX_String(pPX, _T("sUserName"), m_sUserName) ;
       라고 입력..
  
    5. HTML 혹은 ASP 파일에서
       object 태그 사이에
       param name="sUserName" value="오광섭" 추가..
  

* Get/Set 메쏘드를 사용하는 경우

    1. ctrl + w 를 눌러서 클래스위저드를 띄운다..

    2. automation 탭에서 Add Property 버튼 클릭..

    3. implementation은 Member variable 선택
       사용할 이름 입력, 데이터형 선택 OK 클릭..
  
       예) sNickName 을 입력하고, BSTR을 선택
           했다고 하죠..
      
    5. CString m_sNickName ; 선언
  
    6. DoPropExchange 함수에
       PX_String(pPX, _T("sNickName"), m_sNickName) ;
       라고 입력..
      
    7. Get/Set 메쏘드에 코딩 추가..
   
           BSTR CTestCtrl::GetSNickName()
           {
               CString strResult;
               // TODO: Add your property handler here
               strResult = m_sNickName ;

               return strResult.AllocSysString();
           }

           void CTestCtrl::SetSNickName(LPCTSTR lpszNewValue)
           {
               // TODO: Add your property handler here
               m_sNickName = lpszNewValue ;

               SetModifiedFlag();
           }
  
    8. HTML 혹은 ASP 파일에서
       object 태그 사이에
       param name="sNickName" value="미친병아리" 추가..



MFC ActiveX에서 PARAM 가능하게 하기
======================================================
MFC에서 프로퍼티를 만든 후

VARIANT COMXCtrl::GetSOMDIP()
{
        _variant_t vVal( m_Env.sOMDIP );
        // SysAllocString 된 것을 삭제하지 않고 그냥 넘겨주어야 한다.
        return vVal.Detach();
}

void COMXCtrl::SetSOMDIP(const VARIANT FAR& newValue)
{
        // TODO: Add your property handler here
        m_Env.sOMDIP = (LPCTSTR)_bstr_t( _variant_t( newValue ) ) ;
        SetModifiedFlag();
}

VARIANT COMXCtrl::GetNOMDPort()
{
        _variant_t vVal( m_Env.nOMDPort );
        return vVal.Detach();
}

void COMXCtrl::SetNOMDPort(const VARIANT FAR& newValue)
{
        // TODO: Add your property handler here
        m_Env.nOMDPort = _variant_t( newValue );
        SetModifiedFlag();
}

...
아래처럼 프로퍼티 변환 함수에 해당 프로퍼티에 대한것을
기입한다.


void COMXCtrl::DoPropExchange(CPropExchange* pPX)
{
        ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
        COleControl::DoPropExchange(pPX);

        // TODO: Call PX_ functions for each persistent custom property.
        if (pPX->GetVersion() == (DWORD)MAKELONG(_wVerMinor, _wVerMajor))
        {
                PX_String(pPX,_T("sOMDIP"), m_Env.sOMDIP );
                PX_Long(pPX,_T("nOMDPort"), m_Env.nOMDPort );
                PX_String(pPX,_T("sGroupDIP"), m_Env.sGroupDIP );
                PX_Long(pPX,_T("nGroupDPort"), m_Env.nGroupDPort );
                PX_String(pPX,_T("sSiteID"), m_Env.sSiteID );
                PX_String(pPX,_T("sServerID"), m_Env.sServerID );
                PX_String(pPX,_T("sUserID"), m_Env.sUserID );
                PX_String(pPX,_T("sPasswd"), m_Env.sPasswd );
        }

}



그렇게 하면 아래처럼 웹페이지에서 쓸 수 있게 된다.

<TD>
  <object id=omx width=400 height=500
   classid="clsid:6D2A9FCF-749F-4648-A8C8-F16300DE6FF5"
   codebase="http://localhost/ActiveApproval/ActiveApproval.cab#version=1.0.1.7"
  >
    <PARAM NAME="sOMDIP" VALUE="61.37.47.62">
    <PARAM name="nOMDPort" value="9204">
    <PARAM name="sGroupDIP" value="61.37.47.62">
    <PARAM name="nGroupDPort" value="9203">
    <PARAM name="sSiteID" value="intracool">
    <PARAM name="sServerID" value="jiran">
    <PARAM name="sUserID" value="bro">
    <PARAM name="sPasswd" value="1111">
  </object>
</TD>

출처 : http://neri.cafe24.com/menu/bbs/view.php?id=kb&page=2&sn1=&divpage=1&sn=off&ss=on&sc=on&keyword=PARAM&select_arrange=headnum&desc=asc&no=191

우리 주변에 사용되는 수많은 메모리 카드...

각 회사별, 기기별... 다양하게 별도로 따로 적용되는 메모리 카드들....

워낙 다양해서 이제는 기기 모델마다 메모리 카드의 사양을 외우고 다니지 않으면 안될 메모리 카드...

헌데, 이거 왜이리 다양하고  많은 거얌?  디카, 핸드폰, MP3, 외장메모리 등등...
각 기기 모델별로 메모리카드를 알아내고 따로 구입해야하는 내겐 번거로움이 생기고 있다. 아... 머리도 아프고... ㅡㅡ;;

예전에 PC에 쓰이는 메모리 모델명 알아내지 않고 용량만 단순히 증설하려고 구입했다가 낭패본 기억이 갑자기 생각난다... 아~~ 그 때의 아찔함이란.... ㅡㅡ;; 

그래서, 한번 인터넷에 나오는 정보들을 정리해 봤다... ^-^




1. CF 카드

콤팩트플래시(CompactFlash, 줄여서 CF)는 작은 카드 모양의 물리 인터페이스 규격, 또는 그 규격에 따라 만든 확장 카드를 뜻한다.

콤팩트플래시는 1994년에 미국의 샌디스크가 개발하였으므로, 「CompactFlash」라고 하는 이름은 샌디스크의 등록 상표이기도 하다. 때문에 다른 제조사는 상표의 사용을 피하기 위해 「CF카드」 또는 「CF」와 같이 약자로 부르는 경우가 많다.

「콤팩트」라는 이름은 확장 카드로서 작다는 것을 뜻하며, 2005년 기준으로 일반적으로 보급되어 있는 플래시 메모리 카드 중에서는 가장 크다. 제품의 치수는 Type I이 42.8mm×36.4mm×3.3mm이며, Type II가 42.8mm×36.4mm×5.5mm이다. 크기는 PC카드의 3분의 1 정도이지만, PC 카드 규격에 맞게 사양이 정해져 있기 때문에, 「PC 카드 어댑터」를 이용하면 CF카드의 50핀을 PC카드의 68핀으로 변환할 수 있다.



2. 메모리 스틱

메모리 스틱(Memory stick)은 1998년 10월 소니사에 의해 개발된 소형 메모리 카드 또는 그 규격을 말한다.

메모리 스틱은 디지털 카메라, 디지털 오디오 플레이어, 휴대 전화, 플레이 스테이션, 휴대용 기기의 기록 미디어로 주로 쓰이고 있다. 다른 메모리 카드 규격과 같이 물리적인 크기나 사양 등에 대해 몇 가지 확장 규격이 만들어졌지만, 메모리 스틱 관련 규격은 각기 차이를 이해하기 쉽지 않고, 또 옛 규격의 제품에 함께 파는 등의 이유로 2000년대 전반에는 큰 혼란이 있었다.

메모리 스틱 관련 규격은 전자적 사양부터, 원래의 메모리 스틱 계열과와 상위 규격 메모리 스틱 프로 계열로 구분된다. 프로 규격은 기존의 규격과 상위 호환이 되므로 프로 기기에서는 이전의 미디어를 이용할 수 있지만, 한편으로 기존 규격의 기기에서는 프로 미디어를 이용할 수 없다.

이 밖에도, 물리적 크기에서는 이전의 것과 듀오, 마이크로 이렇게 3가지 종류가 있지만, 작은 크기의 미디어는 작은 구조의 어댑터가 추가된 것이며, 보다 큰 미디어를 사용하기 위해 이용할 수 있다. 또, 초기의 메모리 스틱 계열의 미디어에서는 저작권 보호 기능 매직게이트(MagicGate)의 유무에서도 여러 개의 제품으로 나누어져 있었지만, 소니 제품의 경우 나중에는 모두 매직게이트(MagicGate) 호환 모델로 통일하였다.




3. SD 카드

SD 카드는 마쓰시타, 샌디스크와 도시바가 디지털 카메라, 핸드헬드 컴퓨터, PDA, GPS 장치와 같은 휴대용 장치에 사용하기 위해 개발한 플래시 (비휘발성) 메모리 카드 포맷이다. 2007년 기준으로, SD 카드의 용량은 8 메가바이트에서 16 기가바이트까지 사용할 수 있다. 일부 회사는 32 기가바이트의 SD 카드를 발표하기도 했다. 4~32 기가바이트를 갖춘 카드들은 높은 용량으로 판단되고 있다.

이 포맷은 매우 인기가 있음이 입증되었으나 오래된 장치들 사이에서와, 또 새로운 4 기가바이트 이상의 카드, SDHC 포맷을 사용할 때 호환성 문제를 일으킬 수 있으며, 이로써 소비자들에게 혼란을 야기할 수 있다.


4. 미니 SD 카드

미니SD 카드는 휴대 전화, 디지털 카메라, MP3 플레이어와 다른 대상의 제품에 사용되도록 고안된 이동식, 휴대용 메모리 장치이다.

샌디스크사가 세빗 2003에 처음 소개한 미니SD는 작은 폼 팩터에서 메모리 스틱 듀오와 xD 픽처 카드에 참여하였다.

미니SD는 2003년에 SD 협회에 SD 카드 표준의 초소형 폼 팩터 확장으로 채택되었다. 새로운 카드들이 특히 휴대 전화에 쓰이도록 고안되는 반면, 이러한 것들은 표준 SD 메모리 카드 슬롯에 장착되는 모든 장치와 호환될 수 있도록 하는 미니SD 어댑터에 포함된다.

미니SD 카드는 여러 개의 다른 제조업체에 의해 만들어지며 다른 제품 이름으로 출시된다. 호환성에는 큰 문제가 없다.

미니SD 카드는 다른 조그마한 SD 파생 제품인 마이크로SD 카드와 혼동하기 쉽다. 마이크로SD 카드는 미니SD 장치에서 어댑터를 이용하여 사용될 수 있지만, 미니SD 카드는 마이크로SD 장치에서 사용할 수 없다.


5. Micro SD 카드

마이크로SD는 이동식 플래시 메모리 카드를 위한 포맷이다. 샌디스크 트랜스플래시에서 나온 것이며 휴대용 기술에 주로 쓰이지만, 휴대용 GPS 장치, MP3 플레이어, 게임기, 확장형 USB 플래시 메모리 드라이브에도 사용할 수 있다.

2008년 현재 기준으로, 마이크로SD 카드는 가장 작은 메모리 카드이다. 가로 15mm, 세로 11mm, 높이 0.7mm인 이 카드는 SD 카드의 4분의 1 정도의 크기이다. 마이크로SD 카드를 SD, 미니SD, 메모리스틱 듀오 카드용 장치에서 사용할 수 있도록 도와 주는 어댑터도 있지만 완전한 호환성을 보장하지는 않는다.

트랜스플래시, 마이크로SD 카드는 기본적으로 같지만(트랜스플래시용 장치에 마이크로SD 카드를 장착할 수 있고, 아니면 마이크로SD 카드용 장치에 트랜스플래시를 장착할 수 있음), 마이크로SD 장치는 근거리 무선 통신도 지원한다. 2008년 7월에 CES에서 샌디스크는 12기가바이트의 마이크로SDHC 카드를 발표하였다.


6. SDHC 카드

SD 표준의 확장인 SDHC는 2 기가바이트가 넘는 용량을 사용할 수 있다. SDHC 카드는 보통 FAT32 파일 시스템으로 포맷되어 있으며, 2 기가바이트가 넘는 파티션 용량을 지원한다. SD와 같은 폼 팩터를 사용하지만 SDHC의 SD 2.0 표준은 다른 메모리 할당 방식을 사용한다. 그러므로 이론적으로 최대 용량은 2048 기가바이트에 다다른다. SDHC 카드는 SDHC 호환 장치에서만 동작하지만 표준 SD 카드는 SD와 SDHC 장치에 둘 다 사용할 수 있다. SDHC 상표는 호환성 검증을 위해 라이선스된다.

SDHC 카드는 SD 협회가 정의한 SD 속도 계열 등급을 가지고 있다. SD 속도 계열 등급은 비어있는 SDHC 카드 기준으로 다음의 최소 쓰기 속도를 지정하고 있다.:

  • 계열 2 (Class 2): 2 MB/초
  • 계열 4 (Class 4): 4 MB/초
  • 계열 6 (Class 6): 6 MB/초


 

 * 위키 참고 자료 사이트
영문 : http://en.wikipedia.org/wiki/Memory_card
국문 : http://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%B9%B4%EB%93%9C

블로거인 초보인 나... 헐...
트랙백이 먼지 찾아다니다가 개념을 잡게 해 주었삼... 감사하며... 꾸벅~~~

http://zinibox.tistory.com/trackback/244

이궁... 이렇게 하면서 글쓰는겨? 머가먼지 모르겠당.. 트랙백... OTL...

+ Recent posts