VC 调用 VB 的DLL
2014-08-05 00:46
232 查看
在stdafx.h文件中
先编译一下,会得到2个文件,分别是“vb_ado_dbconnect.tlh”与“vb_ado_dbconnect.tli”
其中".til"文件是调用的方法,".tlh"文件是函数的定义,这里我们可以视它为.h文件
在调用vb的dll之前,需要先声明几个变量
而“Rijndael”是在.tlh中的结构变量 默认格式是“struct /* coclass */ Rijndael;”
接着用_Rijndael *t;直接声明一个指针
是vb的DLL中_COM的定义
接着我们就可以判断这个指针是否为空了,如果不为空,则加载成功,否则返回
这里还需要注意一点的就是在调用vb的dll时,需要先用regsvr32 xxx.dll进行注册,卸载xxx.dll方法则是regsvr32 /u xxx.dll
当上面都没有错误了,下面就可以通过指针直接调用vb里的函数了
下面是完整的代码
#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
相关文章推荐
- 在VB应用程序中调用VC环境下开发的DLL
- 一步一步教你用VC和VB调用C++ DLL
- vb调用vc的dll挂钩指定窗口,并且跨进程子类化该窗口
- 在vb,vc中调用vb编写的DLL
- VB调用vc写的dll的某个方法时的问题
- 再谈在VB中调用VC++开发的DLL
- 在 VB 中调用 VC 写的 DLL
- vb 中调用用vc dll
- 在VB应用程序中调用VC环境下开发的DLL
- vb调用vc dll返回字符串类型
- VB调用VC dll的返回方式
- 在VB应用程序中调用VC环境下开发的DLL
- How to invoke active dll written by VB using VC - VC如何调用VB写的Active Dll - 详解
- vb调用vcdll
- 在 VB 中调用 VC 写的 DLL
- 在VB应用程序中调用VC环境下开发的DLL
- 再谈在VB中调用VC++开发的DLL
- 一步一步教你用VC和VB调用C++ DLL
- [VB.NET]请教:vb.net调用vc写的dll出错:报尝试读取或写入受保护的内存
- vb调用vc编的dll文件