본문 바로가기

Application Programming Interface/Windows API

Visual C++로 MSXML 사용하기 #1

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 Visual C++에서 XML 파일을 읽거나 쓸 때 MSXML을 사용합니다. MSXML을 사용하기 위해서는 COM을 알아야 하는데요. COM(Component Object Model)은 서로 다른 언어로 작성된 프로그램을 가져다 사용하는 기술로 Windows 운영체제에서 쓰입니다. 요즘은 닷넷이라는 좋은 플랫폼이 있어서 COM이 지향하고자 하는 기능들을 간편하게 활용할 수 있지만, Visual C++로 COM을 사용하기 위해서는 약간 복잡한 과정을 거칩니다.

1 단계. COM을 사용하기 위해 windows.h를 include합니다.

#include <windows.h>

2 단계. CoInitialize 함수를 호출해 지금부터 COM을 사용할 것임을 운영체제에 알립니다. 매개변수로 NULL이 전달되는데 차기 버전을 위해 마련해 둔 매개변수이므로 고려하지 않습니다. 실행 결과가 HRESULT라는 형식으로 반환하는데, SUCCEEDED 매크로를 이용해 성공 또는 실패 여부를 판정할 수 있습니다.

SUCCEEDED(::CoInitialize(NULL));

3 단계. COM을 사용하는 부분이 끝났다면 CoUninitialize() 함수를 호출해 더 이상 COM을 사용하지 않을 것임을 운영체제에 알립니다.

::CoUninitialize();

여기까지의 과정을 실제 소스로 보면

/* ex01.cpp */
#include <windows.h>

int main(int argc, char * argv[])
{
if (SUCCEEDED(::CoInitialize(NULL)))
{
// COM을 사용할 본문
::CoUninitialize();
}
return 0;
}

4 단계. COM을 사용하도록 소스를 작성하였디면 MSXML 모듈을 소스로 가져옵니다. 가져오는 방법은 #import 전처리기를 사용합니다. 이때 컴퓨터에는 미리 MSXML이 설치되어 있어야 합니다. 컴파일러가 msxml.dll을 읽어 적절한 C 소스코드를 자동으로 생성합니다.

/* ex02.cpp */
#include <windows.h>
#import <msxml4.dll>

int main(int argc, char * argv[])
{
if (SUCCEEDED(::CoInitialize(NULL)))
{
::CoUninitialize();
}
return 0;
}

위 소스에서 msxml4.dll을 import하라고 지정했는데 설치된 MSXML의 버전 차이에 따른 것일 뿐, msxml.dll, msxml4.dll, msxml6.dll 등 다른 이름이 될 수도 있습니디. 이 파일이 어떤 언어로 작성되었는지 우리는 알지 못하고 알 필요도 없습니다. 다만 이 dll파일이 XML을 읽고 쓰기 위한 기능을 내장하고 있으며 COM 호출방식에 맞춰서 사용만 하면 됩니다.

(다음 포스팅에 이어집니디)