在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

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

studyandhappy

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值