Ⅰ VS2010怎麼創建DLL工程
在 Visual Studio解決方案中,新建一個類庫,在裡面寫這個類,然後生成這個類庫,得到的就是DLL,動態鏈接庫啦
Ⅱ 如何用VS2010編寫動態鏈接庫DLL
1
打開Visual Studio 2010
2
新建項目:文件》新建》項目
3
選擇Visual c++》Win32 項目》輸入項目名稱,選擇保存目錄,單擊「確定」按鈕
4
進入Win32應用程序向導,單擊「下一步」按鈕
5
應用程序類型選擇DLL,附加選項選擇空項目,單擊「完成」按鈕
6
添加新類頭文件:在項目的頭文件目錄上單擊滑鼠右鍵》添加》新建項
7
已安裝的模板選擇Visual C++》頭文件》輸入文件名稱,單擊「添加」按鈕
8
添加新類源文件:在項目的源文件目錄上單擊滑鼠右鍵》添加》新建項
9
已安裝的模板選擇Visual C++》c++文件》輸入文件名稱,單擊「添加」按鈕
10
為新類添加內容。內容如下:
頭文件simpleDLL.h:
11
源文件simpleDLL.cpp:
12
生成解決方案,OK,下一篇講的單元測試用例,調用DLL測試正確性
Ⅲ VC2010 C++ 如何編寫一個 簡單的DLL(動態鏈接庫) C++大牛 請進
下面示範一下用VS2010編寫純DLL,就是非ATL,MFC。
第一步:新建工程->選擇WIN32->WIN32 項目->選擇DLL,並且把下面的 空項目 勾選上
第二步:再新建一個.cpp文件 裡面編寫你的Dll具體內容
第三步:編寫一個.def主要用來解決編碼問題
好了,這就基本上是完成了Dll編寫了。
如果說的太詳細了,我怕這頁面容不下額。
我以前寫過這方面的文章,你可以去參看一下:
鉤子編程(HOOK) 屏蔽所有按鍵滑鼠及系統功能鍵:http://blog.csdn.net/qingjun/article/details/25861615
Ⅳ vs2010怎麼編譯生成dll文件
可以在開始建立新項目的時候選擇DLL類型進行編寫
一般情況下有四種可選的類型:windows應用程序,控制台應用程序,DLL,靜態庫。
當完成DLL的編寫之後,點擊菜單欄【生成】->【生成解決方案】然後進入該解決方案源文件夾下找到bin->Debug會發現DLL文件已經生成。
Ⅳ 如何把dll文件添加到vs2010編寫的程序中
根據你工程的配置拷到debug文件夾(或者release文件夾)下
找找你exe文件在哪裡(因為可能有不止一個debug文件夾,放到有exe的那個裡面
Ⅵ 如何vs2010mfc調用matlab 2010生成dll進行編程
通常在實現圖像處理的演算法時我們使用Matlab編程,因為它具有豐富的庫函數以及操作方便,然而在工程項目中通常使用C/C++語言。如果我們將matlab代碼完全重寫成C++代碼會很麻煩,最好的辦法是藉助matlab與C/C++介面將.m程序轉成dll文件!
一、使用matlab將.m轉成dll文件
1、在命令行中輸入mex -setup
提示你是否要在本地安裝matlab compilers,然後選擇compiler類型,有matlab自帶的編輯器以及檢測到的其他編輯器,比如「Microsoft Visual C/C++ version 6.0 in E:\Program Files\Microsoft Visual Studio」,根據自己實際情況選擇。
2、在命令行中輸入mbuild -setup
這里的選項和上面類似,依次選擇環境確定。
3、生成dll文件
一句命令mcc -W cpplib:add -T link:lib add.m
前面的add表示生成的dll文件名,後面的add.m顧名思義是.m文件名。生成後會多出8個文件,有用的是add.ctfadd.dll add.lib add.h4個文件,據說新版的Matlab不會生成.ctf文件。
二、VC6.0中調用生成的dll文件
上面生成的dll文件,我們可以藉助VC6.0的Depends工具查看導出函數名,但是我們要調用導出函數必須要知道函數的形參返回類型等,這里要藉助.h文件,它包含了導出函數的聲明,下面以實例來講解使用方法:
1、add.m文件
function [a,b]=add(x,y)
a=2*x+y;
b=3*y;
end
注意了add函數有兩個返回值,可以猜測一下在C++中是如何處理的;
2、add.h文件
截取其中一段關鍵代碼如下:
extern void add(int nargout, mwArray& a, mwArray& b
, const mwArray& x, const mwArray& y);
實際上函數的返回是變相的放到形參中的,依次是輸出參數個數,輸出參數,輸入參數。PS 現在做的這個項目中用戶自定義演算法dll使用的規則和這里類似!
3、C++中調用dll文件
(1)新建空工程,將上面提及的4個文件放到工程目錄下;
(2)VC++目錄中包含目錄:matlab 內的include目錄
比如我的是 E:\MATLAB7\extern\include
(3)VC++目錄中庫目錄:matlab 內的lib目錄
E:\MATLAB7\extern\lib\win32\microsoft\msvc60,要根據VC++版本修改!
(4)工程屬性-》連接-》輸入-》附加依賴項
輸入:add.lib mclmcrrt.lib mclmcr.lib,第一個是生成的。或者在預處理中加入下面代碼
#pragma comment(lib, "mclmcrrt.lib")
#pragma comment(lib, "mclmcr.lib")
#pragma comment(lib, "add.lib")
4、C++代碼
#include <iostream>
#include "add.h"
using namespace std;
int main()
{
if(!addInitialize())
{
cout<<"initilize failed!!!"<<endl;
return -1;
}
mwArray a(1,1,mxDOUBLE_CLASS);
mwArray b(1,1,mxDOUBLE_CLASS);
a(1,1)=20;
b(1,1)=30;
mwArray x(1,1,mxDOUBLE_CLASS);
mwArray y(1,1,mxDOUBLE_CLASS);
//輸出參數個數,輸出參數,輸入參數。
add(2,x,y,a,b);
double *i=new double;
double *j=new double ;
x.GetData(i,1);
y.GetData(j,1);
cout<<"x="<<*i<<" y="<<*j<<endl;
getchar();
return 0;
}
注意:addInitialize()一定要!
Ⅶ vs2010怎麼調試帶dll的程序
1.打開Visual Studio 2010
2
新建項目:文件》新建》項目
選擇Visual c++》Win32 項目》輸入項目名稱,選擇保存目錄,單擊「確定」按鈕
進入Win32應用程序向導,單擊「下一步」按鈕
應用程序類型選擇DLL,附加選項選擇空項目,單擊「完成」按鈕
添加新類頭文件:在項目的頭文件目錄上單擊滑鼠右鍵》添加》新建項
已安裝的模板選擇Visual C++》頭文件》輸入文件名稱,單擊「添加」按鈕
添加新類源文件:在項目的源文件目錄上單擊滑鼠右鍵》添加》新建項
已安裝的模板選擇Visual C++》c++文件》輸入文件名稱,單擊「添加」按鈕
為新類添加內容。內容如下:
頭文件simpleDLL.h:
源文件simpleDLL.cpp:
步驟閱讀
生成解決方案,OK,下一篇講如何用VS2010編寫動態鏈接庫DLL的單元測試用例,調用DLL測試正確性
Ⅷ 如何用VS2010編寫動態鏈接庫DLL的單元測試用例
在添加新項目中選擇其它語言->Visual C++->Win32,選擇Win32 控制台應用程序,設置名稱:simpleDLLTest。
單擊確定,在出現的Win32 應用程序向導的概述對話框中點擊下一步。
在應用程序設置中,選擇應用程序類型下的控制台應用程序,單擊完成創建項目。
在控制台應用程序中使用類庫的功能:為SimpleDLLTest.cpp添加內容。
引用simpleDLL項目。右鍵單擊SimpleDLLTest項目,選擇項目依賴項;依賴於窗口中勾選SimpleDLL,單擊確定。
設置SimpleDLLTest項目為活動項目。右鍵單擊SimpleDLLTest項目,選擇設為啟動項目。
Ⅸ vs2010怎麼調用.dll和.lib
C++ 調用.lib的方法:
一: 隱式的載入時鏈接,有三種方法
1 設置工程的 Projects來載入DLL的lib文件
打開工程的 Projects菜單,然後在Linker/Additional Library Directories中加入lib文件所在的路徑,在Input/Additional Dependencies加入lib文件名稱,如(my.lib) ,然後在要使用該函數的地方加上該LIB的頭文件,如#include "..\lib.h"即可(沒有頭文件當然就不用了),而且應用程序運行時也需要dll文件。
32 通過程序代碼的方式
加入預編譯指令#pragma comment (lib,"*.lib"),這種方法優點是可以利用條件預編譯指令鏈接不同版本的LIB文件。因為,在Debug方式下,產生的LIB文件是Debug版本,如Regd.lib;在Release方式下,產生的LIB文件是Release版本,如Regr.lib。然後在首先要使用該函數的地方加上該LIB的頭文件,如#include "..\lib.h"即可(沒有頭文件當然就不用了)。
當應用程序對鏈接庫的LIB文件載入後,還需要把鏈接庫對應的頭文件(*.h)包含到其中,在這個頭文件中給出了鏈接庫中定義的函數原型。
二, 顯式的調用鏈接庫
隱式鏈接雖然實現較簡單,但除了必須的*.dll文件外還需要DLL的*.h文件和*.lib文件,在那些只提供*.dll文件的場合就無法使用,而只能採用顯式鏈接的方式。這種方式通過調用API函數來完成對DLL的載入與卸載,能更加有效地使用內存,在編寫大型應用程序時往往採用此方式。這種方法編程具體實現步驟如下:
①使用Windows API函數Load Library或者MFC提供的AfxLoadLibrary將DLL模塊映像到進程的內存空間,對DLL模塊進行動態載入。
②使用GetProcAddress函數得到要調用DLL中的函數的指針。
③不用DLL時,用Free Library函數或者AfxFreeLibrary函數從進程的地址空間顯式卸載DLL。
例:在應用程序中調用dll文件
——在應用程序中要首先裝入dll後才能調用導出表中的函數,例如用mfc
創建基於對話框的工程test,並在對話框上放置"load"按鈕,先添加裝載代碼。
1.首先在testdlg.cpp的首部添加變數設置代碼:
//設置全局變數glibsample用於存儲dll句柄
HINSTANCE glibsample=null; //如果定義成HANDLE類型,則出錯
//第二個變數showme是指向dll
庫中showme()函數的指針
typedef int(* Showme)(void);
Showme showme;
2.利用classwizard為"load"按鈕添加裝載dll的代碼
void ctestdlg::onloadbutton()
{
//要添加的代碼如下
if(glibsample!=NULL)
{
AfxMessageBox("the sample.dll has already been load.");
return;
}
//裝載sample.dll,未加路徑,將在三個默認路徑中尋找 (1)windows的系統目錄:\windows\system;
//(2)dos中path所指出的任何目錄;
//(3)程序所在的目錄;
glibsample=Loadlibrary("sample.dll");
//返回dll中showme()函數的地址
showme=(Showme)GetProcAddress(glibsample,"showme");
靜態鏈接庫LIB和動態鏈接庫DLL的區別
1.什麼是靜態連接庫,什麼是動態鏈接庫
靜態鏈接庫與動態鏈接庫都是共享代碼的方式,如果採用靜態鏈接庫,則無論你願不願意,lib 中的指令都全部被直接包含在最終生成的 EXE 文件中了。但是若使用 DLL,該 DLL 不必被包含在最終 EXE 文件中,EXE 文件執行時可以「動態」地引用和卸載這個與 EXE 獨立的 DLL 文件。靜態鏈接庫和動態鏈接庫的另外一個區別在於靜態鏈接庫中不能再包含其他的動態鏈接庫或者靜態庫,而在動態鏈接庫中還可以再包含其他的動態或靜態鏈接 庫。靜態鏈接庫與靜態鏈接庫調用規則總體比較如下。
對於靜態鏈接庫(比較簡單):
首先,靜態鏈接庫的使用需要庫的開發者提供生成庫的.h頭文件和.lib文件,應用程序運行時還依賴.dll文件。
生成庫的.h頭文件中的聲明格式如下:
extern "C" 函數返回類型 函數名(參數表);
在調用程序的.cpp源代碼文件中如下:
#include "..\lib.h"
#pragma comment(lib,"..\\debug\\libTest.lib")
//指定與靜態庫一起鏈接
第二,因為靜態鏈接庫是將全部指令都包含入調用程序生成的EXE文件中。因此如果用的是靜態鏈接庫,那麼也就不存在「導出某個函數提供給用戶使用」的情況,要想用就得全要!要不就都別要!:)
對於動態鏈接庫:
動態鏈接庫的使用需要庫的開發者提供生成的.lib文件,.dll文件和*.h文件或者只提供dll和*.h文件。
*.h文件主要是知道函數原型使用。
首先我們必須先注意到DLL內的函數分為兩種:
(1)DLL 導出函數,可供應用程序調用;
(2)DLL 內部函數,只能在 DLL 程序使用,應用程序無法調用它們。
因此調用程序若想調用DLL中的某個函數就要以某種形式或方式指明它到底想調用哪一個函數。
Ⅹ 如何vs2010mfc調用matlab生成dll進行編程
首先matlab要安裝64位的,一般在64位系統下默認安裝64位。
在Matlab中運行mbuild -setup,選擇64位的編譯器。這個要配合vs2010的安裝進行,vs2010中需要有64的編譯器。
首先,寫一個很簡單的加法函數:
function [c] =Add(a, b);
c = a + b;
保存為Add.m
然後進行編譯,命令如下:
mcc -W cpplib:libAdd -T link:lib Add
其中,mcc是matlab提供的編譯命令,此命令的幫助說明如下:
-W lib:string link:lib
-W是控制編譯之後的封裝格式,cpplib,是指編譯成C++的lib,cpplib後面是指編譯的庫的名字,-T表示目標,link:lib表示要連接到一個庫文件的目標,目標的名字是後面的Add,即自定義m函數的名字。
運行完之後,你的目錄下面,將會出現一些文件:
libAdd.cpp
libAdd.lib
libAdd.dll
libAdd.h等
libAdd.dll是編譯好的動態庫,Add這個函數封裝在裡面,libAdd.h是對應的頭文件,在C裡面調用這個函數的時候,需要include這個頭文件,在這個頭文件的最後,你可以看到下面的內容:
externLIB_libAdd_CPP_API void MW_CALL_CONV Add(int nargout, mwArray& c
, const mwArray&a
, constmwArray& b);
這就是Add的C函數的聲明。
nargout表示輸出變數的個數
a,b,c就是對應了m函數的幾個變數
注意,a,b,c三個變數的類型是mwArray,這是matlab提供的一個特殊的變數類型(在7.0的版本,編譯之後,變數類型是mxArray)。