STDMETHODIMP_(void) CRijndaelObj::XRijndael::MakeKey(
LPOLESTR key, LPOLESTR chain, int keylength, int blockSize)
{
METHOD_PROLOGUE_EX_(CRijndaelObj, Rijndael)
char *pkey = _com_util::ConvertBSTRToString(key);
char *pchain = _com_util::ConvertBSTRToString(chain);
CString tkey = pkey;
CString tchain = pchain;
pThis->MakeKey(tkey, tchain, keylength, blockSize);
return;
}STDMETHODIMP_(void) CRijndaelObj::XRijndael::EncryptBlock(LPOLESTR in, LPOLESTR* result)
{
METHOD_PROLOGUE_EX_(CRijndaelObj, Rijndael)
char *pin = _com_util::ConvertBSTRToString(in);
char *presult = NULL;
pThis->EncryptBlock(pin, presult);
*result = _com_util::ConvertStringToBSTR(presult);
return;
}STDMETHODIMP_(void) CRijndaelObj::XRijndael::DecryptBlock(LPOLESTR in, LPOLESTR* result)
{
METHOD_PROLOGUE_EX_(CRijndaelObj, Rijndael)
char *pin = _com_util::ConvertBSTRToString(in);
char *presult = NULL;
pThis->DecryptBlock(pin, presult);
*result = _com_util::ConvertStringToBSTR(presult);
return;
}link错误:
RijndaelObj.obj : error LNK2001: unresolved external symbol "public: void __thiscall CRijndaelObj::MakeKey(char const *,char const *,int,int)" (?MakeKey@CRijndaelObj@@QAEXPBD0HH@Z)
RijndaelObj.obj : error LNK2001: unresolved external symbol "char * __stdcall _com_util::ConvertBSTRToString(unsigned short *)" (?ConvertBSTRToString@_com_util@@YGPADPAG@Z)
RijndaelObj.obj : error LNK2001: unresolved external symbol "unsigned short * __stdcall _com_util::ConvertStringToBSTR(char const *)" (?ConvertStringToBSTR@_com_util@@YGPAGPBD@Z)
RijndaelObj.obj : error LNK2001: unresolved external symbol "public: void __thiscall CRijndaelObj::EncryptBlock(char const *,char *)" (?EncryptBlock@CRijndaelObj@@QAEXPBDPAD@Z)
RijndaelObj.obj : error LNK2001: unresolved external symbol "public: void __thiscall CRijndaelObj::DecryptBlock(char const *,char *)" (?DecryptBlock@CRijndaelObj@@QAEXPBDPAD@Z)
Debug/RijndaelCOM.dll : fatal error LNK1120: 5 unresolved externals

解决方案 »

  1.   

    CRijndaelObj::MakeKey是否把 
    MakeKey
    EncryptBlock
    DecryptBlock
    定义成CRijndaelObj的成员了.他们应该是CRijndaelObj::XRijndael的成员。
    贴一下类的声明吧!
      

  2.   

    我不太懂你的意思
    是不是没有加载LIB文件啊
      

  3.   

    是呀,明明报的是CRijndaelObj::MakeKey找不到,而不是CRijndaelObj::XRijndael::MakeKey找不到,一定是你的类说明错了,检查一下.h文件吧。
      

  4.   

    class CRijndaelObj : public CCmdTarget
    {
    DECLARE_DYNCREATE(CRijndaelObj) CRijndaelObj();    
    public:
        void MakeKey(char const* key, char const* chain, int keylength=DEFAULT_BLOCK_SIZE, int blockSize=DEFAULT_BLOCK_SIZE);
        void EncryptBlock(char const* in, char* result);
        void DecryptBlock(char const* in, char* result);// IRijndael
    BEGIN_INTERFACE_PART(Rijndael, IRijndael)
    INIT_INTERFACE_PART(CRijndael, Rijndael)
    STDMETHOD_(void, MakeKey)(LPOLESTR key, LPOLESTR chain, int keylength, int blockSize);
    STDMETHOD_(void, EncryptBlock)(LPOLESTR in, LPOLESTR* result);
    STDMETHOD_(void, DecryptBlock)(LPOLESTR in, LPOLESTR* result);
    END_INTERFACE_PART_STATIC(Rijndael) 
      

  5.   

    class CRijndaelObj : public CCmdTarget
    {
    DECLARE_DYNCREATE(CRijndaelObj) CRijndaelObj();    
    public:
        void MakeKey(char const* key, char const* chain, int keylength=DEFAULT_BLOCK_SIZE, int blockSize=DEFAULT_BLOCK_SIZE);
        void EncryptBlock(char const* in, char* result);
        void DecryptBlock(char const* in, char* result);// IRijndael
    BEGIN_INTERFACE_PART(Rijndael, IRijndael)
    INIT_INTERFACE_PART(CRijndael, Rijndael)
    STDMETHOD_(void, MakeKey)(LPOLESTR key, LPOLESTR chain, int keylength, int blockSize);
    STDMETHOD_(void, EncryptBlock)(LPOLESTR in, LPOLESTR* result);
    STDMETHOD_(void, DecryptBlock)(LPOLESTR in, LPOLESTR* result);
    END_INTERFACE_PART_STATIC(Rijndael) 
      

  6.   

    应该不是没有LIB,看样子,是用MFC的嵌套类方式来实现的,可能是嵌套类没有用好,同意FFXI(黑)的猜测
      

  7.   

    刚才是没加载lib,加载后还有三个link错误
    RijndaelObj.obj : error LNK2001: unresolved external symbol "public: void __thiscall CRijndaelObj::MakeKey(char const *,char const *,int,int)" (?MakeKey@CRijndaelObj@@QAEXPBD0HH@Z)
    RijndaelObj.obj : error LNK2001: unresolved external symbol "public: void __thiscall CRijndaelObj::EncryptBlock(char const *,char *)" (?EncryptBlock@CRijndaelObj@@QAEXPBDPAD@Z)
    RijndaelObj.obj : error LNK2001: unresolved external symbol "public: void __thiscall CRijndaelObj::DecryptBlock(char const *,char *)" (?DecryptBlock@CRijndaelObj@@QAEXPBDPAD@Z)
    Debug/RijndaelCOM.dll : fatal error LNK1120: 3 unresolved externals
      

  8.   

    错误报的是CRijndaelObj::MakeKey找不到,而不是CRijndaelObj::XRijndael::MakeKey找不到,所以一定是你的.h文件写错了。