天天看点

C++ DLL 创建实例 导出类和函数

今天工作闲下来, 就试看dll编程, 好久没玩dll了,结果花了一个半小时才写出这个很简单的例子.

起初直接把子__declspec(dllexport) 放在类声明的地方. 发生 warning c4273 dll 链接不一致错误.

想了挺长时间才意识到是生成lib时并头文件和原文件中对函数的名字解析名字不一样而产生的.  才想到要定义一个宏.

有点感叹知识不用会也会老的. 下边是代码

//头文件:testclass.h

<b>[cpp]</b> view plaincopyprint?

#ifndef test_class_h__   

#define test_class_h__   

#include &lt;iostream&gt;   

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 &lt;iostream&gt;

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&lt;&lt; "this is virtualfunction()!" &lt;&lt;endl;  

        return;  

    }  

void testclass::normalfunction(void)  

        cout&lt;&lt; "this is normalfunction()!" &lt;&lt;endl;  

void func(void)  

    cout &lt;&lt; "xixi haha" &lt;&lt;endl;  

    return;  

}  

#include "testclass.h"

void testclass::virtualfunction(void)

cout&lt;&lt; "this is virtualfunction()!" &lt;&lt;endl;

return;

}

void testclass::normalfunction(void)

cout&lt;&lt; "this is normalfunction()!" &lt;&lt;endl;

void func(void)

cout &lt;&lt; "xixi haha" &lt;&lt;endl;

//调试代码

#include &lt;windows.h&gt;   

#include &lt;e://myself//myproject//网络程序//serverdll//testclass.h&gt;    

#pragma comment(lib, "e://myself//myproject//网络程序//serverdll//debug//serverdll.lib")   

//testclass类为dll导出的类   

class my : public testclass  

        virtual void virtualfunction()  

        cout&lt;&lt; "my virtualfunction()" &lt;&lt;endl;  

    void normalfunction()  

        cout&lt;&lt; "my normalfunction()" &lt;&lt;endl;  

int main(void)  

    my my;  

    testclass *tc = &amp;my;  

    tc-&gt;normalfunction();  

    tc-&gt;virtualfunction();  

    //调用导出的函数   

    func();  

    cout&lt;&lt;"liu zhiliang"&lt;&lt;endl;  

    system("pause");  

    return 0;  

#include &lt;windows.h&gt;

#include &lt;e://myself//myproject//网络程序//serverdll//testclass.h&gt;

#pragma comment(lib, "e://myself//myproject//网络程序//serverdll//debug//serverdll.lib")

//testclass类为dll导出的类

class my : public testclass

virtual void virtualfunction()

cout&lt;&lt; "my virtualfunction()" &lt;&lt;endl;

void normalfunction()

cout&lt;&lt; "my normalfunction()" &lt;&lt;endl;

int main(void)

my my;

testclass *tc = &amp;my;

tc-&gt;normalfunction();

tc-&gt;virtualfunction();

//调用导出的函数

func();

cout&lt;&lt;"liu zhiliang"&lt;&lt;endl;

system("pause");

return 0;

输出:

this is normalfunction()!  

my virtualfunction()  

xixi haha  

liu zhiliang  

请按任意键继续. . .  

继续阅读