在vb應用程式中呼叫vc環境下開發的dll
1. 呼叫dll的優越性
動態鏈結庫(dll)作為windows作業系統的基礎,具有優越的應用效能:
dll擴充套件了應用程式的特性。由於dll能夠動態地裝入程序的位址空間,因此應用程式能夠在執行時確定需要執行什麼操作,然後裝入相應的**,以便根據需要執行這些操作。
dll可以用多種語言進行編寫。例如用vb來編寫應用程式的介面,而用c++來編寫諸如演算法、通訊之類的底層操作。
dll簡化了軟體專案的管理。如果在軟體開發過程中不同的工作小組在不同的模組上工作,那麼這個專案管理起來比較容易。
dll有助於節省記憶體。如果兩個或多個應用程式使用同乙個dll,那麼該dll的頁面只要放入ram一次,所有的應用程式都可以共享它的各個頁面。
dll有助於資源的共享。dll可以包含對話方塊模板、字串、圖示和點陣圖等資源,多個應用程式能夠使用dll來共享這些資源。
dll有助於應用程式的本地化。例如,只包含**而不包含使用者介面元件的應用程式可以載入包含本地化使用者介面元件的dll 。
dll有助於解決平台差異。不同版本的windows配有不同的函式,開發人員常常想要呼叫新的函式。但是,如果源**包含了對乙個新函式的呼叫,而應用程式將要在不能提供該函式的windows版本上執行,那麼作業系統的引導程式將拒絕執行該程序。如果將這些新函式儲存在dll中,那麼應用程式就能夠將它們載入到windows的老版本上,就可以成功地呼叫該函式。
2.找到dll的入口點
初次接觸dll的使用者經常會遇到乙個問題:在vc環境下建立的dll,在vc裡執行的好好的,可在vb應用程式中呼叫時卻老是出現"呼叫約定錯誤"、"找不到入口點"之類的錯誤。這主要是由以下疏漏造成的。
首先,要注意dll中的函式和vb中的函式宣告在名稱、返回型別、引數型別、引數個數等方面必須完全相同,尤其要注意大小寫的問題。
其次,在dll的.def檔案中必須加上入口函式。
最後,在函式定義前必須加上extern "c",_stdcall關鍵字。
具體格式可參看應用例項。
3.陣列引數在dll中的傳遞
由於dll經常用來進行一些底層的運算操作,因此應用程式常需要傳遞大量的資料給dll。在c++中,指標是進行陣列操作的最佳選擇,但vb中沒有指標的概念。這通常可用兩種方法來解決。
其一,在vb中宣告dll時,用byref來代替byval,即可將陣列指標傳遞給dll。
另外,將陣列宣告為變體型(variant),即可直接將陣列傳遞給dll。
4.應用例項
以下通過一具體例項來說明在vb中呼叫vc環境下建立的dll的過程。
建立一用於訊號處理的dll,"sigpro.dll",其中有乙個用於富氏計算的函式"fourier"。
vc中的宣告:
在"sigpro.h"中加入以下**,
extern "c"
在"sigpro.cpp"中加入以下**,
extern "c"
double export _stdcall fourier(long int *sample,int numsam,int overtoneorder,bool sinorcos)
{int i;
double result=0.0;
if(sinorcos==true)
{for(i=0;i
vb中的呼叫宣告:
public declare function fourier lib "sigpro" (byref sample() as long, byval numsam as integer, byval overtoneorder as integer, byval sinorcos as boolean) as double
在VB應用程式中呼叫VC環境下開發的DLL
1.呼叫dll的優越性 動態鏈結庫 dll 作為windows作業系統的基礎,具有優越的應用效能 dll擴充套件了應用程式的特性。由於dll能夠動態地裝入程序的位址空間,因此應用程式能夠在執行時確定需要執行什麼操作,然後裝入相應的 以便根據需要執行這些操作。dll可以用多種語言進行編寫。例如用vb來...
在VB應用程式中呼叫VC環境下開發的DLL
1.呼叫dll的優越性 動態鏈結庫 dll 作為windows作業系統的基礎,具有優越的應用效能 dll擴充套件了應用程式的特性。由於dll能夠動態地裝入程序的位址空間,因此應用程式能夠在執行時確定需要執行什麼操作,然後裝入相應的 以便根據需要執行這些操作。dll可以用多種語言進行編寫。例如用vb來...
在VC環境中除錯ISAPI應用程式
為什麼要寫這篇文章,因為實在是太苦惱了,我相信還有更多人也在苦惱,不知道怎麼除錯,現在我就為苦惱者指點一條明路吧 如果你只想簡單的除錯,也就是說不細節到每一行 的除錯,那就非常簡單,可以直接更改iis的是否快取isapi應用程式,改為否,則iis不會吧dll載入到記憶體,而是每次臨時載入,所以每次修...