동적 링크 라이브러리가 어떻게 만들어졌는지(2)
16486 단어 declspecDLL 동적 링크 라이브러리extern-C
1. def 파일 형식으로 동적 링크 라이브러리 만들기 (기초)
여기를 클릭하여 나의 다른 블로그를 보십시오: def 파일로 동적 링크 라이브러리 만들기
_declspec(dllexport) int /*_stdcall*/ add(int a, int b)
{
return a + b;
}
_declspec(dllexport) int /*_stdcall*/ subtract(int a, int b)
{
return a - b;
}
#include <iostream>
using namespace std;
#pragma comment(lib,"Dll.lib")
//extern _declspec(dllimport) , _declspec(dllimport)
//extern add(int a, int b);
//extern subtract(int a, int b);
_declspec(dllimport) add(int a, int b);
_declspec(dllimport) subtract(int a, int b);
#define OK 0
#define ERR -1
int main()
{
int a = 100, b = 40;
cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl;
cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl;
system("pause");
return OK;
}
2.def 파일 형식으로 동적 링크 라이브러리 만들지 않음(진급1)
_declspec(dllexport) int /*_stdcall*/ add(int a, int b)
{
return a + b;
}
_declspec(dllexport) int /*_stdcall*/ subtract(int a, int b)
{
return a - b;
}
(3) h 파일 이름 지정 Dll을 추가합니다.h지금은 클라이언트에게만 사용되는,TestDll에서 사용하기 때문에가져오기임을 나타내는 declspec(dllimport)
_declspec(dllimport) int /*_stdcall*/ add(int a, int b);
_declspec(dllimport) int /*_stdcall*/ subtract(int a, int b);
#include <iostream>
#include "*/Dll.h"//
using namespace std;
#pragma comment(lib,"Dll.lib")
//extern _declspec(dllimport) , _declspec(dllimport)
//extern add(int a, int b);
//extern subtract(int a, int b);
//_declspec(dllimport) add(int a, int b);
//_declspec(dllimport) subtract(int a, int b);
#define OK 0
#define ERR -1
int main()
{
int a = 100, b = 40;
cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl;
cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl;
system("pause");
return OK;
}
3. def 파일 형식으로 동적 링크 라이브러리를 만들지 않음(진급2)
#define DLL_API _declspec(dllexport)
#include "Dll1.h"
int /*_stdcall*/ add(int a, int b)
{
return a + b;
}
int /*_stdcall*/ subtract(int a, int b)
{
return a - b;
}
(3) h 파일 이름 지정 Dll을 추가합니다.h
#ifdef DLL_API
#else
#define DLL_API _declspec(dllimport)
#endif
DLL_API int /*_stdcall*/ add(int a, int b);
DLL_API int /*_stdcall*/ subtract(int a, int b);
#include <iostream>
#include "*/Dll.h"//
using namespace std;
#pragma comment(lib,"Dll.lib")
//extern _declspec(dllimport) , _declspec(dllimport)
//extern add(int a, int b);
//extern subtract(int a, int b);
//_declspec(dllimport) add(int a, int b);
//_declspec(dllimport) subtract(int a, int b);
#define OK 0
#define ERR -1
int main()
{
int a = 100, b = 40;
cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl;
cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl;
system("pause");
return OK;
}
4.def 파일 형식으로 동적 링크 라이브러리를 만들지 않음(진급3)
#define DLL_API extern "C" _declspec(dllexport)// C
#include "Dll1.h"
int /*_stdcall*/ add(int a, int b)
{
return a + b;
}
int /*_stdcall*/ subtract(int a, int b)
{
return a - b;
}
(3) h 파일 이름 지정 Dll을 추가합니다.h
#ifdef DLL_API
#else
#define DLL_API extern "C" _declspec(dllimport)
#endif
DLL_API int /*_stdcall*/ add(int a, int b);
DLL_API int /*_stdcall*/ subtract(int a, int b);
#include <iostream>
#include "*/Dll.h"//
using namespace std;
#pragma comment(lib,"Dll.lib")
//extern _declspec(dllimport) , _declspec(dllimport)
//extern add(int a, int b);
//extern subtract(int a, int b);
//_declspec(dllimport) add(int a, int b);
//_declspec(dllimport) subtract(int a, int b);
#define OK 0
#define ERR -1
int main()
{
int a = 100, b = 40;
cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl;
cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl;
system("pause");
return OK;
}
5.def 파일 형식으로 동적 링크 라이브러리 만들지 않음(진급4)
#define DLL_API _declspec(dllexport)
#include "Dll1.h"
DLL_APPI int /*_stdcall*/ add(int a, int b)
{
return a + b;
}
DLL_API int /*_stdcall*/ subtract(int a, int b)
{
return a - b;
}
void Line:: output()
{
cout<<"void Line:: output()"<<endl;
}
void Line::test()
{
cout<<"void Line::test()"<<endl;
}
(3) h 파일 이름 지정 Dll을 추가합니다.h
#ifdef DLL_API
#else
#define DLL_API _declspec(dllimport)
#endif
int /*_stdcall*/ add(int a, int b);
int /*_stdcall*/ subtract(int a, int b);
class DLL_API Line
{
public:
void output();
void test();
}
#include <iostream>
#include "*/Dll.h"//
using namespace std;
#pragma comment(lib,"Dll.lib")
//extern _declspec(dllimport) , _declspec(dllimport)
//extern add(int a, int b);
//extern subtract(int a, int b);
//_declspec(dllimport) add(int a, int b);
//_declspec(dllimport) subtract(int a, int b);
#define OK 0
#define ERR -1
int main()
{
int a = 100, b = 40;
cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl;
cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl;
Line line;
line.output();
line.test();
system("pause");
return OK;
}