国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
dll創(chuàng)建和使用

一、Dll優(yōu)點(diǎn)

簡單的說,dll有以下幾個優(yōu)點(diǎn):

1)      節(jié)省內(nèi)存。同一個軟件模塊,若是以源代碼的形式重用,則會被編譯到不同的可執(zhí)行程序中,同時運(yùn)行這些exe時這些模塊的二進(jìn)制碼會被重復(fù)加載到內(nèi)存中。如果使用dll,則只在內(nèi)存中加載一次,所有使用該dll的進(jìn)程會共享此塊內(nèi)存(當(dāng)然,像dll中的全局變量這種東西是會被每個進(jìn)程復(fù)制一份的)。

2)      不需編譯的軟件系統(tǒng)升級,若一個軟件系統(tǒng)使用了dll,則該dll被改變(函數(shù)名不變)時,系統(tǒng)升級只需要更換此dll即可,不需要重新編譯整個系統(tǒng)。事實上,很多軟件都是以這種方式升級的。例如我們經(jīng)常玩的星際、魔獸等游戲也是這樣進(jìn)行版本升級的。

3)      Dll庫可以供多種編程語言使用,例如用c編寫的dll可以在vb中調(diào)用。這一點(diǎn)上DLL還做得很不夠,因此在dll的基礎(chǔ)上發(fā)明了COM技術(shù),更好的解決了一系列問題。


二、使用dumpbin命令查看DLL中的函數(shù)

Dumpbin命令可以查看一個dll中的輸出函數(shù)符號名,鍵入如下命令:

Dumpbin –exports mylib.dll

三、VS2005創(chuàng)建Dll

win32控制臺 -> Application type 選擇 DLL, 然后點(diǎn)擊Finish

1.Mylib.h

#pragma once

extern "C" __declspec(dllexport) void FuncInDll (void);

2.Mylib.CPP

#include "stdafx.h"
#include "MyLib.h"
#include <stdio.h>

extern "C" __declspec(dllexport) void FuncInDll (void)
{
printf("FuncInDll is called!");
}


BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD ul_reason_for_call,
                       LPVOID lpReserved )
{

    return TRUE;
}

3.編譯后可生成Mylib.DLL,但是沒有MyLib.lib,可以在當(dāng)前目錄新建空文件Mylib.def,然后在工程設(shè)置Link->Module Definition File 里輸入Mylib.def

四、調(diào)用Dll,Dll調(diào)用分為2中,一種顯示調(diào)用,一種隱式調(diào)用

新建win32控制臺工程TestLib,將Mylib.DLL 和 Mylib.lib 復(fù)制到工程目錄下

1.顯示調(diào)用

#include "stdafx.h"
#include <Windows.h>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{

//定義一個函數(shù)指針
typedef void (* DLLWITHLIB )();

//定義一個函數(shù)指針變量

DLLWITHLIB pfFuncInDll = NULL;

//加載我們的dll

HMODULE hinst= ::LoadLibrary(TEXT("MyLib.dll"));

if (NULL != hinst)
{
   printf("dll loaded!\r\n");
}

//找到dll的FuncInDll函數(shù)

pfFuncInDll = (DLLWITHLIB)GetProcAddress(hinst, "FuncInDll");

//調(diào)用dll里的函數(shù)

if (NULL != pfFuncInDll)
{
   (*pfFuncInDll)();
}

return 0;
}

2.隱式調(diào)用

包含頭文件MyLib.h, TestLib.cpp鍵入如下code

#include "stdafx.h"
#include "Mylib.h"

#pragma comment(lib,"MyLib.lib")
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
FuncInDll();

return 0;
}


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
DLL編寫教程
C#中使用OpenGL:(三)將.lib文件編譯為.dll文件
EXE導(dǎo)出函數(shù)
QT導(dǎo)出dll與QT調(diào)用dll
C#調(diào)用C++類庫dll,無法找到函數(shù)入口(無法在“***.dll“中找到名為“***“的入口點(diǎn))
使用VS2013創(chuàng)建C#的dll文件
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服