您的位置:首页 > 编程语言 > C语言/C++

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

请按任意键继续. . .
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: