在vb,vc中调用vb编写的DLL
2010-03-26 09:44
357 查看
假设用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库的联接
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库的联接
相关文章推荐
- VS2010开发——vc++项目编写DLL提供vb.net调用
- 关于在VB.NET中调用使用VC++编写的类库dll的一点笔记
- 使用QT+MinGW编写动态库dll供VC或VB调用
- vb调用 vc 编写的DLL 联合调试
- 如何在VB中调用VC编写的DLL
- 分享如何在VB中调用VC编写的DLL
- 使用QT+MinGW编写动态库dll供VC或VB调用
- 在vb,vc中调用vb编写的DLL
- 如何在QT下调用VC/MFC编写的DLL,分为两种方式。
- 一步一步教你用VC和VB调用C DLL
- QT编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)
- VB调用Delphi编写的DLL - 1
- 如何用VB编写自己的DLL文件,并调用其中的函数
- 再谈在VB中调用VC++开发的DLL
- 可供VC调用的QT编写的界面DLL方法
- VB调用vc写的dll的某个方法时的问题
- 再谈在VB中调用VC++开发的DLL
- VC6 编写,调用 DLL
- C++ Builder调用VC编写的DLL出现'Access violation at address xxx'的解决方法
- [VB.NET]请教:vb.net调用vc写的dll出错:报尝试读取或写入受保护的内存