在vc中調用vb的dll文件

      假設用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))

{

AfxMessageBox("call bioxsend.dll failed");

return;

}

//調用函數

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庫的聯接
 
本篇文章來源於:開發學院 http://edu.codepub.com   原文鏈接:http://edu.codepub.com/2010/0326/21371.php

發佈了39 篇原創文章 · 獲贊 3 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章