[DLL] def 파일을 사용하여 dll에서 내보내기

2697 단어
모듈 정의(.def) 파일은 DLL의 다양한 속성을 설명하는 하나 이상의 Module 문을 포함하는 텍스트 파일입니다. 을 사용하지 않는 경우declspec(dllexport) 키워드에서 DLL의 함수를 내보내려면 DLL이 필요합니다.def 파일.
.def 파일에는 적어도 다음 모듈 정의 문이 포함되어 있어야 합니다.
  • 파일의 첫 번째 문은 LIBRARY 문이어야 합니다.이 문장은.def 파일은 DLL에 속하는 것으로 식별됩니다.LIBRARY 문 뒤에는 DLL 프로젝트의 이름이 표시됩니다.링크는 이 이름을 DLL의 가져오기 라이브러리에 배치합니다.
  • EXPORTS 문에는 이름이 나열되고 DLL 내보내기 함수의 일련 번호 값도 나열됩니다.함수 이름 뒤에 @ 기호와 숫자를 붙여서 함수에 번호 값을 분배합니다.번호 값을 지정할 때 번호 값의 범위는 1에서 N이어야 하며 여기서 N은 DLL 내보내기 함수의 개수입니다.
  • .def 파일의 주석은 각 주석 줄의 시작 부분에 있는 번호(;)지정하고 주석은 문장과 한 줄을 공유할 수 없습니다.

  • 새 동적 링크 라이브러리 DLL 프로젝트 만들기
    1. 정적 프로젝트 MathFucsDll 만들기
    win32 프로젝트 선택 -->MathFuncsDll 프로젝트 이름 입력 -> 다음 -> DLL 선택하기;추가 옵션에 대한 빈 항목 -> 을 선택합니다.(또는 추가 옵션을 선택하는 빈 항목을 선택하지 않아도 됩니다. 기본값입니다.)
    2. 라이브러리 함수 만들기
    //MyMathFuncs.cpp
    int nDataBase=1;//    
    int Add(int a,int b)
    {
    	return (a+b)*nDataBase;
    }
    int _stdcall Sub(int a,int b)
    {
    	return (a-b)*nDataBase;
    }
    int _cdecl Multiply(int a,int b)
    {
    	return a*b;
    }

    3. def 파일 만들기
    //MyMathFuncs.def
    //LIBRARY EXPORTS     , LIBRARY              
    ;
    LIBRARY   MathFuncsDll  
    EXPORTS
    Add @3 
    Sub @5
    Multiply @1
    nDataBase  DATA
    ;nDataBase    ,   (nDataBase);(nDataBase  data);(nDataBase  @2)  

    동적 링크 라이브러리를 참조하는 응용 프로그램 만들기


    1. 동적 링크 라이브러리를 참조하는 콘솔 응용 프로그램을 만듭니다.
    같은 해결 방안에 프로젝트 MyExecRefsDll 추가: win32 컨트롤러 프로그램 선택-> MyExecRefsDll 프로젝트 이름 입력-> 다음-> 컨트롤러 프로그램 선택;추가 옵션에 대한 빈 항목 선택 -> 완료
    2. 응용 프로그램에서 동적 링크 라이브러리 기능 사용
    프로젝트, 인용->공통속성->프레임워크와 인용->인용 추가->MathFuncsDll의 프로젝트 이름과 프로젝트 디렉터리->확인(가장 간단한 하나)
    또는 라이브러리 디렉토리 및 추가 라이브러리 추가: 항목, 속성 -> 커넥터 -> 일반 -> 추가 라이브러리 디렉토리: $(OutDir)
    항목, 속성 -> 커넥터 -> 입력 -> 추가 의존 항목:MathFuncsDll.lib;또는 코드에 #pragma comment(lib, "MathFuncsDll.lib")를 추가합니다.
    MathFuncsDll.dll은 MyExecRefsDll에 있어야 합니다.같은 디렉터리에 exe 파일
    3. 절차
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    extern int _declspec(dllimport) nDataBase;//  dll      
    //    ,  Dll        (          )
    int Add(int a,int b);
    int _stdcall Sub(int a,int b);
    int _cdecl Multiply(int a,int b);
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	nDataBase=2;
    	cout<<Add(1,2)<<endl;//6
    	cout<<Sub(3,4)<<endl;//-2
    	cout<<Multiply(4,5)<<endl;//20
    	return 0;
    }

    비교 사용declspec(dllexport) 및 사용.def 파일을 사용하여 Dll 함수의 공통점 내보내기


    동일: 항목 만들기와 동적 라이브러리 인용 동일
    다름:
    정의할 때:.def의 파일(LIBRARY EXPORTS)이 있어야 하고, 다른 하나는 함수 앞에declspec(dllexport)
    사용 시:.def는 함수를 사용하기 전에 함수 성명이 있어야 하고 을 사용해야 한다declspec(dllexport)의 헤더 파일 추가

    좋은 웹페이지 즐겨찾기