dll 파일 생성 예
13535 단어 dll
전제: dll 생성 도구로 VS2010 사용
개술: 주로 하나의 해결 방안 중의 하나의 프로젝트를 구축함으로써 dll 파일을 어떻게 정의하고 생성하는지 보여주고, 같은 방안에서 하나의 프로젝트를 만드는 것은 주로 dll을 생성하는 데 사용된다.
간단한 구성도:
testdll (솔루션 이름)
|-makedll(dll 프로젝트 이름 생성)
|-testdll(dll 프로젝트 이름 사용)
makedll 항목:
먼저 VS를 사용하여 win32dll 항목을 자동으로 만들고 수동으로 dll을 추가합니다.h와 dll.cpp (프로젝트를 생성할 때 자동으로 발생)
dll.h소스:
1 #ifndef TEST20140529_H
2 #define TEST20140529_H
3
4 #include <iostream>
5 #include <string>
6
7 #pragma warning( disable : 4251 )
8
9 //1 can export class type
10 #ifdef TEST20140529_EXPORTS
11 #define TESTCLASS_API _declspec(dllexport)
12 #else
13 #define TESTCLASS_API _declspec(dllimport)
14 #endif // TEST20140529_EXPORTS
15
16 //2 can't export class type
17 //#ifdef TEST20140529_EXPORTS
18 //#define TESTCLASS_API extern "C" _declspec(dllexport)
19 //#else
20 //#define TESTCLASS_API extern "C" _declspec(dllimport)
21 //#endif // TEST20140529_EXPORTS
22
23
24 class TESTCLASS_API TestClass
25 {
26 private:
27 int m_nVar;
28 std::string m_strVar;
29 public:
30 void set(int );
31 void printfValue();
32 void set_str(const std::string &);
33 void printf_str();
34 };
35 TESTCLASS_API void printfValue(const int &);
36
37
38 #undef TESTCLASS_API
39
40 #endif // TEST20140529_H
dll.cpp 소스:
1 // test20140529.cpp : DLL 。
2 //
3
4 #include "stdafx.h"
5 #include "test20140529.h"
6
7 void TestClass::set(int v)
8 {
9 m_nVar = v;
10 }
11 void TestClass::printfValue()
12 {
13 std::cout << m_nVar << std::endl;
14 }
15 void TestClass::set_str(const std::string &str)
16 {
17 m_strVar = str;
18 }
19 void TestClass::printf_str()
20 {
21 std::cout << m_strVar << std::endl;
22 }
23 void printfValue(const int &v)
24 {
25 std::cout << v << std::endl;
26 }
선택할 수 있는 파일이 하나 더 있습니다.def, 이 파일의 추가는 다른 C++ 프로젝트에 영향을 주지 않지만, 다른 언어에 유용할 수 있습니다. 더욱 통용되기 위해 연구를 하고 실천을 했습니다.
dll.def 소스:
1 LIBRARY
2
3 EXPORTS
4
5 printfValue = ?printfValue@@YAXABH@Z @1
6 cls_printfValue = ?printfValue@TestClass@@QAEXXZ @2
7 cls_printf_str = ?printf_str@TestClass@@QAEXXZ @3
8 cls_set = ?set@TestClass@@QAEXH@Z @4
9 cls_set_str = ?set_str@TestClass@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z @5
설명: 앞에는 내보내기 이름 (빠질 수 없음), 뒤에는 시스템 사용자 정의 이름 (선택 가능), @ 숫자는 내보내기 순서입니다.
자세한 내용은 msdn:http://msdn.microsoft.com/en-us/library/28d6s79h.aspx
이 dll의 창설도 주로 이렇게 많다.
주: 이 항목의 설정: [설정 속성] - [c/c++] - [예처리기] 옵션에서 시스템 생성 매크로 TEST 20140529EXPORTS (유사한 것은 모두 이런 매크로가 있을 수 있다) 는 것이 있으면 사용자 정의 매크로의 번거로움을 줄일 수 있다.
testdll 항목:
개술: 이 프로젝트는 간단하고 주로 dll 파일의 호출을 실현합니다.
main 파일에서 직접 사용하면 됩니다.
main.cpp 소스:
1 #include <iostream>
2 #include "../test20140529/test20140529.h"
3
4 #pragma comment(lib, "../Debug/test20140529.lib")
5
6 int main()
7 {
8 //1
9 int v = 12;
10 printfValue(v);
11
12 //2
13 TestClass obj;
14 obj.set(v);
15 obj.printfValue();
16
17 //3
18 TestClass obj2;
19 obj2.set_str("haha");
20 obj2.printf_str();
21
22 //4
23 TestClass obj3;
24 obj3.set_str("nono");
25 obj3.printf_str();
26
27 return 0;
28 }
주: 이 항목은 주로 파일에 대한 인용과lib 라이브러리 파일에 대한 호출입니다.
자, 너무 늦었어요. 퇴근해야겠어요.
보충: 시간이 촉박해서 잘 모를 수도 있으니 정상적으로 작동할 수 있는 예시를 올려 참고로 하겠습니다.
내 블로그 파일: test20140529.rar
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LoadLibrary에서 126 오류가 발생하면 원인이되는 파일 이름을 찾는 방법Loadlibrary에서 DLL을 동적으로 로드할 때 로드 실패입니다. 실패한 파일 이름은 알려주지 않습니다. 로드하고자 하는 DLL 자체를 로드할 수 없다면 이야기는 간단하지만, 대상 DLL이 다른 DLL을 로드하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.