어디에 질문을 올려야 할지 몰라 이 곳에 올립니다. (COM 관련)

luminas의 이미지

안녕하세요, 전 전병선의 Component Development with Visual C++ & ATL이란 책을 읽고 있는 학생입니다.
내용을 읽다 보니 궁금한 부분이 생겼는데 달리 질문을 올릴 곳을 찾지 못해 이곳에 올립니다.
현재 자동화 객체를 생성하고 컨트롤러를 구현하는 것에 대해 읽고 있는데요,
책에 기술되어 있는 코드 중 이해가 안 가는 부분이 있더군요.

다음은 자동화 컨트롤러를 WTL을 사용하여 구현한 코드 중 일부입니다.

// AddFrontView.h

#import "progid:AddBack.AddBack.1" no_namespace

class CAddFrontView : public CDialogImpl, public CWinDataExchange{
enum { IDD = IDD_ADDFRONT_FORM };

...(중략)...

private:
SHORT m_AddEnd;
SHORT m_Sum;
IAddBackPtr m_pAddBack;
};

LRESULT CAddFrontView::OnInitDialog(...){
m_pAddBack = IAddBackPtr(__uuidof(CAddBack));
m_AddEnd = m_pAddBack->AddEnd;
m_Sum = m_pAddBack->Sum;
DoDataExchange(FALSE);
return 0;
}

위 코드를 보면 IAddBackPtr이라는 타입이 있다는 걸 알 수 있는데요..
이러한 타입을 자동화 컨트롤러, 객체에서도 typedef 해준 적이 없더군요.
비주얼 스튜디오에서 정의, 선언으로 이동을 선택해 봐도 typedef가
되어있는 곳을 찾을 수 없었습니다. 단, 마우스를 갖다댈 경우
"typedef _com_ptr_t<_com_IIID > IAddBackPtr"
라고 나오더군요. 저 타입이 뭔지 전혀 알 수도 없습니다만 ㅠ
자동화 객체를 컨트롤러에서 사용할 때 위와 같이 타입을 정의해준 후 uuid를 매개변수로
자동화 객체를 가져 와 사용하는 것으로 알고 있는데요, 그렇다면 위와 같이
객체를 가져와 담을 데이터 타입은 어디서 정의하는 건지 궁금하네요.

만약 소스 코드 전체가 필요하시다면 링크시켜 드리겠습니다.

thyoo의 이미지

win32 쪽 질문은 데브피아에 하시는 게 좋을 듯 합니다.

#import "progid:AddBack.AddBack.1" no_namespace
이녀석이 마법을 부립니다.

자동화 COM은 C/C++뿐만 아니라 JScript, VB, C# 심지어 Python에서까지
불러 쓸 수 있읍니다.

Header File조차 없는데
COM Object를 사용할 수 있는 까닭은 Object 자체에
type library라는 I/F정보가 들어 있고
#import가 type library를 읽어서
Header File을 만들어 주기 때문입니다.
_com_ptr_t<INTERFACE_NAME>은 그 Header File에
정의돼 있읍니다.

Header File은 Debug 또는 Release 디렉토리에 생성합니다.
___________________________________
Less is More (Robert Browning)

___________________________________
Less is More (Robert Browning)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.