18:07 2003-12-3
今天,仿照著書,我使用vc編了一個動態連結程式庫(dll)--a.dll,然後將它複製到windows/system/目錄下面,之後建立了一個vb程式,並在程式中聲明了a.dll中的函數add(),實現兩個整形數的加法運算。
實現過程如下:
一、建立dll
開啟vc,建立一個基於API的DLL.
---- 1.在FILE- >NEW- >PROJECTS中選擇"WIN32 Dynamic-Link Library"在Project Name中輸入 "a"按OK
---- 2.在FILE- >NEW- >FILES中選擇C++ SOURCE FILE,在FILE中輸入a.cpp,按OK
---- 3.在FILE- >NEW- >FILES中選擇TEXT檔案,在FILE中輸入a.h,按OK
---- 4.在FILE- >NEW- >FILES中選擇TEXT檔案,在FILE中輸入a.def,按OK
---- 5.源檔案:
| 代碼 |
//--------------------------- //a.cpp #include < windows > WINAPI int add(int a,int b) { return (a+b); } //--------------------------- //a.h WINAPI int add(int a,int b); //--------------------------- //a.def LIBRARY "a";指出DLL的名字 DESCRIPTION 'a Windows Dynamic Link Library' ;描述DLL的用途(此句可選) EXPORTS add;匯出函數的名字 |
------6.編譯成a.dll
------7.將a.dll複製到windows/system/目錄下面
二、建立vb程式
在form1中輸入
| 代碼 |
Option Explicit Private Declare Function add Lib "a.dll" (ByVal a As Integer, ByVal b As Integer) As IntegerPrivate Sub Command1_Click() Text3.Text = Str(add(Val(Text1.Text), Val(Text2.Text))) End Sub
|
程式介面如:
我在編程過程中遇到的問題:
在將a.dll複製到程式目錄下之後(此時我沒有將a.dll複製到windows/system/目錄下面),運行程式,結果報錯!如:
後來我將a.dll複製到E:盤,將
| 代碼 |
| Private Declare Function add Lib "a.dll" (ByVal a As Integer, ByVal b As Integer) As Integer改為Private Declare Function add Lib "E:/a.dll" (ByVal a As Integer, ByVal b As Integer) As Integer |
,再次運行程式,也成功了!
不知道這是什麼原因,書上說通常調用DLL時所需的DLL檔案必須位於以下三個目錄之一:
(1)Windows的系統目錄:/windows/system;
(2)DOS中path所指出的任何目錄;
(3)程式所在的目錄。
不知道我在滿足第三個條件的情況下,為什麼會出錯?=================================================
21:36 2003-12-3
今天晚上,我到圖書館去看書,終於明白了為什麼下午的程式會出錯了.
最主要的原因是因為按F5執行程式時,程式還是處於調試階段,所以它找不
到a.dll,想到這裡,我把程式MAKE為應用程式,終於一切正常了。真是感到很欣
慰~
==========================此文最早發在刺客之光網站http://www.thugx.com/main/index.php?showtopic=3250==========================