在vb,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 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库的联接 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |