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;  }


 

原创粉丝点击