血虐丘比特 2021-11-03 08:25 采纳率: 0%
浏览 11
已结题

vs2010 mfc 使用动态库中导出的类编译报错

在vc6.0中没有这个问题,在2010就编译通不过
都是使用的多字节,.lib文件都正确添加了,
测试代码如下:

void CCDataMatrixTestDlg::OnBnClickedOk()
{
    // TODO: 在此添加控件通知处理程序代码
    // CDialogEx::OnOK();
    CDataMatrix dataMatrix("", 10, 10);
}
 

错误信息如下

1>CDataMatrixTestDlg.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall CDataMatrix::CDataMatrix(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >,int,int)" (__imp_??0CDataMatrix@@QAE@V?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@HH@Z),该符号在函数 "public: void __thiscall CCDataMatrixTestDlg::OnBnClickedOk(void)" (?OnBnClickedOk@CCDataMatrixTestDlg@@QAEXXZ) 中被引用
1>E:\源码\CDataMatrixTest\Debug\CDataMatrixTest.exe : fatal error LNK1120: 1 个无法解析的外部命令
 

动态链接库的头文件类定义部分代码,其中AFX_EXT_CLASS 就是__declspec(dllimport)

class AFX_EXT_CLASS CDataMatrix  
{
public:
    CString GetErrorMessage(int iErrorCode);
    unsigned char* iec16022ecc200(int *Wptr, int *Hptr, char **encodingptr,
                  int barcodelen, unsigned char *barcode,
                  int *lenp, int *maxp, int *eccp);
    char* encmake(int l, unsigned char *s, int *lenp, char exact);
    char ecc200encode(unsigned char *t, int tl, unsigned char *s, int sl, char *encoding, int *lenp);
    void ecc200(unsigned char *binary, int bytes, int datablock, int rsblock);
    void ecc200placement(int *array, int NR, int NC);
    void ecc200placementcornerD(int *array, int NR, int NC, int p);
    void ecc200placementcornerC(int *array, int NR, int NC, int p);
    void ecc200placementcornerB(int *array, int NR, int NC, int p);
    void ecc200placementcornerA(int *array, int NR, int NC, int p);
    void ecc200placementblock(int *array, int NR, int NC, int r, int c, int p);
    void ecc200placementbit(int *array, int NR, int NC, int r, int c, int p, char b);
    void rs_encode(int len, unsigned char *data, unsigned char *res);
    void rs_init_code(int nsym, int index);
    void rs_init_gf(int poly);
    CDataMatrix(CString strBarcodeValue, int iWidth, int iHeight);
    int Encode(CString &strReturn, int &width, int &height);
    virtual ~CDataMatrix();
private:
    //条码内容
    CString m_strBarcodeValue;
    //条码宽度
    int m_iWidth;
    //条码高度
    int m_iHeight;
 
    int gfpoly;
    int symsize;        // in bits
    int logmod;        // 2**symsize - 1
    int rlen;
    int *log;
    int *alog;
    int *rspoly;
    
};
 

链接库导出函数列表见下图

img


如有需要可以提供.h、.lib和dll测试

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月11日
    • 创建了问题 11月3日

    悬赏问题

    • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
    • ¥20 怎么用dlib库的算法识别小麦病虫害
    • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
    • ¥15 java写代码遇到问题,求帮助
    • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
    • ¥15 有了解d3和topogram.js库的吗?有偿请教
    • ¥100 任意维数的K均值聚类
    • ¥15 stamps做sbas-insar,时序沉降图怎么画
    • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
    • ¥15 关于#Java#的问题,如何解决?