C++Builder XEn使用BCB6的DLL(以BCB6中流行的DES加密控件WCDESComp通过DLL供XE使用的方法为例)
来源:互联网 发布:关明生为什么离职知乎 编辑:程序博客网 时间:2024/06/14 08:49
1)BCB6的DLL部分:
/*C++Builder XEn(如XE2等)使用BCB6的DLL,主要是C++Builder XEn的AnsiString和BCB6的AnsiString及Application等不兼容,因此要使用char或wchar_t之流才可以正常传递数据,此处说明传值方法并借此说明BCB6中流行的DES加密控件WCDESComp通过DLL供XE使用的方法*/ #include "WCDESComp.hpp" extern "C" __declspec(dllexport) __stdcall void EncryStrHex( // 字符串加密 char * T_QZHB // 待加密的字符串 , char * T_YMOZ // 密钥 , char * T_BLZA // 存放结果 ){ AnsiString T_QOMG=static_cast<AnsiString>(T_QZHB); // 待加密的字符串 AnsiString T_HWMJ=static_cast<AnsiString>(T_YMOZ); // 密钥 AnsiString T_PRJO=""; // 结果 TWCDESComp * K_VHQZ=new TWCDESComp(NULL); T_PRJO=K_VHQZ->EncryStrHex( T_QOMG // 待加密的字符串 , T_HWMJ // 密钥 );//加密 strcpy(T_BLZA,T_PRJO.c_str()); delete K_VHQZ; //return true; } extern "C" __declspec(dllexport) __stdcall void DecryStrHex( // 字符串解密 char * T_QZHB // 待解密的字符串 , char * T_YMOZ // 密钥 , char * T_BLZA // 存放结果 ){ AnsiString T_QOMG=static_cast<AnsiString>(T_QZHB); // 待解密的字符串 AnsiString T_HWMJ=static_cast<AnsiString>(T_YMOZ); // 密钥 AnsiString T_PRJO=""; // 结果 TWCDESComp * K_VHQZ=new TWCDESComp(NULL); T_PRJO=K_VHQZ->DecryStrHex( T_QOMG // 待解密的字符串 , T_HWMJ // 密钥 );//解密 strcpy(T_BLZA,T_PRJO.c_str()); delete K_VHQZ; //return true; }
2)XE可执行文件部分:
AnsiString EncryStrHex(AnsiString sBig1 // 待加密的字符串,AnsiString sBig2 // 密钥 ){int Long1=sBig1.Length();char* x=new char[Long1+1];memset(x,'\0',(Long1 + 1));strcpy(x,sBig1.c_str());int Long2=sBig2.Length();char* y=new char[Long2+1];memset(y,'\0',(Long2 + 1));strcpy(y,sBig2.c_str());char* z=new char[(Long1+Long2)*4+1];memset(z,'\0',(Long1+Long2)*4+1);String T_LQCM=ExtractFilePath(ExpandFileName(Application->ExeName))+L"WCDESComp.dll";//String T_LQCM=L"R:\\TEMP\\新建文件夹\\Project1.dll";//String T_LQCM=ExtractFilePath(ExpandFileName(Application->ExeName))+L"..\\..\\..\\Project1.dll"; if(FileExists(T_LQCM)!=true){return ""; }//载入连接DLL完成连接void __stdcall(*EncryStrHex)( char * // 待加密的字符串 , char * // 密钥 , char * // 加密结果);//声明DLL中的函数指针HINSTANCE hInst1=LoadLibrary(T_LQCM.c_str());//加载DLL并获取handle if(hInst1!=NULL){(FARPROC &)EncryStrHex=GetProcAddress(hInst1,"EncryStrHex");//获取DLL中的函数地址 if(EncryStrHex!=NULL){ EncryStrHex( x // 待加密的字符串 , y // 密钥 , z // 存放结果 ); }//else return 0;//调用DLL中的函数 }//else return 0;//调用DLL中的函数FreeLibrary(hInst1);//释放DLLAnsiString T_ABWR=static_cast<AnsiString>(z);memset(x,'\0',(Long1 + 1));delete [] x;//delete x;x=NULL;memset(y,'\0',(Long2 + 1));delete [] y;//delete y;y=NULL;memset(z,'\0',(Long1+Long2)*4+1);delete [] z;//delete z;z=NULL;return T_ABWR; } AnsiString DecryStrHex(AnsiString sBig1 // 待解密的字符串 ,AnsiString sBig2 // 密钥 ){int Long1=sBig1.Length();char* x=new char[Long1+1];memset(x,'\0',(Long1 + 1));strcpy(x,sBig1.c_str());int Long2=sBig2.Length();char* y=new char[Long2+1];memset(y,'\0',(Long2 + 1));strcpy(y,sBig2.c_str());char* z=new char[Long1+Long2+1];memset(z,'\0',Long1+Long2+1);String T_LQCM=ExtractFilePath(ExpandFileName(Application->ExeName))+L"WCDESComp.dll";//String T_LQCM=L"R:\\TEMP\\新建文件夹\\Project1.dll";//String T_LQCM=ExtractFilePath(ExpandFileName(Application->ExeName))+L"..\\..\\..\\Project1.dll"; if(FileExists(T_LQCM)!=true){return ""; }//载入连接DLL完成连接void __stdcall(*DecryStrHex)( char * // 待解密的字符串 , char * // 密钥 , char * // 解密结果);//声明DLL中的函数指针HINSTANCE hInst1=LoadLibrary(T_LQCM.c_str());//加载DLL并获取handle if(hInst1!=NULL){(FARPROC &)DecryStrHex=GetProcAddress(hInst1,"DecryStrHex");//获取DLL中的函数地址 if(DecryStrHex!=NULL){ DecryStrHex( x // 待解密的字符串 , y // 密钥 , z // 存放结果 ); }//else return 0;//调用DLL中的函数 }//else return 0;//调用DLL中的函数FreeLibrary(hInst1);//释放DLLAnsiString T_ABWR=static_cast<AnsiString>(z);memset(x,'\0',(Long1 + 1));delete [] x;//delete x;x=NULL;memset(y,'\0',(Long2 + 1));delete [] y;//delete y;y=NULL;memset(z,'\0',Long1+Long2+1);delete [] z;//delete z;z=NULL;return T_ABWR; }
- C++Builder XEn使用BCB6的DLL(以BCB6中流行的DES加密控件WCDESComp通过DLL供XE使用的方法为例)
- 使用BCB6-TValueListEditor控件
- 使用汇编优化BCB6的itoa
- 记录一些BCB6的使用心得
- 记录使用BCB6出现的问题
- BCB6 listView使用的几个技巧
- BCB(C++Builder或Embarcadero XE)中调用托管DLL的方法(C++调用C#的DLL)
- BCB6中使用sqlite
- 如何在C++ Builder 6.0(bcb6.0)下使用OpengGL的glut库
- 如何在C++ Builder的DLL中使用数据库控件
- BCB6与BCB2006控件的安装
- 关于使用BCB6编写Windows服务的问题
- 在BCB6中使用XML
- Delphi XE 调用 C++ Builder XE 开发的DLL库
- BCB6中Indy9发送邮件的例子
- 谁有BCB6的基础教程
- BCB6与BCB2007的加速
- 安装bcb6出现的问题
- 搭建开发环境
- WIN7 开启vs2010自带SQL数据库 SqlExpress
- 详解 Android 的 Activity 组件
- WindowsPhone相关的几种数据收集框架的调研
- SourceInsight 日文乱码 问题解决方案
- C++Builder XEn使用BCB6的DLL(以BCB6中流行的DES加密控件WCDESComp通过DLL供XE使用的方法为例)
- 学习MFC-----MFC六大关键技术
- nginx内存池管理
- javascript函数querySelector,querySelectorAll介绍
- 32.C++ 运算符的重载
- 旅游局说放假的方案与投票无关?
- 在安装VC2012上再安装VC2010时连接出错解决
- HTML5+JS实现俄罗斯方块
- oracle.net.ns.NetException: NL Exception was generated