问题和
http://topic.csdn.net/u/20080402/19/5cfcdfc3-177e-4a9a-98ea-0e499a00a1e1.html
的一样,在stdafx.h文件中配置好LIB,都是static void __cdecl CBeautyTabCtrlEx::LoadTabBmps(char *,char *,char *)" (__imp_?LoadTabBmps@CBeautyTabCtrlEx@@SAXPAD00@Z) 这样的错误,有没有人知道? 谢谢。

解决方案 »

  1.   

    lib具体是怎么添加进来的?另外,CBeautyTabCtrlEx::LoadTabBmps是否在这个lib中?
      

  2.   

    stdafx.h文件中添加:
    //SkinBeauty Lib Call 
    #include  "SkinBeautyExport.h"
    #pragma   comment(lib,"SkinBeauty.lib")
    #define DELETENEWVAR(p)  {if(p){delete p; p = NULL;}}
    #define IFNULLRETURN(p)  {if(p == NULL)return;}
    #define ZERONEWVAR(p)    {memset(p,0,sizeof(p));}
    #pragma warning(disable:4652)
    #pragma warning(disable:4275)  //export class 
    #pragma warning(disable:4251)  //export class 还有工程配置上LINK上也加了这个文件的, 看不了啊,但应该在这里的,因为我是从另外一个工程上拷贝过来的。
      

  3.   

    看起来是CBeautyTabCtrlEx::LoadTabBmps不在SkinBeauty.lib中,或者是两者的版本不同,看看还有没有其它lib文件或者cpp文件。
      

  4.   

    我搜索了一下只有这个LIB文件,而且没有其他的CPP文件,直接在项目搜索LoadTabBmps函数,只能搜索到头文件而已。
      

  5.   

    你用dumpbin.exe查一下这个lib中没有这个函数。
      

  6.   

    查了一下是有这个函数:?LoadFace@CBeautyGroupCtrlEx@@SA_NPAG00@Z (public: static bool
     __cdecl CBeautyGroupCtrlEx::LoadFace(unsigned short *,unsigned short *,unsigned
     short *))
                      ?LoadTabBmps@CBeautyTabCtrlEx@@SAXPAG00@Z (public: static void
     __cdecl CBeautyTabCtrlEx::LoadTabBmps(unsigned short *,unsigned short *,unsigne
    d short *))
      

  7.   

    知道问题了,这个库使用的是Unicode字符集(未使用wchar_t),你的程序也要改成相同的字符集才行。
    你是用哪个版本的VC?如果是用VC6,在stdafx.h中,先定义UNICODE和_UNICODE两个宏;如果是VS.NET,把项目属性中的字符集设置为使用Unicode。另外,程序中有关字符和字符串的类型也都要做响应修改,使用TCHAR、LPTSTR等类型。
      

  8.   

    漏了一句,如果是VS.NET,还要设置把wchar_t不作为基本数据类型。
      

  9.   

    下午我也怀疑过这个问题,我的是VC6的,我定义UNICODE和_UNICODE的时候出现这样的问题:error LNK2001: unresolved external symbol _WinMain@16。
      

  10.   

    后来我直接在debug上添加配置成unicoderelease,也不行。
      

  11.   

    问题解决了,添加/nologo /entry:"wWinMainCRTStartup"  就可以了,呵呵 谢谢cnzdgs,另外请教一个小问题,请问一下 这个beautyQQ目前能商用的吗? 呵呵
      

  12.   

    可以肯定是这个问题,对比一下这两个函数类型就知道了:
    static void __cdecl CBeautyTabCtrlEx::LoadTabBmps(char *,char *,char *);
    static void 
    __cdecl CBeautyTabCtrlEx::LoadTabBmps(unsigned short *,unsigned short *,unsigne 
    d short *);
    前者的参数都是char*,是多字节字符集的字符串类型;后者的参数都是unsigned short*,是Unicode字符集(VC6)的字符串类型。
    如果不能生成Unicode字符集的版本,可能是你的VC有问题。
      

  13.   

    呵呵,我没用过beautyQQ,不了解。
      

  14.   

    但是现在还有一个问题,之前其他模块代码都不是unicode,现在全部改成unicode之后,报了一大堆错误出来,都是赋值的问题,我想问下有没有办法可以使得只有一个模块是unicode的,其他的还是保留原来的?
    我在这个模块的公用的一个头文件上定义了:
    #define _UNICODE
    #define UNICODE#pragma   comment   (linker,   "/ENTRY:wWinMainCRTStartup")   但是没用,还是出现了之前的nresolved external symbol这样的错误出来.
      

  15.   

    这样不行,最好各个模块都用统一的字符集,不然link的时候会出unresolved 错误...
      

  16.   

    原则上,同一项目内的各个模块都必须使用相同的字符集,主要原因是程序所调用的很多lib对于不同字符集是不同的,同一项目不能同时连接同一个lib的两个字符集版本。
    如果你调用SkinBeauty.lib的函数较少,可以自己修改一下头文件,把与字符有关的类型都改成WCHAR、LPWSTR等类型,在程序中使用Unicode字符串来调用这些函数。