今天工作閑下來, 就試看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
請按任意鍵繼續. . .