MS communication control을 이용하려다 여기저기 찾아보고 해결한 것입니다.
char * 형에서 중간에 NULL 문자까지 포함시킬 수 있습니다.
참고되시기 바랍니다.
먼저 VARAIANT -> char *
unsigned char input_buf[512] = {0};
VARIANT var;
::VariantInit(&var);
var = m_cCommReceive.GetInput(); // -> 데이타를 var 형태로 받았습니다.
unsigned char HUGEP *pbstr;
HRESULT hr;
hr = SafeArrayAccessData(var.parray, (void HUGEP* FAR*)&pbstr);
unsigned long cE = var.parray->rgsabound[0].cElements;
memcpy( input_buf, pbstr, nCount ); // -> var 형을 char *로 멤카피
input_buf[nCount] = 0;
hr = SafeArrayUnaccessData(var.parray);
SendData(input_buf, nCount); // ->char * 형을 처리하기 위해 사용자마음대로의 함수로 보냄.
다음으로 char * -> VARIANT 인데, 다음의 소스를 참고 했습니다.
http://excel96.cafe24.com/moin.cgi/UsingVariant
/*http://excel96.cafe24.com/moin.cgi/UsingVariant 에서 수정*/
unsigned char* pMyOriginalArray = data;
HRESULT hr;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nLength; // -> nLength 는 char *형으로 넘겨받은 문자열의 길이
SAFEARRAY FAR* pMySafeArray;
pMySafeArray = SafeArrayCreate(VT_UI1, 1, rgsabound); // -> VT_UI1 형이 char형을 받습니다.
char* pData;
hr = SafeArrayAccessData( pMySafeArray, (void**)&pData);
memcpy(pData, pMyOriginalArray, nLength);
SafeArrayUnaccessData(pMySafeArray);
VARIANT myVariant;
myVariant.parray = pMySafeArray;
myVariant.vt = VT_ARRAY|VT_UI1;
////////////////////////////////////
SendOutput(myVariant); // -> var 형을 사용자마음대로 함수로 보냄
////////////////////////////////////
hr = SafeArrayDestroy(pMySafeArray);
'Work' 카테고리의 다른 글
| Visual Studio의 fflush 이야기 (1) | 2007/11/20 |
|---|---|
| TimeAttack (0) | 2007/03/29 |
| Buffering Error (0) | 2006/05/18 |
| Builder Listview Column Sorting (0) | 2006/03/31 |
| Variant Conversion (0) | 2006/03/31 |
| "extern C"에 대하여 (0) | 2006/03/30 |