在vb,vc中呼叫vb編寫的DLL

2021-07-24 18:03:25 字數 1616 閱讀 5154

假設用vb編寫了乙個activex 元件,名稱為bioxsend,裡面生成乙個類test,類裡面有乙個方法hello(),並且已經在電腦上註冊,下面分別描述怎樣在vb和vc中呼叫。

1. vb呼叫

(1) 方法1:直接在project/reference裡引用該dll,然後在使用時宣告就可以了,**如下:

dim aa as new test

aa.hello

set aa=nothing

(2) 方法2:直接定義為object,**如下:

dim myobj as object 

set myobj   =   createobject ( " bioxsend.test" )   

myobj.hello 

set myobj   =   nothing

2. vc呼叫

由於vb生成的元件不是標準的com元件,所以不能像呼叫vc生成的元件那樣,需要一些特別的處理,還有生成的介面的名稱實際被定義為「_test」,這個千萬要注意,實現方法如下:

方法一,利用cocreateinstance

(1) 首先引用該元件

#import "g:/program/bin/12lead/bioxsend.dll" no_namespace

(2) 建立元件物件並使用

hresult hresult;

clsid clsid;

//初始化com介面

coinitialize(null);

//得到元件的clsid

hresult=clsidfromprogid(olestr("bioxsend.test"), &clsid);

//這就是我們在bioxsend.dll中定義的類

_test *t;

hresult=cocreateinstance(clsid,null,clsctx_inproc_server,__uuidof(_test),(lpvoid *) &t);

//如果初始化失敗,彈出提示對話方塊後退出程式

if(failed(hresult))

//呼叫函式

t->hello();

//釋放介面指標

t->release();

// 關閉com庫的聯接

couninitialize();

方法二,利用智慧型指標

(1) 首先引用該元件

#import "g:/program/bin/12lead/bioxsend.dll" no_namespace

(2) 利用智慧型指標

coinitialize(null);

_testptr myobj; //注意這裡,類名雖然是test,但是定義宣告應該是「_類名ptr」來定義智慧型指標物件

myobj.createinstance("bioxsend.test"); // 或 myobj.createinstance(__uuidof(_test));

myobj->hello(); //這裡使用物件方法取得當前使用者名稱,如果有字串的話vb的string 對應 vc的_btsr.

myobj.release(); //釋放智慧型指標,這步必須要做,不能是->release哦。

couninitialize(); // 關閉com庫的聯接

在VB應用程式中呼叫VC環境下開發的DLL

1.呼叫dll的優越性 動態鏈結庫 dll 作為windows作業系統的基礎,具有優越的應用效能 dll擴充套件了應用程式的特性。由於dll能夠動態地裝入程序的位址空間,因此應用程式能夠在執行時確定需要執行什麼操作,然後裝入相應的 以便根據需要執行這些操作。dll可以用多種語言進行編寫。例如用vb來...

在VB應用程式中呼叫VC環境下開發的DLL

1.呼叫dll的優越性 動態鏈結庫 dll 作為windows作業系統的基礎,具有優越的應用效能 dll擴充套件了應用程式的特性。由於dll能夠動態地裝入程序的位址空間,因此應用程式能夠在執行時確定需要執行什麼操作,然後裝入相應的 以便根據需要執行這些操作。dll可以用多種語言進行編寫。例如用vb來...

在VB應用程式中呼叫VC環境下開發的DLL

在vb應用程式中呼叫vc環境下開發的dll 1.呼叫dll的優越性 動態鏈結庫 dll 作為windows作業系統的基礎,具有優越的應用效能 dll擴充套件了應用程式的特性。由於dll能夠動態地裝入程序的位址空間,因此應用程式能夠在執行時確定需要執行什麼操作,然後裝入相應的 以便根據需要執行這些操作...