|
原文地址:http://blog.csdn.net/xiaowei_cqu/article/details/7737682
項目中需要把一些共通的功能,抽出來做一個dll來調(diào)用。因為是以類作為單位的,資料確實少,主要參考了上面那篇博文。需要補(bǔ)充的一點是:程序能夠正常調(diào)用,但是偶爾會發(fā)生accessviolationException,查到的結(jié)果是,函數(shù)聲明時未添加_stdcall,導(dǎo)致缺省調(diào)用了_cdeccall。 具體解釋如下: 一般dll中的函數(shù)都采用extern "C" __stdcall的方式引出函數(shù)接口的,在調(diào)用DLL中的函數(shù)時,如果沒有加__stdcall和__cdecall時,缺省調(diào)用了__cdecall,而__cdecall是要由調(diào)用者清理堆棧的,而在代碼中并沒有清理堆棧的操作,只是調(diào)用了函數(shù),所以調(diào)用函數(shù)的地址可能會跑飛。不跑飛就OK,而一旦跑飛就出現(xiàn)Access violation的異常。而_stdcall是由被調(diào)用的函數(shù)清理堆棧,所以調(diào)用函數(shù)的地址不會跑飛,自然也就OK了。
創(chuàng)建DLL在VS2010中新建一個win32->dll工程。如我建立的工程名為FaceDLL 添加facedll.h的頭文件(里面定義dll的接口,調(diào)用時會用到)
之后在facedll.cpp中寫函數(shù)實現(xiàn),而且要定義為 FaceLIBDLL
生成(Build)工程,在debug文件夾中會生成相應(yīng)的DLL及LIB文件:facedll.dll facedll.lib 多個類封裝DLL封裝好一個類之后,在后面的類可以調(diào)用這個類生成的dll,再封裝新類的dll。 需要在工程中添加需要引用的頭文件,如facedll.h。在debug中拷貝facedll.lib文件。在 Properties->Linker->Input-> Additional Dependecies中添加facedll.lib(或?qū)懭窂剑?..\debug\facedll.lib") 然后一樣的方法再封裝新的類就可以了~
調(diào)用DLL調(diào)用需要各個dll的.h、.dll、.lib文件。
將頭文件添加到工程中,并#include到需要用的地方。將lib文件拷貝到項目中,并在 Properties->Linker->Input-> Additional Dependecies 中寫入:facedll.lib;heartdll.lib。
或者在程序中寫入:
|
|
|