问题如下:我自己写了个派生于CEdit的类CppSkinEdit,并将其与其他几个类似的类一起封装成一
个界面库(dll)使用,一切正常。然而当我在测试程序中又写了个派生于CppSkinEdit的类CTestppSkinEdit时,什么都没
干,就出了以下的连接错误:   Creating library Debug/TestDlg.lib and object Debug/TestDlg.exp
TestppSkinEdit.obj : error LNK2001: unresolved external symbol "protected: 
static struct AFX_MSGMAP const CppSkinEdit::messageMap" (?
messageMap@CppSkinEdit@@1UAFX_MSGMAP@@B)
Debug/TestDlg.exe : fatal error LNK1120: 1 unresolved externals问题1是第一句话,生成了TestDlg.lib,不知道怎么回事?
问题2是消息映射声明了但未实现,很奇怪。
以上两个问题捣鼓了一天都没有结果,在此请教各位大虾,先谢过啦 :)

解决方案 »

  1.   

    楼上那位好像没有把CppSkinEdit 这个类导出来吧,可以这样写:
    #ifdef UI_EXPORTS
    #define UI_API __declspec(dllexport)
    #else
    #define UI_API __declspec(dllimport)
    #endifclass  UI_API CppSkinEdit
    {
    ............
    }具体的只要参考MFC的扩展类的写法就可以了。===========================================说些题外话,自己开发界面库的成本很高的。起码要写上半年,而且未必能写得很理想。目前市面上有太多的界面库可以参考,为何不直接拿一个来用呢?如果真的很想学习如何去做的话,可以让单位来购买一套这样的源码版就可以了。
      

  2.   

    哈哈,别人的用的怎么都不称心,所以自己开发一个适合自己的界面库也未尝不可吧。
    楼上的导出方式比较标准了,不过最好这样写:
    #if defined _AFXDLL && !defined _PPSKIN_STATIC
    #ifdef PPSKIN_EXPORTS
    #define PPSKIN_API _declspec(dllexport)
    #else
    #define PPSKIN_API _declspec(dllimport)
    #endif
    #else
    #define PPSKIN_API
    #endif
    这样不管你用静态的还是动态的,都可以。他这个类是导出的,不然不是这个问题,很有可能是作为导入是没有定义
    #define PPSKIN_API _declspec(dllimport)
    加上应该就可以。
      

  3.   

    to littlepboy(vc小p孩) 
    如果是像你这样说的话,那中国的软件工业化到什么时候才可以实现?
    国外在这方面已经非常领先了,我们国人还在一个劲地自主开发。
    呵呵,你觉得这样做的意义大不?
      

  4.   

    呵呵,本人比较同意xiaofeixia203的观点,没有必要什么东西都自己开发,这样投入的成本太高,可结果未必会好!