C++ DLL 创建实例 导出类和函数
2015-12-12 09:23
871 查看
起初直接把子__declspec(dllexport) 放在类声明的地方. 发生 warning C4273 DLL 链接不一致错误.
想了挺长时间才意识到是生成lib时并头文件和原文件中对函数的名字解析名字不一样而产生的. 才想到要定义一个宏.
有点感叹知识不用会也会老的. 下边是代码
//头文件:testClass.h
[cpp] view
plaincopy
#ifndef TEST_CLASS_H__
#define TEST_CLASS_H__
#include <iostream>
using namespace std;
#ifdef SERVERDLL_EXPORTS //在创建产生DLL的工程中先把 SERVERDLL_EXPORTS 预定义上
#define SERVERDLL_API __declspec(dllexport)
#else
#define SERVERDLL_API __declspec(dllimport)
#endif
class SERVERDLL_API TestClass
{
public:
virtual void VirtualFunction(void);
void NormalFunction(void);
};
SERVERDLL_API void func(void);
#endif
//实现文件.testClass.cpp
[c-sharp] view
plaincopy
#include "testClass.h"
void TestClass::VirtualFunction(void)
{
cout<< "this is VirtualFunction()!" <<endl;
return;
}
void TestClass::NormalFunction(void)
{
cout<< "this is NormalFunction()!" <<endl;
return;
}
void func(void)
{
cout << "xixi haha" <<endl;
return;
}
//调试代码
[cpp] view
plaincopy
#include <iostream>
#include <windows.h>
#include <e://myself//MyProject//网络程序//ServerDLL//testClass.h>
using namespace std;
#pragma comment(lib, "E://myself//MyProject//网络程序//ServerDLL//Debug//ServerDLL.lib")
//TestClass类为DLL导出的类
class MY : public TestClass
{
public:
virtual void VirtualFunction()
{
cout<< "my VirtualFunction()" <<endl;
return;
}
void NormalFunction()
{
cout<< "my NormalFunction()" <<endl;
return;
}
};
int main(void)
{
MY my;
TestClass *tc = &my;
tc->NormalFunction();
tc->VirtualFunction();
//调用导出的函数
func();
cout<<"liu zhiliang"<<endl;
system("PAUSE");
return 0;
}
输出:
[cpp] view
plaincopy
this is NormalFunction()!
my VirtualFunction()
xixi haha
liu zhiliang
请按任意键继续. . .
想了挺长时间才意识到是生成lib时并头文件和原文件中对函数的名字解析名字不一样而产生的. 才想到要定义一个宏.
有点感叹知识不用会也会老的. 下边是代码
//头文件:testClass.h
[cpp] view
plaincopy
#ifndef TEST_CLASS_H__
#define TEST_CLASS_H__
#include <iostream>
using namespace std;
#ifdef SERVERDLL_EXPORTS //在创建产生DLL的工程中先把 SERVERDLL_EXPORTS 预定义上
#define SERVERDLL_API __declspec(dllexport)
#else
#define SERVERDLL_API __declspec(dllimport)
#endif
class SERVERDLL_API TestClass
{
public:
virtual void VirtualFunction(void);
void NormalFunction(void);
};
SERVERDLL_API void func(void);
#endif
//实现文件.testClass.cpp
[c-sharp] view
plaincopy
#include "testClass.h"
void TestClass::VirtualFunction(void)
{
cout<< "this is VirtualFunction()!" <<endl;
return;
}
void TestClass::NormalFunction(void)
{
cout<< "this is NormalFunction()!" <<endl;
return;
}
void func(void)
{
cout << "xixi haha" <<endl;
return;
}
//调试代码
[cpp] view
plaincopy
#include <iostream>
#include <windows.h>
#include <e://myself//MyProject//网络程序//ServerDLL//testClass.h>
using namespace std;
#pragma comment(lib, "E://myself//MyProject//网络程序//ServerDLL//Debug//ServerDLL.lib")
//TestClass类为DLL导出的类
class MY : public TestClass
{
public:
virtual void VirtualFunction()
{
cout<< "my VirtualFunction()" <<endl;
return;
}
void NormalFunction()
{
cout<< "my NormalFunction()" <<endl;
return;
}
};
int main(void)
{
MY my;
TestClass *tc = &my;
tc->NormalFunction();
tc->VirtualFunction();
//调用导出的函数
func();
cout<<"liu zhiliang"<<endl;
system("PAUSE");
return 0;
}
输出:
[cpp] view
plaincopy
this is NormalFunction()!
my VirtualFunction()
xixi haha
liu zhiliang
请按任意键继续. . .
相关文章推荐
- C语言解释器Java版-3-内存值管理
- C++ 模板详解(一)
- ue4中的AI和行为树(c++版)
- 【源码分享】-c++界面源代码分享
- 实战c++中的string系列--string的遍历(使用下标还是iterator)
- 实战c++中的string系列--string的遍历(使用下标还是iterator)
- c++ float精度丢失
- Effective C++ :模板类之间的继承.
- 函数指针
- [C/C++]_[初级]_[关于static修饰符的说明]
- [C/C++]_[初级]_[关于static修饰符的说明]
- C++ Operators
- VC++ 简单的打印功能(对话框模式下)
- VC++ 实现文件与应用程序关联
- 操作系统: 银行家算法的分析和代码实现(c++语言)
- C51单片机学习(一):LED和数码管静态显示
- UML之C++类间关系总结
- 在ubuntu中安装eclipse for c++
- Qt C++命名空间
- HDU 1087 Super Jumping! Jumping! Jumping! 菜鸟题解