±â¼ú ÀÚ·á: 194873 - ¸¶Áö¸· °ËÅä: 2005³â 9¿ù 16ÀÏ ±Ý¿äÀÏ - ¼öÁ¤: 5.0

Visual C++ 6.0 ½ÇÇà ÆÄÀÏ¿¡¼­ Visual Basic ActiveX DLL¿¡ ¾×¼¼½ºÇÏ´Â ¹æ¹ý

½Ã½ºÅÛ ÆÁº» ¹®¼­ÀÇ ³»¿ëÀº ±ÍÇϰ¡ »ç¿ëÇÏ´Â ¿î¿µ üÁ¦¿Í ´Ù¸¥ ¿î¿µ üÁ¦¿¡ ÇØ´çÇÕ´Ï´Ù. ¹®¼­ ³»¿ë Áß ±ÍÇÏ¿Í °ü·Ã ¾ø´Â ºÎºÐÀº Ç¥½ÃµÇÁö ¾Ê½À´Ï´Ù.
ÀÌ ¹®¼­´Â ÀÌÀü¿¡ ´ÙÀ½ ID·Î ÃâÆÇµÇ¾úÀ½: KR194873

ÀÌ ÆäÀÌÁö¿¡¼­

¸ðµÎ È®´ë | ¸ðµÎ Ãà¼Ò

¿ä¾à

ÀÌ ¹®¼­¿¡¼­´Â Visual C++ 6.0 ½ÇÇà ÆÄÀÏ·Î Visual Basic ActiveX DLL¿¡ ¾×¼¼½ºÇÏ´Â 3°¡Áö ¹æ¹ýÀ» ¼³¸íÇÕ´Ï´Ù.

Ãß°¡ Á¤º¸

ÀÌ ¹®¼­¿¡¼­´Â Visual Basic ActiveX ±¸¼º ¿ä¼Ò¿¡ ´ëÇÑ Visual C++ Ŭ¶óÀÌ¾ðÆ® ÀÛ¼º¿¡ ´ëÇÏ¿© ¼Ò°³ÇÕ´Ï´Ù. ÀÌ¹Ì Visual C++¸¦ ´É¼÷ÇÏ°Ô ´Ù·ê ¼ö ÀÖ´Ù¸é ÂüÁ¶ Àý¿¡¼­ Á» ´õ ¼öÁØ ³ôÀº ÁÖÁ¦ÀÇ ¸ñ·ÏÀ» ÂüÁ¶ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

Visual Basic ¼­¹ö¸¦ ¸¸µå´Â ´Ü°è



  1. Visual Basic ActiveX DLL ÇÁ·ÎÁ§Æ®¸¦ ¸¸µì´Ï´Ù. ±âº»ÀûÀ¸·Î Class1ÀÌ ¸¸µé¾îÁý´Ï´Ù.
  2. ¾Æ·¡ Äڵ带 Class1¿¡ Ãß°¡ÇÕ´Ï´Ù.
          Public Function MyVBFunction(x As Integer) As Integer
             MsgBox x
          End Function
    						
  3. DLLÀ» c:\Project1.dll·Î ÄÄÆÄÀÏÇϰí Visual BasicÀ» Á¾·áÇÕ´Ï´Ù.
¹æ¹ý 1 - CreateDispatch:

  1. Visual C++À» ½ÃÀÛÇϰí File ¸Þ´º¿¡¼­ New¸¦ ¼±ÅÃÇÕ´Ï´Ù. MFC AppWizard(Exe)¿Í ÇÁ·ÎÁ§Æ® À̸§À» ¼±ÅÃÇÑ ´ÙÀ½ OK¸¦ ´©¸¨´Ï´Ù. MFC AppWizard ´ëÈ­ »óÀÚ°¡ ³ªÅ¸³ª¸é Finish¸¦ ´©¸¨´Ï´Ù. ´ÙÀ½¿¡ ³ªÅ¸³ª´Â ´ëÈ­ »óÀÚ¿¡¼­ OK¸¦ ´©¸¨´Ï´Ù.
  2. View ¸Þ´º¿¡¼­ ClassWizard¸¦ ¼±ÅÃÇϰí Class Name »óÀÚ¿¡¼­ Ctst1App¸¦ ¼±ÅÃÇÑ ´ÙÀ½ Messages »óÀÚÀÇ InitInstance¸¦ µÎ ¹ø ´©¸¨´Ï´Ù. BOOL CTst1App::InitInstance()¿¡ ´ëÇÑ Äڵ带 Ç¥½ÃÇϰí, AfxEnableControlContainer() ÁÙÀ» ã°í, ±× ¾Õ¿¡ ´ÙÀ½ ÇàÀ» Ãß°¡ÇÏ·Á¸é Edit Code¸¦ ´©¸¨´Ï´Ù.
          AfxOleInit();
  3. View ¸Þ´º¿¡¼­ ClassWizard¸¦ ¼±ÅÃÇϰí Automation ÅÇÀ» ´©¸¨´Ï´Ù. AddClass¸¦ ´©¸£°í "from a TypeLibrary"¸¦ ¼±ÅÃÇÕ´Ï´Ù. 3´Ü°è¿¡¼­ ¸¸µç Visual Basic DLLÀÎ Project1.dllÀ» ÁöÁ¤ÇÕ´Ï´Ù. Confirm Classes ´ëÈ­ »óÀÚ°¡ ³ªÅ¸³ª¸é OK¸¦ ´©¸¨´Ï´Ù. OK¸¦ ´Ù½Ã ´­·¯ MFC ClassWizard ´ëÈ­ »óÀÚ¸¦ ´Ý½À´Ï´Ù.
  4. <App Name>.cpp ÆÄÀÏÀ» ¿­°í #include "Project1.h" ÇàÀ» Ãß°¡ÇÕ´Ï´Ù. project1.dll¿¡ ¾×¼¼½ºÇÏ´Â Äڵ尡 ÀÖÀ» ¶§¸¶´Ù Project1.h¸¦ Æ÷ÇÔ½ÃÄÑ¾ß ÇÕ´Ï´Ù.
  5. ClassWizard¸¦ ´Ù½Ã ¿±´Ï´Ù. Message Maps ÅÇÀÇ Class Name »óÀÚ¿¡¼­ CAboutDlg¸¦ ¼±ÅÃÇϰí Object IDs »óÀÚ¿¡¼­ IDOK¸¦ ¼±ÅÃÇÑ ´ÙÀ½ BN_CLICKED¸¦ µÎ ¹ø ´©¸¨´Ï´Ù. ³ªÅ¸³ª´Â ´ëÈ­ »óÀÚ¿¡¼­ OK¸¦ ´©¸¥ ´ÙÀ½ OK¸¦ ´Ù½Ã ´­·¯ ClassWizard¸¦ ´Ý½À´Ï´Ù.
  6. <App Name>.cpp¸¦ ¿­°í ¾Æ·¡ÂÊÀ¸·Î ½ºÅ©·ÑÇÏ¿© CAboutDlg::OnOK()¸¦ ´ÙÀ½ ÄÚµå·Î ¹Ù²ß´Ï´Ù.
          void CAboutDlg::OnOK()
          {
    
          short st = 2;
          short st1;
          _Class1 p;
          p.CreateDispatch("Project1.Class1");
          st1 = p.MyVBFunction(&amp;st);
          CDialog::OnOK();
          }
    						
  7. .exe ÆÄÀÏÀ» ÄÄÆÄÀÏÇÕ´Ï´Ù(F7 Ű).
  8. .exe ÆÄÀÏÀ» ½ÇÇàÇϰí Help ¸Þ´º¿¡¼­ AboutÀ» ¼±ÅÃÇÕ´Ï´Ù. About »óÀÚ¿¡¼­ OK¸¦ ´©¸£¸é project1.dll¿¡¼­ ÁöÁ¤ÇÑ ¸Þ½ÃÁö »óÀÚ°¡ ³ªÅ¸³³´Ï´Ù. ´ëÈ­ »óÀÚ¸¦ ´ÝÀ¸·Á¸é Close ´ÜÃ߸¦ ´©¸¨´Ï´Ù.
¹æ¹ý 2 - #IMPORT:

  1. Visual C++ 6.0À» ½ÃÀÛÇϰí Win32 ÄÜ¼Ö ÀÀ¿ë ÇÁ·Î±×·¥À» ¸¸µì´Ï´Ù. "An Empty Project"¸¦ ¼±ÅÃÇϰí Finish¸¦ ´©¸¨´Ï´Ù.
  2. Project ¸Þ´º¿¡¼­ Add to Project¸¦ °¡¸®Å°°í New¸¦ ´­·¯ »õ C++ ¿øº» ÆÄÀÏÀ» ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡ÇÕ´Ï´Ù. »õ ¿øº» ÆÄÀÏ¿¡ ´ÙÀ½ Äڵ带 ºÙ¿© ³Ö°í ÀúÀåÇÕ´Ï´Ù.
          #include <stdio.h>
    
          // This is the path for your DLL.
          // Make sure that you specify the exact path.
    
          #import "c:\project1.dll"  no_namespace
    
          void main()
          {
           BSTR bstrDesc;
    
          try
          {
          CoInitialize(NULL);
          short st = 2;
           short st1;
          // Declare the Interface Pointer for your Visual Basic object. Here,
          // _Class1Ptr is the Smart pointer wrapper class representing the
          // default interface of the Visual Basic object.
    
          _Class1Ptr ptr;
          // Create an instance of your Visual Basic object, here
          // __uuidof(Class1) gets the CLSID of your Visual Basic object.
    
           ptr.CreateInstance(__uuidof(Class1));
           st1 = ptr->MyVBFunction(&st);
          }
          catch(_com_error &e)
          {
           bstrDesc = e.Description();
    
          }
          CoUninitialize();
          }
    						
  3. ÇÁ·ÎÁ§Æ®¸¦ ÄÄÆÄÀÏÇÏ¿© ½ÇÇàÇÕ´Ï´Ù. Project1.DLLÀÇ ¸Þ½ÃÁö »óÀÚ°¡ ³ªÅ¸³³´Ï´Ù.
#import ¸Þ¼­µå´Â Win32 ÀÀ¿ë ÇÁ·Î±×·¥, ÄÜ¼Ö ÀÀ¿ë ÇÁ·Î±×·¥ ¶Ç´Â MFC¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

¹æ¹ý 3 - ¼ø¼ö COM ÀÎÅÍÆäÀ̽º

  1. Visual C++À» ½ÃÀÛÇϰí File ¸Þ´º¿¡¼­ New¸¦ ¼±ÅÃÇÕ´Ï´Ù. MFC AppWizard(Exe)¸¦ ¼±ÅÃÇϰí tst1 ÇÁ·ÎÁ§Æ®ÀÇ À̸§À» ÁöÁ¤ÇÑ ´ÙÀ½ OK¸¦ ´©¸¨´Ï´Ù. MFC Appwizard ´ëÈ­ »óÀÚ°¡ ³ªÅ¸³ª¸é Dialog Based¸¦ ¼±ÅÃÇϰí Finish¸¦ ´©¸¨´Ï´Ù. ´ÙÀ½¿¡ ³ªÅ¸³ª´Â ´ëÈ­ »óÀÚ¿¡¼­ OK¸¦ ´©¸¨´Ï´Ù.
  2. ±âº»ÀûÀ¸·Î Resource Editor°¡ ½ÃÀ۵˴ϴÙ. ´ëÈ­ »óÀÚÀÇ ÄÁÆ®·ÑÀ» ¸ðµÎ »èÁ¦ÇÏ°í ±âº» ĸ¼Ç "Button1"À» À¯ÁöÇÑ »óÅ·ΠCommand ´ÜÃ߸¦ Ãß°¡ÇÕ´Ï´Ù.
  3. Button1À» µÎ ¹ø ´­·¯ Add Member Function ´ëÈ­ »óÀÚ¸¦ Ç¥½ÃÇÕ´Ï´Ù. OK¸¦ ´­·¯ OnButton1À̶ó´Â À̸§À» »ç¿ëÇÕ´Ï´Ù.
  4. Tools ¸Þ´º¿¡¼­ OLE/COM Object Viewer¸¦ ´©¸¨´Ï´Ù. File ¸Þ´º¿¡¼­ View Typelib¸¦ ¼±ÅÃÇÏ°í ¾Õ¿¡¼­ ¸¸µç Project1.dllÀ» ¼±ÅÃÇÕ´Ï´Ù. OpenÀ» ´­·¯ ÇØ´ç DLL¿¡ ´ëÇÑ .idl ÆÄÀÏÀ» Æ÷ÇÔÇÏ´Â ITypeLib ºä¾î¸¦ Ç¥½ÃÇÕ´Ï´Ù.
  5. .idl ÆÄÀÏÀÇ ³»¿ë(¿À¸¥ÂÊ Ã¢ÀÇ ³»¿ë)À» Ŭ¸³º¸µå¿¡ º¹»çÇÕ´Ï´Ù. Shift ۸¦ ´©¸¥ »óÅ¿¡¼­ ÇØ´ç â¿¡ ÀÖ´Â ÅØ½ºÆ®ÀÇ Ã¹ ÀÚ¿¡¼­ ¸¶Áö¸· ¹®ÀÚ±îÁö ÆäÀÌÁö À̵¿Çϰųª ½ºÅ©·ÑÇÕ´Ï´Ù. Ctrl+C¸¦ ´­·¯ Ç¥½ÃµÈ ÅØ½ºÆ®¸¦ Ŭ¸³º¸µå¿¡ º¹»çÇÕ´Ï´Ù.
  6. Visual C++ File ¸Þ´º¿¡¼­ New¸¦ ´©¸¨´Ï´Ù. New ´ëÈ­ »óÀÚ¿¡¼­ Text FileÀ» ¼±ÅÃÇϰí test1.idl ÆÄÀÏ¿¡ À̸§À» ÁöÁ¤ÇÑ ´ÙÀ½ OK¸¦ ´©¸¨´Ï´Ù.
  7. ºó ÅØ½ºÆ® ÆÄÀÏÀÌ ³ªÅ¸³³´Ï´Ù. Ŭ¸³º¸µåÀÇ µ¥ÀÌÅ͸¦ ÆÄÀÏ¿¡ ºÙ¿© ³Ö°í ÀúÀåÇÕ´Ï´Ù.
  8. Project ¸Þ´º¿¡¼­ Settings¸¦ ¼±ÅÃÇÏ°í Æ®¸® ºä¿¡¼­ tst1°ú ¿øº» ÆÄÀÏ ³ëµå¸¦ È®ÀåÇÑ ´ÙÀ½ test1.idlÀ» ¼±ÅÃÇÕ´Ï´Ù. MIDL ÅÇÀ» ´©¸£°í Output header file name »óÀÚ¿¡ test1.h¸¦ ÀÔ·ÂÇÑ ´ÙÀ½ OK¸¦ ´©¸¨´Ï´Ù.
  9. tst1Dlg.cpp¸¦ ¿­°í ´ÙÀ½ ÆÄÀÏÀ» includes ¼½¼Ç¿¡ Ãß°¡ÇÕ´Ï´Ù.
          #include <initguid.h>
          #include "test1.h"
    						
  10. View ¸Þ´º¿¡¼­ ClassWizard¸¦ ´©¸£°í Class Name »óÀÚ¿¡¼­ Ctst1App¸¦ ¼±ÅÃÇÑ ´ÙÀ½ Messages »óÀÚ¿¡¼­ InitInstance¸¦ µÎ ¹ø ´©¸¨´Ï´Ù. Edit Code¸¦ ´­·¯ ´ÙÀ½¿¡ ´ëÇÑ Äڵ带 Ç¥½ÃÇÕ´Ï´Ù.
          BOOL CTst1App::InitInstance()
    						
    ´ÙÀ½ ÇàÀ» ã½À´Ï´Ù.
          AfxEnableControlContainer();
    						
    ±× ¾Õ¿¡ ´ÙÀ½ ÇàÀ» Ãß°¡ÇÕ´Ï´Ù.
          AfxOleInit();
    						
  11. ClassWizard¸¦ ´Ù½Ã ¿±´Ï´Ù. Message Maps ÅÇÀÇ Class Name »óÀÚ¿¡¼­ CTst1Dlg¸¦ ¼±ÅÃÇϰí Object IDs »óÀÚ¿¡¼­ IDC_BUTTON1À» ¼±ÅÃÇÕ´Ï´Ù. Messages »óÀÚ¿¡¼­ BN_CLICKED¸¦ µÎ ¹ø ´©¸£°í, Edit Code¸¦ ´­·¯ void CTst1Dlg::OnButton1()¿¡ ´ëÇÑ Äڵ带 Ç¥½ÃÇÕ´Ï´Ù. OnButton1() ÇÔ¼ö¸¦ ´ÙÀ½ ÄÚµå·Î ¹Ù²ß´Ï´Ù.
          void CTst1Dlg::OnButton1()
          {
             // TODO: Add your control notification handler code here.
    
             _Class1 *pClass = NULL;
             IUnknown *pUnk = NULL;
    
          //   HRESULT hr = CoCreateInstance(CLSID_Class1,NULL,
          //   CLSCTX_INPROC_SERVER,IID__Class1,(void **)&pClass);
          //   You can directly get the Interface ID as in the previous line or
          //   you can do a QueryInterface on IUnknown to get the IID
          //   as in the following three lines:
    
          HRESULT hr = CoCreateInstance(CLSID_Class1,NULL,CLSCTX_INPROC_SERVER,
          IID_IUnknown,(void **)&pUnk);
          hr = pUnk->QueryInterface(IID__Class1,(void **)&pClass);
          pUnk->Release();
    
          // Once you have the IID, you can make use of the interface pointer
          // to access our Visual Basic DLL.
    
          short st = 2;
          short st1;
          hr = pClass->MyVBFunction(&st,&st1);
          pClass->Release();
    
          }
    						
  12. .exe ÆÄÀÏÀ» ÄÄÆÄÀÏ(F7 Ű)Çϰí ÀÀ¿ë ÇÁ·Î±×·¥À» ½ÇÇà(F5 Ű)ÇÕ´Ï´Ù. ´ëÈ­ »óÀÚ¿¡¼­ Button1À» ´©¸¨´Ï´Ù. Visual Basic DLLÀÇ ¸Þ½ÃÁö »óÀÚ°¡ ³ªÅ¸³³´Ï´Ù.

ÂüÁ¶

ÀÚ¼¼ÇÑ ³»¿ëÀº Microsoft ±â¼ú ÀÚ·áÀÇ ´ÙÀ½ ¹®¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.
178749? (http://support.microsoft.com/kb/178749/ ) MFC ¹× Çü½Ä ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¿© ÀÚµ¿È­ ÇÁ·ÎÁ§Æ®¸¦ ¸¸µå´Â ¹æ¹ý

188817? (http://support.microsoft.com/kb/188817/ ) ComCallingJava ¿¹Á¦ÀÇ VC++ MFC Ŭ¶óÀÌ¾ðÆ®¸¦ ¸¸µå´Â ¹æ¹ý




Microsoft Á¦Ç° °ü·Ã ±â¼ú Àü¹®°¡µé°ú ¿Â¶óÀÎÀ¸·Î Á¤º¸¸¦ ±³È¯ÇϽ÷Á¸é Microsoft ´º½º ±×·ì (http://support.microsoft.com/newsgroups/default.aspx) ¿¡ Âü¿©ÇϽñ⠹ٶø´Ï´Ù.

º» ¹®¼­ÀÇ Á¤º¸´Â ´ÙÀ½ÀÇ Á¦Ç°¿¡ Àû¿ëµË´Ï´Ù.
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Ű¿öµå:?
kbhowto kbinfo kbcode KB194873