对Skin++在VS2005中的一个问题的解决方案

本文解决在Visual Studio 2005中使用Skin++库时遇到的编译错误问题。介绍了如何正确配置项目字符集,并提供了一种绕过注册提示的方法,还分享了如何使皮肤支持中文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天遇到一个很奇怪的问题:在vs2005中新建一个MFC程序,然后想在里面使用Skin++,在工程的stdafx.h里加入 #include “SkinPPWTL.h”Linker->InputAdditional Dependencies处加上SkinPPWTL.lib就遇到下面的编译错误:

None.gif errorLNK2019:unresolvedexternalsymbol " __declspec(dllimport)int__cdeclskinppLoadSkin(wchar_t*,int) " (__imp_ ? skinppLoadSkin@@YAHPA_WH@Z)referenced in function " public:virtualint__thiscallCdemo2App::InitInstance(void) " ( ? InitInstance@Cdemo2App@@UAEHXZ)
网上搜索了半天也只在 优快云 上看到有一个人问了同样的问题,可惜没有人能给出解决方案,而官方的论坛要注册版用户才能进去。我就尝试先在 VC6.0 中建立一个新项目, 在工程的 stdafx.h 里加入 #include “SkinPPWTL.h” ,然后在工程的 Project->Setting->Link->InputObject/library modules 处加上 SkinPPWTL.lib, 然后在 CDemoApp::InitInstance() 这里加入:

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

None.gif skinppLoadSkin(_T( " ..//..//skins//AquaOS//AquaOS.ssk " ));

恩,这次编译通过。最后把项目转换为2005下的项目,运行ok

然后我就想如何处理才能直接在2005下建立新项目呢?查阅了些资料后,发现其实很简单,前面报错的原因是:项目的字符属性设置不正确。

这是我的第一个解决方案:在工程的属性页(AudioOrtpRecv Property Pages)里的Configuration Properties中的General 有一个Characoer Set,把这里设置成Use Multi-Byte Character,再次运行第一个程序就ok了,大功告成。

此外,试用版每次运行起来都会先跳出个注册页面,让人十分反感,我们可以加入下列代码将这个窗口自动处理掉,注意ThreadKill要声明成static方法哦,因为要创建线程嘛。

None.gif void CDemoApp::SetSkin(CStringstrSkinFile)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gifDWORDdwThread;
InBlock.gifHANDLEhThread
=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadKill,0,0,&dwThread);
InBlock.gifCloseHandle(hThread);
InBlock.gifBOOLbReg
=skinppLoadSkin(strSkinFile.GetBuffer(strSkinFile.GetLength()));
InBlock.gifstrSkinFile.ReleaseBuffer();
ExpandedBlockEnd.gif}

None.gif
None.gifDWORDCDemoApp::ThreadKill(LPVOIDlp)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
intiCount=0;
InBlock.gif
while(iCount++<10000)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gifSleep(
1);
InBlock.gifHWNDhWnd
=::FindWindow(NULL,"UIPOWER");
InBlock.gif
if(hWnd==NULL)continue;
InBlock.gifWPARAMwp
=BN_CLICKED<<16|IDNO;
InBlock.gif::SendMessage(hWnd,WM_COMMAND,wp,
0);
InBlock.gif
break;
ExpandedBlockEnd.gif}

None.gif

然后 CDemoApp::InitInstance() 这里加入:

None.gif theApp.SetSkin(_T( " ..//..//skins//AquaOS//AquaOS.ssk " ));

当然如果需要完全的破解版,这里有破解补丁:

http://download.youkuaiyun.com/source/361720


到这就一切搞定,下面是效果图:

2008041403.jpg

到这里还没完呢,现在对中文是不支持的!所以我上面都是用的英文(^o^),那么就开始自己动手修正这个bug吧。我在第一个解决方案中 Characoer Set设置成Use Multi-Byte Character,这样是不行地。应该还原为Use Unicode Character Set,这样才能支持unicode编码。

然后这里要改为:skinppLoadSkin("..//..//skins//skin//Phenom//Phenom.ssk");然后我们在SkinPPWTL.h头文件里定义一个typedef char MYCHAR;把所有的TCHAR都改成MYCHAR,再把 _tcscpy(szResImageName,_T(""));改为strcpy(szResImageName,"");,试试效果,这下中文可以了吧。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值