在 MFC对话框类 CmyDlg 中添加类 EMatch 的头文件
# include "EMatch.h"
# include "EMatch.h" class CmyDlg: public CDialog
{ public:
EMatch * p ;
EMatch m_a ; //这里老是报LINK 2001 错误
error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall EMatch::EMatch(void)" (__imp_??0EMatch@@QAE@XZ) myDlg.obj
};定义指针没问题,定义对象就报错,类EMatch 中有构造函数很析构函数啊! 大侠指点下这个怎么回事啊??
# include "EMatch.h"
# include "EMatch.h" class CmyDlg: public CDialog
{ public:
EMatch * p ;
EMatch m_a ; //这里老是报LINK 2001 错误
error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall EMatch::EMatch(void)" (__imp_??0EMatch@@QAE@XZ) myDlg.obj
};定义指针没问题,定义对象就报错,类EMatch 中有构造函数很析构函数啊! 大侠指点下这个怎么回事啊??
EMatch 是个封装了类的头文件,lib库已经加了!在工具选项里加了!
这个已经加了 #include EMatch
lib有没有加入?
只定义,没实现
其实这个是第三方库的头文件,已经加了,lib在工具选项里也加了!
在BCB里这样用没问题啊!
这个是第三方的库头文件, 以前在BCB里可以用,现在是VS2008 ! 下面是EMatch 的头文件,大侠帮忙看下,没有改过的。第三方的!#ifndef __EMATCH_H__
#define __EMATCH_H__// ---------------------------------------------------------------------------
#include "Easy.h"
#include "EMatch_Enum.h"#include "EasyMatch_BinaryCompatible.h"// ---------------------------------------------------------------------------// ---------------------------------------------------------------------------#if defined E_BC45 // Forward declarations of class instances
template<class Type> class EVectorTemplate;
class EVectorTemplate<EMatchPosition>;#elif defined E_BC50 || defined E_BCB // Forward declarations of class instances
template<class Type> class EVectorTemplate;
template class E_DLL1 EVectorTemplate<EMatchPosition>;#endifclass E_DLL1 EMatchPositionsVector : public EVectorTemplate<EMatchPosition>
{
// Wrapping members
public:
int handle_;
FinalizeCallback callback_;public:
E_DLL0 CONSTRUCTOR E_DLL1 EMatchPositionsVector( UINT32 un32MaxPositions);
};// ---------------------------------------------------------------------------// Maximum neighborhood size
#define RADIUS_MAX 4
#define DIAMETER_MAX ( 2 * RADIUS_MAX + 1)// Must be smaller than any correlation value
#define MINUS_INFINITY -2.f// ---------------------------------------------------------------------------// Pattern class ( manages the pattern geometric transform during matching
struct EPatternRun
{
// Offset coordinates of the run starting point
INT32 m_n32OffsetX;
INT32 m_n32OffsetY; // Length of the run
INT32 m_n32Length; // Run limiting pointers in the source or transformed areas
UINT8 *m_pun8PatBeg;
UINT8 *m_pun8PatEnd;
};// ---------------------------------------------------------------------------
struct EImagePattern
{
EPatternRun* m_pRuns;
INT32 m_n32NumRuns; INT64 m_n64PatPatSigma;
INT64 m_n64PatPatSum; FLOAT32 m_f32AreaRatio;
};
class EPattern
{
public:
E_DLL0 CONSTRUCTOR E_DLL1 EPattern ( );
virtual E_DLL0 DESTRUCTOR E_DLL1 ~EPattern ( ); E_DLL0 FLOAT32 E_DLL1 Correlate ( INT32 n32X, INT32 n32Y, FLOAT32& f32AreaRatio);
E_DLL0 void E_DLL1 SetPattern ( EGenericROI* pPattern, UINT32 un32PatExtension = 0);
E_DLL0 void E_DLL1 SetImage ( EGenericROI* pImage);
E_DLL0 void E_DLL1 SetupRuns ( );
E_DLL0 void E_DLL1 SetupRuns (
FLOAT32 f32SrcX,
FLOAT32 f32SrcY,
FLOAT32 f32DstX,
FLOAT32 f32DstY,
FLOAT32 f32Angle = 0.f,
FLOAT32 f32ScaleX = 1.f,
FLOAT32 f32ScaleY = 1.f,
FLOAT32 f32PixelWidth = 1.f,
FLOAT32 f32PixelHeight = 1.f);
// Compute and store the direct transform coefficients
E_DLL0 void E_DLL1 SetTransform (
FLOAT32 f32SrcX,
FLOAT32 f32SrcY,
FLOAT32 f32DstX,
FLOAT32 f32DstY,
FLOAT32 f32Angle = 0.f,
FLOAT32 f32ScaleX = 1.f,
FLOAT32 f32ScaleY = 1.f,
FLOAT32 f32PixelWidth = 1.f,
FLOAT32 f32PixelHeight = 1.f);
// Store the direct transform coefficients
E_DLL0 void E_DLL1 SetTransformMatrix (
FLOAT32 f32Axx, FLOAT32 f32Axy, FLOAT32 f32Ax,
FLOAT32 f32Ayx, FLOAT32 f32Ayy, FLOAT32 f32Ay);
// Debugging utilities
E_DLL0 void E_DLL1 Copy ( EGenericROI* pDst); // Match Extension
E_DLL0 void E_DLL1 SetExtension(INT32 n32ExtensionX, INT32 n32ExtensionY);protected:
//void ClipPatternForAllPositions();
//void ClearClippedPatterns();
protected:
// Reference pattern description
//------------------------------
EGenericROI *m_pPat; // current pattern
// Pattern parameters
UINT32 m_un32PatWidth;
UINT32 m_un32PatHeight;
UINT32 m_un32ExtPatWidth;
UINT32 m_un32ExtPatHeight;
UINT32 m_un32PatRowPitch;
UINT32 m_un32PatExtension;
UINT8 *m_pun8Pat; // address of first pixel
// Pattern Size, unreduced.
INT32 m_n32PatternWidth;
INT32 m_n32PatternHeight;
// Image to be searched description
//---------------------------------
EGenericROI *m_pImg; // store the search field
// Image parameters
UINT32 m_un32ImgWidth;
UINT32 m_un32ImgHeight;
UINT32 m_un32ImgRowPitch;
UINT8 *m_pun8Img; // address of first pixel
// Direct affine transform coefficients
//-------------------------------------
FLOAT32 m_f32Axx;
FLOAT32 m_f32Axy;
FLOAT32 m_f32Ax;
FLOAT32 m_f32Ayx;
FLOAT32 m_f32Ayy;
FLOAT32 m_f32Ay;
// Transformed pattern description
//--------------------------------
// Runs list
BOOL m_bIsRunReady;
EPatternRun *m_pRuns;
UINT32 m_un32MaxRuns;
UINT32 m_un32NumRuns;
EPatternRun *m_pBorderRuns;
UINT32 m_un32MaxBorderRuns;
UINT32 m_un32NumBorderRuns;
// Pixel data
UINT8 *m_pun8Data;
UINT32 m_un32NumData;
UINT32 m_un32MaxData;
// Bounding box
INT32 m_n32TrfXMin;
INT32 m_n32TrfXMax;
INT32 m_n32TrfYMin;
INT32 m_n32TrfYMax;
UINT32 m_un32StripHeight;
// Intermediate Bounding box
INT32 m_n32TrfExtXMin;
INT32 m_n32TrfExtXMax;
INT32 m_n32TrfExtYMin;
INT32 m_n32TrfExtYMax;
UINT32 m_un32ExtStripHeight;
// Correlation computation ( constant moments)
//--------------------------------------------
FLOAT32 m_f32Sum;
FLOAT32 m_f32SumPat;
FLOAT32 m_f32SumPatPat;
FLOAT32 m_f32SigmaPatPat;
FLOAT32 m_f32SumExt;
FLOAT32 m_f32SumExtPat;
FLOAT32 m_f32SumExtPatPat;
FLOAT32 m_f32SigmaExtPatPat;
// Searching process
//------------------
// Don't care threshold
UINT32 m_un32DontCareThreshold;
MCH_CONTRAST_MODE m_eContrastMode;
E_CORRELATION_MODE m_eCorrelationMode;
// Search steps
FLOAT32 m_f32CenterXStep;
FLOAT32 m_f32CenterYStep;
FLOAT32 m_f32AngleStep;
FLOAT32 m_f32ScaleXStep;
FLOAT32 m_f32ScaleYStep;
FLOAT32 m_f32ScaleStep; INT32 m_n32NumAngleStep;
INT32 m_n32NumScaleXStep;
INT32 m_n32NumScaleYStep;
INT32 m_n32NumScaleStep; // Reduction level
INT32 m_n32ReductionIndex; // Zero, first and second order moments of the ( full) pattern and image
UINT32 m_un32FullSum;
UINT32 m_un32FullSumPat;
FLOAT64 m_f64FullSumPatPat;
UINT32 m_un32Sum;
UINT32 m_un32SumImg;
UINT32 m_un32SumPat;
FLOAT64 m_f64SumImgImg;
FLOAT64 m_f64SumImgPat;
FLOAT64 m_f64SumPatPat;protected:
// Match Extensions (found pattern occurrences may fall outside the matching ROI)
INT32 m_n32ExtensionX;
INT32 m_n32ExtensionY; INT32 m_n32CurrentExtensionX;
INT32 m_n32CurrentExtensionY;
};// ---------------------------------------------------------------------------class EMatchStaticArray1;
class EMatchStaticArray2;
class EMatchStaticArray3;
class EMatchStaticArray4;
class EMatchStaticArray5;
class EMatch: public EPattern //========
{ // Wrapping members
public:
int handle_;
FinalizeCallback callback_;public:
// Constructor/destructor
E_DLL0 CONSTRUCTOR E_DLL1 EMatch ( );
E_DLL0 CONSTRUCTOR E_DLL1 EMatch ( UINT32 un32NumDOF );
E_DLL0 CONSTRUCTOR E_DLL1 EMatch ( const EMatch &Match);
virtual E_DLL0 DESTRUCTOR E_DLL1 ~EMatch ( );
E_DLL0 void E_DLL1 InitEmpty ( UINT32 un32NumDOF );
E_DLL0 EMatch* E_DLL1 CopyTo ( EMatch *pMatch = NULL) const;
E_DLL0 EMatch& E_DLL1 operator= ( const EMatch &Match);
// Serialization
E_DLL0 void E_DLL1 Load ( const char* pszPathName);
E_DLL0 void E_DLL1 Load ( const UNICHAR* pszPathName);
E_DLL0 void E_DLL1 Load ( ESerializer* serializer );
E_DLL0 void E_DLL1 Load ( FILE* file);
E_DLL0 void E_DLL1 Save ( const char* pszPathName);
E_DLL0 void E_DLL1 Save ( const UNICHAR* pszPathName);
E_DLL0 void E_DLL1 Save ( ESerializer* serializer );
E_DLL0 void E_DLL1 Save ( FILE* file);
static E_DLL0 UINT32 E_DLL1 GetVersion ( );
virtual E_DLL0 void E_DLL1 Serialize ( ESerializer* serializer, UINT32 un32Version);
virtual E_DLL0 void E_DLL1 Serialize ( FILE* pFile, BOOL bOutput, UINT32 un32Version);
// Learning
E_DLL0 void E_DLL1 LearnPattern ( EROIBW8* pPattern);
E_DLL0 void E_DLL1 LearnPattern ( EROIC24* pPattern);
E_DLL0 void E_DLL1 LearnImage ( EROIBW8* pImage);
E_DLL0 void E_DLL1 LearnImage ( EROIC24* pImage);
E_DLL0 void E_DLL1 ClearImage ( );
E_DLL0 BOOL E_DLL1 IsPatternLearnt ( );
//E_DLL0 EROIBW8 * E_DLL1 ComputeCorrelationImage ( EROIBW8 *pResult);
E_DLL0 EGenericROI* E_DLL1 CreatePatternCopy ( ) const;
E_DLL0 EROIBW8* E_DLL1 CreateBW8PatternCopy ( ) const;
E_DLL0 EROIC24* E_DLL1 CreateC24PatternCopy ( ) const;
你说的“在工具选项里加了”听上去不太对,应该是在项目(project)选项里吧
放在工程里然后 #pragma comment() 就可以了! a...................... 谢谢楼上的各位,谢谢!!!