一个关于C#中调用C++的类库 实现 字符串加密

阿尤C 2014-04-24 05:23:34
别人给了个用C++写的一个字符串加密的DLL文件和一个 .h 的头文件
如图


他的头文件内容

/******************************************************************
** 版 权: (C)
** 文件名: IEncryptDll.h
** 创建人:
** 日 期: 2014-4-18
** 版 本: 0.1
** 描 述: 账号密码加密
** 应 用:

**************************** 修改记录 ******************************
** 修改人:
** 日 期:
** 描 述:
********************************************************************/

#ifndef _IENCRYPTDLL_H_
#define _IENCRYPTDLL_H_

#define MD5_MAXLEN 33

class IEncryptModule
{
public:

//这个就是C++的头文件
// 释放
virtual void Release() = NULL;

// 输入玩家密码,返回第一阶段密码
virtual char* GetFPhaseViaPassword(const char* pPassword, char* pFPhase, unsigned int nFPhaseLength) = NULL;

// 输入第一阶段,返回第三阶段密码
virtual char* GetTPhaseViaFPhase(char* pFPhase) = NULL;

// 输入玩家密码,返回第三阶段密码
virtual char* GetTPhaseViaPassword(const char* pPassword, char* pTPhase, unsigned int nTPhaseLength) = NULL;
};

// 账号密码加密HELPER类
class CEncryptModuleHelper
{
private:

HINSTANCE m_hdll;
char m_szErrMsg[128]; //错误信息

public:
IEncryptModule *m_pEncryptModule;

// 创建类工厂
typedef BOOL (*ProcCreateEncryptModule)(IEncryptModule **ppSystem);

CEncryptModuleHelper() : m_hdll(NULL), m_pEncryptModule(NULL)
{
memset(m_szErrMsg, 0, sizeof(m_szErrMsg));
}

~CEncryptModuleHelper()
{
Close();
}

IEncryptModule* operator ->()
{
return m_pEncryptModule;
}

void Close()
{
if (NULL != m_pEncryptModule)
{
//delete m_pEncryptModule;
m_pEncryptModule->Release();
m_pEncryptModule = NULL;
}

if (NULL != m_hdll)
{
FreeLibrary(m_hdll);
m_hdll = NULL;
}
}

BOOL Create()
{
Close();

try
{
if ( !LoadDll() )
{
return FALSE;
}

ProcCreateEncryptModule proc;
proc = (ProcCreateEncryptModule) GetProcAddress(m_hdll, "CreateEncryptModule");

if (NULL == proc)
{
throw "Can't GetProcAddress('CreateEncryptModule')";
}

if ( !proc(&m_pEncryptModule) )
{
throw "CreateEncryptModule() error!";
}
}

catch (LPCSTR szMsg)
{
lstrcpyn(m_szErrMsg, szMsg, sizeof(m_szErrMsg));
return FALSE;
}

catch(...)
{
lstrcpyn(m_szErrMsg, "Unknown Error!", sizeof(m_szErrMsg));
return FALSE;
}

return TRUE;
}

BOOL LoadDll()
{
if (NULL == m_hdll)
{
m_hdll = LoadLibrary( "EncryptDll.dll" );
if(NULL == m_hdll)
throw "Can't load EncryptDll.dll";

return TRUE;
}

return FALSE;
}

//判断接口指针是否有效
BOOL IsValid()
{
return (NULL != m_pEncryptModule);
}

char* GetErrMsg()
{
return m_szErrMsg;
}

IEncryptModule* GetEncryptModule()
{
return m_pEncryptModule;
}
};

#endif /* _IENCRYPTDLL_H_ */


我吧他的dll放在了我的项目中 地址如下图


然后人家让我在项目中用他的加密方式

让我更具他的.h头文件自己写个帮助类来调用dll里面的加密方式

我对C++ 白痴
C#也是新手
自己搞了一天整理了下面的一些代码 还报错

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace Bll
{
unsafe public abstract class IEncryptModule
{

public abstract void Release();


public abstract unsafe char* GetFPhaseViaPassword(char* pPassword, char* pFPhase, uint nFPhaseLength);


public abstract unsafe char* GetTPhaseViaFPhase(char* pFPhase);



public abstract unsafe char* GetTPhaseViaPassword(char* pPassword, char* pTPhase, uint nTPhaseLength);
}
unsafe class CEncryptModuleHelper
{
[DllImport("EncryptDll.dll")]
public static extern unsafe bool CreateEncryptModule(IEncryptModule **ppSystem);
public unsafe IEncryptModule *m_pEncryptModule;

public bool CreateEncryptModulebool()
{
return CreateEncryptModule(&m_pEncryptModule);
}

public unsafe char* passwordmw(char* pPassword, char* pTPhase, uint nTPhaseLength)
{
if (CreateEncryptModulebool())
{
return m_pEncryptModule->GetTPhaseViaPassword(pPassword, pTPhase, nTPhaseLength);
}
}
}

}



求论坛的大神给指点下迷津 最好能帮我写个例子 感激不尽 实在是不会 真心伤不起
目前效果还是这样


求帮忙
...全文
153 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangshuanglili 2014-04-28
  • 打赏
  • 举报
回复
不清楚呀!!!
yancongmin 2014-04-27
  • 打赏
  • 举报
回复
为什么要用他的加密啊,你自己用你的加密不就行了。 我知道C#可以引用C++的DLL文件,你那个调用方法对嘛?

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧