본문 바로가기

마샬링 마샬링 라이브러리네이티브 코드와 관리되는 코드를 함께 사용하기 위해서 가장 먼저 해결되어야 할 것이, 두 시스템 간의 데이터 타입의 마샬링이다. 마샬링 라이브러리는 두 시스템간의 타입을 마샬링 하는 코드 작성에 따른 복잡성을 줄여 주는 새로운 라이브러리를 제공하고 있다. 먼저 C++에서 사용되는 문자열 형식을 모두 지원해 준다.그리고 기본적으로 지원되는 변환 이외의 변환은 개발자가 직접 추가할 수도 있다. 아래의 예는 MSDN 아티클에서 제공하는 마샬링 라이브러리를 사용하여 System::String을 char *로 변환하는 간단한 소스를 보자.#include void myfunc (String^ s) { msclr::interop::marshal_context ctx; const char *s2 = c.. 더보기
c++과 c#과의 패킷 전송시 '\0' 널문자 해결방법.. 서버는 c++ 클라이언트는 c# 일경우 c++에서 TCHAR[10] packet; ZeroMemory(packet,sizeof(packet)); stringCchCopy(packet,sizeof(packet),_T("12345678")); 이런식으로 문자열은 packet이란 배열에 입력을 하게 되면. packet[8] 과 packet[9]에는 0 값이 들어있게 됨니다. 이걸 패킷으로 전송해서 c#으로 받아 string temp = Encoding.ASCII.GetString(packet); 이렇게 받게 되면. 결과값은 "12345678\0\0" 이렇게 출력이 됨니다... 이거 해결방법은 쉽게... string temp = Encoding.ASCII.GetString(packet).trim('\0'); 더보기
콘솔 윈도우 강제종료시 이벤트 처리하기 #include BOOL CtrlHandler(DWORD fdwCtrlType) { switch(fdwCtrlType) { case CTRL_C_EVENT: case CTRL_CLOSE_EVENT: case CTRL_LOGOFF_EVENT: case CTRL_SHUTDOWN_EVENT: case CTRL_BREAK_EVENT: default: printf("종료"); } return FALSE; } int _tmain(int argc, _TCHAR* argv[]) { BOOL fSuccess = SetConsoleCtrlHandler((PHANDLER_ROUTINE)CtrlHandler,TRUE); while(1) { } if(!fSuccess) { printf("종료2"); } return 0; } 자.. 더보기