今天工作闲下来, 就试看dll编程, 好久没玩dll了,结果花了一个半小时才写出这个很简单的例子.
起初直接把子__declspec(dllexport) 放在类声明的地方. 发生 warning c4273 dll 链接不一致错误.
想了挺长时间才意识到是生成lib时并头文件和原文件中对函数的名字解析名字不一样而产生的. 才想到要定义一个宏.
有点感叹知识不用会也会老的. 下边是代码
//头文件:testclass.h
<b>[cpp]</b> view plaincopyprint?
#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
#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);
//实现文件.testclass.cpp
<b>[c-sharp]</b> view plaincopyprint?
#include "testclass.h"
void testclass::virtualfunction(void)
{
cout<< "this is virtualfunction()!" <<endl;
return;
}
void testclass::normalfunction(void)
cout<< "this is normalfunction()!" <<endl;
void func(void)
cout << "xixi haha" <<endl;
return;
}
#include "testclass.h"
void testclass::virtualfunction(void)
cout<< "this is virtualfunction()!" <<endl;
return;
}
void testclass::normalfunction(void)
cout<< "this is normalfunction()!" <<endl;
void func(void)
cout << "xixi haha" <<endl;
//调试代码
#include <windows.h>
#include <e://myself//myproject//网络程序//serverdll//testclass.h>
#pragma comment(lib, "e://myself//myproject//网络程序//serverdll//debug//serverdll.lib")
//testclass类为dll导出的类
class my : public testclass
virtual void virtualfunction()
cout<< "my virtualfunction()" <<endl;
void normalfunction()
cout<< "my normalfunction()" <<endl;
int main(void)
my my;
testclass *tc = &my;
tc->normalfunction();
tc->virtualfunction();
//调用导出的函数
func();
cout<<"liu zhiliang"<<endl;
system("pause");
return 0;
#include <windows.h>
#include <e://myself//myproject//网络程序//serverdll//testclass.h>
#pragma comment(lib, "e://myself//myproject//网络程序//serverdll//debug//serverdll.lib")
//testclass类为dll导出的类
class my : public testclass
virtual void virtualfunction()
cout<< "my virtualfunction()" <<endl;
void normalfunction()
cout<< "my normalfunction()" <<endl;
int main(void)
my my;
testclass *tc = &my;
tc->normalfunction();
tc->virtualfunction();
//调用导出的函数
func();
cout<<"liu zhiliang"<<endl;
system("pause");
return 0;
输出:
this is normalfunction()!
my virtualfunction()
xixi haha
liu zhiliang
请按任意键继续. . .