无法解析的外部符号
错误 1 error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall CHugeIntX:: operator wchar_t const * const(void)const " (__imp_??BCHugeIntX@@QBEQB_WXZ),该符号在函数 "public: wchar_t const * __thiscall CRSA::GetParam(enum tagRSAParam)const " (?GetParam@CRSA@@QBEQB_WW4tagRSAParam@@@Z) 中被引用 RSA.obj RSATool2代码:
const LPCTSTR CRSA::GetParam( const RSAParam enumRSAParam /*= RSA_EM*/ ) const
{
switch( enumRSAParam )
{
case RSA_P: return ((LPCTSTR)P); **这里出错
case RSA_Q: return ((LPCTSTR)Q); **这里出错
case RSA_E: return ((LPCTSTR)E);**这里出错
case RSA_N: return ((LPCTSTR)N);**这里出错
case RSA_D: return ((LPCTSTR)D);**这里出错
default:
return NULL;
}
}
//产生质数P,Q
void CRSA::GeneratePrime(UINT32 * const pKeyBits /*= NULL*/)
{
if(pKeyBits==NULL)
*pKeyBits=1024;
const UINT32 u32Bits_P = *pKeyBits / 2;
const UINT32 u32Bits_Q = *pKeyBits - u32Bits_P;
// 无需重复检测
for( ; ; )
{
P.GeneratePrime( u32Bits_P );
if ( CHugeIntX().Gcd( P - 1, E ) == 1 )
{
break;
}
}
for( ; ; )
{
Q.GeneratePrime( u32Bits_Q );
if ( P!=Q && CHugeIntX().Gcd( Q - 1, E ) == 1 )
{
break;
}
}
}
去掉GetParam函数就不会出现连接错误:L
PS:应该是(LPCTSTR)P引发的,不知什么原因? 请检查:你是否在 UNICODE 环境下编译,但却未在工程中定义 UNICODE 或 _UNICODE 宏?
即你需要链接的是 UNICODE 版本,但 HugeCalc.h 及 HugeCalc.lib 却以为你需要的是 MBCS 版本 检查了,已经定义了_UNICODE
你编写的Demo RSATool能编译通过,我新建一个项目,代码和RSATool差不多,就是连接失败:L 请问你的开发环境是:VC6?VC2005?VC2008?还是别的? 我用的是VS 2008,编译你写的DEMO没问题,自己建的项目就不行。:L 搞晕了 你应该出示全部代码的 头文件RSA.h
#pragma once
#include "HugeCalc.h"
#include "HugeIntX.h"
typedef enum tagRSAParam
{
RSA_E,
RSA_P,
RSA_Q,
RSA_N,
RSA_D,
RSA_OM,
RSA_EM,
RSA_DM,
}RSAParam;
class CRSA
{
private:
CHugeIntX E;
CHugeIntX P;
CHugeIntX Q;
CHugeIntX N;
CHugeIntX D;
public:
CRSA(void);
CRSA(UINT32 * const pE);
CRSA(CHugeIntX n,CHugeIntX e);
~CRSA(void);
public:
const LPCTSTR GetParam( const RSAParam enumRSAParam = RSA_EM ) const;
void GeneratePrime(UINT32 * const pKeyBits = NULL);
}; CPP文件:RSA.CPP
#include "StdAfx.h"
#include "RSA.h"
#pragma message( "automatic link to ./Debug/HugeCalc.lib" )
#pragma comment( lib, "E:/Downloads/CopyrightByGuoXianqiang-v8.0.0.0/CopyrightByGuoXianqiang/HugeCalc/HugeCalc_API/CppAPI/Lib/HugeCalc.lib" )
CRSA::CRSA(void)
{
E=(UINT32)65537;
}
CRSA::CRSA(UINT32 * const pE)
{
E=*pE;
}
CRSA::CRSA(CHugeIntX n,CHugeIntX e)
{
N=n;
E=e;
}
CRSA::~CRSA(void)
{
}
const LPCTSTR CRSA::GetParam( const RSAParam enumRSAParam /*= RSA_EM*/ ) const
{
switch( enumRSAParam )
{
case RSA_P: return ((LPCTSTR)P);
case RSA_Q: return ((LPCTSTR)Q);
case RSA_E: return ((LPCTSTR)E);
case RSA_N: return ((LPCTSTR)N);
case RSA_D: return ((LPCTSTR)D);
default:
return NULL;
}
}
//产生质数P,Q
void CRSA::GeneratePrime(UINT32 * const pKeyBits /*= NULL*/)
{
if(pKeyBits==NULL)
*pKeyBits=1024;
const UINT32 u32Bits_P = *pKeyBits / 2;
const UINT32 u32Bits_Q = *pKeyBits - u32Bits_P;
// 无需重复检测
for( ; ; )
{
P.GeneratePrime( u32Bits_P );
if ( CHugeIntX().Gcd( P - 1, E ) == 1 )
{
break;
}
}
for( ; ; )
{
Q.GeneratePrime( u32Bits_Q );
if ( P!=Q && CHugeIntX().Gcd( Q - 1, E ) == 1 )
{
break;
}
}
} 我记得 kofeffect 也曾遇到该问题,后来仅仅是个宏定义问题而已。
从你反映的现象来看,可能主要是 UNICODE/MBCS 匹配问题。 :L 看来你写的这个东西需要进一步测试对各种开发平台的兼容性
页:
[1]
2