z

Dll Class Exports

개발/Windows 2006. 11. 24. 15:02

출처 : MSDN '97

INFO: __declspec(dllexport) Replaces __export in 32-bit VC++


Last reviewed: September 30, 1997

Article ID: Q107501


이 기사의 정보는 다음에 적용된다 :

Microsoft Visual C++ 32-bit Edition, versions 1.0, 2.0, 4.0, 5.0

SUMMARY(요약)

Windows compiler를 위해 Visual C++과 함께 제공되는 __export 키워드는 Microsoft Visual C++ 32비트 컴파일러에서는 퇴색되었다. 이것의 Win32를 위한 적절한 기능은 __declspec을 dllexport 속성과 함께 사용하면서 달성될 수 있다. 4.0 버전의 Visual C++ 32-bit edition에서는 __export(혹은 _export) 키워드를 포함하는 컴파일링 코드는 다음 warnig 중 하나를 일으킨다:

C4236: nonstandard extension used : '__export' is an obsolete keyword,

  see documentation for __declspec(dllexport)

  -또는-

  C4226: nonstandard extension used : '__export' is an obsolete

  keyword

__export(혹은 _export) 키워드를 포함하는 컴파일링 코드는 1.0이나 2.x버전의 32비트 Visual C++에서 C4226 warning을 일으킨다.

MORE INFORMATION

__declspec 생성자는 Microsfot Win32 Software Development Kit(SDK)에 제공되는 툴로서 지원되지 않는다.

DLL 소스 코드를 Windows에서 Win32로 포팅할 때, __export의 각 인스턴스를 __declspec(dllexport)의 인스턴스로 각각 대체한다. __declspec(dllexport) 키워드는 데이터, 함수, 클래스, 클래스 멤버 함수를 익스포트하는데 사용될 수 있다. 예를 들어 :

/* exported function */

  __declspec( dllexport ) void func();


  /* exported data */

  __declspec( dllexport ) int i;


  // exported class

  class __declspec( dllexport ) DLLClass

  {

     ...

  };


  class DLLClass

  {

  public:

      // exported member function

      __declspec( dllexport ) void MemberFunction( void );

  };


아래의 샘플 코드는 __declspec(dllexport)와 __declspec(dllimport) 저장 클래스 속성을 DLL과 EXE에서 상대적으로 사용함으로써 클래스와 클래스 멤버 함수를 익스포트하는 법을 설명한다.


Sample Code

  /* DLL Sample: TESTDLL.CPP

  /* Compile options needed: /D"_X86" /MT TESTDLL.CPP /link

  /*                  /DLL /OUT:testdll.dll /implib:testdll.lib

  */


  #include <stdio.h>


  class DLLClass

      {

      public:

       // exported member function

       __declspec( dllexport ) void functionA( void ) {

           printf("\nIn Function A of the exported function");

       }

      };


  // exported class

  class __declspec( dllexport) ExportDLLClass

      {

      public:

       void functionB(void) {

          printf("\nIn Function B of the exported class");

       }

      };


  // exported instance of the DLLClass

  __declspec(dllexport) DLLClass test;


  /* Source that calls the DLL Sample: CALLDLL.CPP

  /* Compile options needed: /D"_X86" /D"_CONSOLE" /ML CALLDLL.CPP

  /*                  TESTDLL.LIB

  */


  #include <stdio.h>


  class DLLClass

      {

      public:

       // imported member function

       __declspec( dllimport ) void functionA( void );

      };


  class __declspec( dllimport) ExportDLLClass

      {

      public:

       void functionB(void);

      };


  __declspec( dllimport ) DLLClass test;


  void main(void)

  {

     ExportDLLClass TestClass;


     test.functionA();

     TestClass.functionB();

  }


REFERENCES

익스포트에 대한 더 많은 정보를 원하면, 다음 단어로 Microsoft Knowledge Base에서 검색하라

__export and def and prolog and dllexport

dllexport와 dllimport 저장 클래스 속성을 사용해 Win32를 위한 DLL을 생성하는 데 대한 더 많은 정보를 원한다면, Visual C++ 32-bit Edition과 함게 제공되는 "Programming Techniques" 매뉴얼의 Chapter 4를 참조하거나, Visual C++ Books Online에서 dllexport나 dllimport, export를 검색해 보라. > Visual Workbench(역자주 : Visual Studio메뉴 의미하는 듯)에서 Help를 선택하고, Keyword Search를 고른다.


Additional query words: 8.00 9.00

Keywords : CLngIss kbfasttip

Version : WINDOWS NT:1.0,2.0,4.0,5.0;

Platform : NT WINDOWS

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: September 30, 1997

ⓒ 1998 Microsoft Corporation. All rights reserved. Terms of Use

AND