<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    1.創(chuàng)建dll工程

    以創(chuàng)建win32 dll程序?yàn)槔话阌袃煞N方式:

    一種是建立lib鏈接方式的dll(靜態(tài)鏈接,使用的時(shí)候需要lib)

    #ifdef __cplusplus 

    #define EXPORT extern "C"__declspec(dllexport)

    #else

    #define EXPORT __declspec(dllexport)

    #endif

    EXPORT int HelloWorld()

    {

    cout << "hello world" << endl;

    return 0;

    }

    第二種是為工程創(chuàng)建def文件,生成不需要libdll文件:

    如下:(先生成一個(gè)def文件)

    LIBRARY "computer"

    EXPORTS

    add PRIVATE

    而在代碼里只需要用:

    DllMain 前面加上你自己要導(dǎo)出的函數(shù):

    int add(int x,int y)

    return(x + y);

    }

    而在使用的時(shí)候:

    HMODULE hDll = ::LoadLibrary(TEXT("computer.dll"));

    //typedef int pHelloWorld();

    //pHelloWorld *pHello = (pHelloWorld *)::GetProcAddress(hDll, "HelloWorld");

    typedef int (*pHelloWorld)();

    pHelloWorld pHello = (pHelloWorld)::GetProcAddress(hDll, "HelloWorld");

    int a = pHello();

    2.上面是最簡(jiǎn)單的方式,弊端別人可以輕易的使用我們的dll。

    如果我們要想著封裝下免得被其他人隨意使用,于是就有了導(dǎo)出函數(shù)指針,創(chuàng)建對(duì)象的思路了...具體闡述如下:

    創(chuàng)建一個(gè)接口文件,供使用者參考。dll里面提供導(dǎo)出函數(shù)指針,創(chuàng)建這個(gè)接口的現(xiàn)實(shí)類對(duì)象,利用這個(gè)對(duì)象就可以使用其中的功能了。

    a ) 創(chuàng)建一個(gè)publish文件(提供給使用者)

    比如: computer_def.h

    class Icomputer
    {
    public:
        
    virtual int add(int a, int b ) = 0;
        
    virtual void del() = 0;
    };

    當(dāng)然不要忘記書寫你的def文件:

    LIBRARY    "computer"
    EXPORTS
    DllGetClassObject    PRIVATE


    在dll中:

    class Ccomputer : public Icomputer
    {
    public:
        
    virtual int add(int a , int b)
        {
            
    return a + b;
        }
        
    virtual void del()
        {

            delete 
    this;
        }

    };

    HRESULT __stdcall DllGetClassObject(Icomputer
    ** ppv)
    {
        
    if( ppv == NULL )
            
    return E_INVALIDARG;

        
    *ppv = (Icomputer*)(new Ccomputer());

        
    if*ppv == NULL )
            
    return E_OUTOFMEMORY;

         
    return S_OK;

    }


    完成接口實(shí)現(xiàn)。提供導(dǎo)出函數(shù)。

    在使用的工程中,記得引入頭文件 computer_def.h文件,然后:

    Icomputer *pComputer;

            HMODULE hDll 
    = ::LoadLibrary(TEXT("computer.dll"));
            
            typedef HRESULT (__stdcall 
    *PFN_DllGetClassObject)(Icomputer** ppv);

            PFN_DllGetClassObject pDllGetClassObject 
    = (PFN_DllGetClassObject)::GetProcAddress(hDll, "DllGetClassObject");
            
            
    if(NULL == pDllGetClassObject)
            {
                
    //nRet = STATUS_SEVERITY_ERROR;
            }

            
    // 創(chuàng)建接口
            HRESULT hRet = pDllGetClassObject(&pComputer);

    使用的時(shí)候:

    int iRet = pComputer->add(iNum_1,iNum_2);

       pComputer->del();


    記得在使用完畢時(shí),FreeLibrary(hDll); 釋放資源。
    posted on 2009-08-17 23:04 -274°C 閱讀(1045) 評(píng)論(0)  編輯  收藏 所屬分類: C++

    常用鏈接

    留言簿(21)

    隨筆分類(265)

    隨筆檔案(242)

    相冊(cè)

    JAVA網(wǎng)站

    關(guān)注的Blog

    搜索

    •  

    積分與排名

    • 積分 - 914354
    • 排名 - 40

    最新評(píng)論

    主站蜘蛛池模板: 国产免费一区二区三区| 美女黄网站人色视频免费| 美女视频黄a视频全免费网站色窝 美女被cao网站免费看在线看 | 免费观看黄网站在线播放| 亚洲av无码不卡久久| 成人免费一区二区无码视频| 亚洲高清中文字幕免费| 在线免费视频一区| 久久精品亚洲日本波多野结衣 | 久久久久久久久久免免费精品| 亚洲免费日韩无码系列 | 水蜜桃亚洲一二三四在线| 久久国产精品免费专区| 久久亚洲AV成人出白浆无码国产| 久久免费看黄a级毛片| 精品久久久久久亚洲精品| 蜜桃精品免费久久久久影院| 国产精品无码亚洲一区二区三区 | 亚洲国产精品无码久久久蜜芽| 大地资源在线资源免费观看| 亚洲午夜久久久精品影院| 可以免费看黄的网站| 成a人片亚洲日本久久| 在线亚洲97se亚洲综合在线 | 久久精品无码精品免费专区| 亚洲图片激情小说| 国产午夜无码视频免费网站| 中文日本免费高清| 亚洲伊人久久精品| 亚洲精品国产福利一二区| 亚在线观看免费视频入口| 亚洲乱色熟女一区二区三区蜜臀| 亚洲午夜无码片在线观看影院猛| 一区二区三区在线免费看| 亚洲久热无码av中文字幕| 亚洲区小说区激情区图片区| 999国内精品永久免费视频| 春意影院午夜爽爽爽免费| 亚洲高清中文字幕综合网| 免费一级毛片在线观看| 69视频免费在线观看|