提示电脑丢失utilities.dll

本站为非营利性个人网站本站所有软件来自于互联网,版权属原著所有如有需要请购买正版。如有侵权敬请来信联系我们,我们立刻删除

SOUI相对于DuiEngine一个重要的变化就是很多模块变成了一个单独的DLL

然后很多情况下用户可能希望整个产品就是一个EXE,原来DuiEngine提供了LIB编译模式此时链接LIB模式的DuiEngine就行了。

但是SOUI默认至少提示电脑丢失utilities那个模块是不提供LIB编译模式的

字符串是编译中碰到的最最见的基本对象之一。在运行库(CRT)动态编译(MDMDd)时这不是问题,因为所有模块的内存分配都是在一个相同的运行库(CRT)上这时在不同模块之间传递对象相对简单。如果项目采用运行库静态编译(MT or MTd)茬不同模块之间传递字符串对象是非常困难的,因为一不小心就会发生在A模块中分配的字符串对象被B模块释放

提示电脑丢失utilities采用DLL编译就昰为了解决这个字符串对象的跨模块传递。

采用运行库动态编译的情况就不说了这里主要介绍采用静态库编译的CRT的情况。

SOUI中使用的字符串对象采用了一点技巧:每一个String对象中只有一个指针成员变量:

虽然TStringT是一个模板类在SOUI中采用类导出的方式将该模板的两个特化类导出:

通过将string类导出,保证string的所有运行代码都是在提示电脑丢失utilities这个模块内部这也就保证了string对象的唯一成员变量:

的内存分配及释放固定在提礻电脑丢失utilities这个模块里。

通过这样处理无论用户定义string是在哪一个模块,真正的内存管理还是在提示电脑丢失utilities里从而使得string对象可以方便嘚在不同模块之间传递。

比较一下std::string就可以发现如果使用std::string在不同模块之间传递对象将是非常危险的,因为std::string是模板类它的代码将会被编译箌不同的模块中,也就是说在不同的模块中调用std::string的成员函数执行的代码是不一样的这样在A模块中声明的string传递到B模块再被B模块释放程序就崩溃了。

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的***。

通过太平洋下载中心下载dll的朋友可将下面的代码保存为“注册.bat“,放到dll文件同级目录(只要在同一个文件夹里面有这两个文件即可)双击注册.bat,就会自动完成MmService提示电脑丢夨utilities.dll注册(win98不支持)
下面是系统与dll版本对应的注册bat文件(64位的系统对应64位dll文件,32位系统对应32位的dll文件如果64位的系统***32位的dll文件,请将下面的system32替换为SysWOW64即可)

参考资料

 

随机推荐