VERIFY( 1 == LoadSkinFile("BlueHorn.smf")) skinmagic加载皮肤出错

网上参考别人利用skinmagic换肤的代码,代码如下

VERIFY( 1 == InitSkinMagicLib(AfxGetInstanceHandle(),NULL,NULL,NULL ));
   VERIFY( 1 == LoadSkinFile("BlueHorn.smf"));
奇怪的是,有时候正常,有时候在VERIFY( 1 == LoadSkinFile("BlueHorn.smf"));处触发断言。一开始不断百度,发现别人都是这么写的,所以认为没错。但是后来自己的代码实在是没发现什么错误,于是打开SkinMagicLib.h头文件,查看了LoadSkinFile函数的说明,说明如下

//Function: LoadSkinFile( LPCTSTR SkinFile )
//   Load skin from file.
//Parameters:
//  SkinFile
//   [in] Specifies the skin file name.
//Return Values:
//   If the function success, the return value is nonzero
//   If the function fail, the return value is zero
//Remarks:
//  Load skin from file. 

也就是说啊,函数调用成功了不一定是返回1的,但是失败了一定是返回0.于是将代码改成

VERIFY( 0 != InitSkinMagicLib(AfxGetInstanceHandle(),NULL,NULL,NULL ));
   VERIFY( 0 != LoadSkinFile("BlueHorn.smf"));

-----------------------------------------分割线--------------------------------------------------------------------------------------------

在后来的测试中,问题仍然出现。仔细检查之后,注意到了一个地方,因为我的程序需要调用MFC DLL,所以使用了静态加载dll的方式加载dll,调试时发现,每次都是先加载我的mfc dll再加载skinmagic的dll。问题就出现在这里了!若是先加载skinmagic的dll,就不会出错。这可能是mfc dll先加载进内存,skinmagic的dll再对其换肤的操作非法吧。最后将mfc dll改成动态加载,加载顺序在skinmagic的dll后面,问题就再没出现过了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值