Could not find symbol:DllRegisterServer解决之道

首先我得承认我对于Win32编程还是门外汉,而且更加离谱的是对于NSIS我也是新手,所以碰到一些常规的问题也没办法,证明过程如下。

在我学习NSIS打包过程中,根据需要,需要打包我的.NET Winform程序,而这个程序中涉及到了一个vb控件,而这个控件又不是能够独立运行的,需要一些系统的dll或ocx支持,为了做成一个一体化安装包(.NET Winform程序 + VB控件 + 控件所依赖的系统dll或ocx + .NET Framework(V2.0)),我将软件VB控件提供商的控件安装包给分解了,提取出里面的dll文件。

提取安装包文件工具使用的是Universal Extractor这里是这个工具的详细信息。

Universal Extractor is a program do to exactly what it says: extract files from any type of archive, whether it's a simple zip file, an installation program, or even a Windows Installer (.msi) package.  This is still a work in progress (see details below), but so far it's proven quite useful and I feel others can also benefit from it.

对于Win32 dll原理不熟悉的我,这时候犯了一个很大的错误,错误的认为每个Dll文件都需要注册,于是出现了在安装包执行过程中的Could not find symbol:DllRegisterServer问题。

image

后来在 晚上 网上搜索解决之道,使用Visual Studio中的Dependence Walker查看dll依赖以及dll中的函数。发现了只有dll文件中有DllRegisterServer和DllUnregisterServer的需要在NSIS脚本中RegDLL和UnRegDLL。比如如下图中所示:

 

image

apigid32.dll文件的函数中就没有DllRegisterServer和DllUnregisterServer。

而Winsock控件则有这两个函数,因此有RegDLL和UnRegDLL入口。

image

将所以需要打包的dll全部检查一遍后,更改NSIS脚本,最后成功安装,“Could not find symbol:DllRegisterServer”的问题终于得到解决。

如需转载,请注明原文出处!

转载于:https://www.cnblogs.com/fangfan4060/archive/2009/08/06/1540546.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值