VC 调用 VB 的DLL
来源:互联网 发布:sql join where 区别 编辑:程序博客网 时间:2024/04/28 01:39
在stdafx.h文件中
#import "VB_ADO_DBConnect.dll"using namespace VB_ADO_DBConnect;
先编译一下,会得到2个文件,分别是“vb_ado_dbconnect.tlh”与“vb_ado_dbconnect.tli”
其中".til"文件是调用的方法,".tlh"文件是函数的定义,这里我们可以视它为.h文件
HRESULT hresult;CLSID clsid;CoInitialize(NULL);hresult=CLSIDFromProgID(OLESTR("VB_ADO_DBConnect.Rijndael"), &clsid);_Rijndael *t;hresult=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_Rijndael),(LPVOID *) &t);if(FAILED(hresult)) return ;
在调用vb的dll之前,需要先声明几个变量
HRESULT hresult;CLSID clsid;CoInitialize(NULL); 这个是很主要的,因为vb的dll是Activex,要以com形式加载,所以这句必不可少
hresult=CLSIDFromProgID(OLESTR("VB_ADO_DBConnect.Rijndael"), &clsid);这里的"VB_ADO_DBConnect.Rijndael",其中“VB_ADO_DBConnect”,是在.tlh文件中声明的,也就是DLL的命名空间,格式如下“namespace VB_ADO_DBConnect {……”
而“Rijndael”是在.tlh中的结构变量 默认格式是“struct /* coclass */ Rijndael;”
接着用_Rijndael *t;直接声明一个指针
hresult=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_Rijndael),(LPVOID *) &t);这里的"__uuidof(_Rijndael)"
是vb的DLL中_COM的定义
_COM_SMARTPTR_TYPEDEF(_Rijndael, __uuidof(_Rijndael));
接着我们就可以判断这个指针是否为空了,如果不为空,则加载成功,否则返回
这里还需要注意一点的就是在调用vb的dll时,需要先用regsvr32 xxx.dll进行注册,卸载xxx.dll方法则是regsvr32 /u xxx.dll
当上面都没有错误了,下面就可以通过指针直接调用vb里的函数了
下面是完整的代码
HRESULT hresult;CLSID clsid;CoInitialize(NULL);hresult=CLSIDFromProgID(OLESTR("VB_ADO_DBConnect.Rijndael"), &clsid);_Rijndael *t;hresult=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(_Rijndael),(LPVOID *) &t);if(FAILED(hresult))return ;/*int iSize;int *size = &iSize;*size = Key128;t->setKeySize((KSize*)size);*/ 注视掉的部分是调用这个dll中的一个enum类型的枚举 KSize* psize = new KSize;*psize = Key128;t->setKeySize(psize);delete psize;BSTR b_key,b_input;CString strkey,strinput;strkey = L"test";strinput = L"我要加密";b_key= strkey.AllocSysString();b_input = strinput.AllocSysString();_bstr_t b_run;b_run = t->GetEncrypt(&b_input,&b_key);//这里是调用加密方法CString str;str.Format(L"%s",(LPCTSTR)b_run);AfxMessageBox(str);b_input = str.AllocSysString();b_run = t->GetDecryp(&b_input,&b_key);//这里调用解密方法str.Format(L"%s",(LPCTSTR)b_run);AfxMessageBox(str);t->Release(); //这里开始释放SysFreeString(b_input);//这里开始释放SysFreeString(b_key);//这里开始释放CoUninitialize(); 释放掉com
0 0
- vb调用vc的dll
- VC 调用 VB 的DLL
- vc DLL vb 调用
- vb调用vc dll
- VB调用VC DLL的参数问题
- vb调用vc编的dll文件
- VB调用VC dll的返回方式
- VB中调用VC的DLL
- VB调用VC dll的返回
- VB中调用VC++开发的DLL
- 在vb,vc中调用vb编写的DLL
- 在vb,vc中调用vb编写的DLL
- vb调用vc++dll文件
- 再谈在VB中调用VC++开发的DLL
- 再谈在VB中调用VC++开发的DLL
- 在 VB 中调用 VC 写的 DLL
- 在 VB 中调用 VC 写的 DLL
- 再谈在VB中调用VC++开发的DLL
- 树链剖分-链的剖分(线段树维护+离线操作)
- 关于ios越狱开发的那些事
- 7518爱的是看了就关联方看见过开了房7518季后赛的规范健康
- 微软MSDN订阅介绍
- cmake函数参数解析
- VC 调用 VB 的DLL
- 老罗锤子手机发布会,我感到深深地愧疚!
- uva 10453 - Make Palindrome
- 用iOSOpenDev在Xcode里配置越狱开发环境
- KeyListener的三个方法,而其参数KeyEvent却不同
- <转载>Android软件开发之获取通讯录联系人信息
- Map集合及使用
- hihoCoder:Trie图
- hdu3360National Treasures (最大匹配,拆点法)