COM(Component Object Model)은 DirectX의 프로그래밍 언어 독립성과 하위 호환성을 가능하게 하는 기술이다. C++ 클래스로 간주하고 사용해도 무방하기 때문에 주로 COM 객체라고 흔히 부른다.
COM 객체는 COM 인터페이스라고도 불린다. 사용자는 COM의 대부분의 세부사항을 볼 수 없다. 그저 사용자가 알아야 할 것은 필요한 COM 객체를 가리키는 포인터를 특별한 함수를 이용해서, 또는 다른 COM 인터페이스의 메서드를 이용해서 얻는 방법뿐이다.
C++처럼 사용하는 방법과 유사하게 COM 객체를 사용할 수 있지만, C++과 다르게 COM 객체는 new나 delete를 이용하여 생성, 삭제를 할 수 없다. 반드시 생성을 위한 별도의 API 함수를 써야하며 그 인터페이스의 Release 메서드를 호출해주어야 한다. (모든 COM 인터페이스는 IUnknown이라는 COM인터페이스의 기능을 상속하는데, 여기에 Release라는 메서드를 제공한다.)
사용자는 COM 인터페이스 포인터를 AddRef 메서드를 사용하여 다른 변수에 복사할 수 있다. 이때 참조 횟수가 1증가한다. 또한 Release()를 호출하면 참조 횟수가 1감소한다. COM 객체는 참조 횟수가 0이 되면 메모리에서 해제된다.