由于项目需要,需要调用一款较早前开发的产品的接口。该产品是在BCB环境下开发的,提供的接口是一个DLL,是属于C++语言DLL。现在要在C#中调用,开始开发还算顺利,可是后面突然就异常了,而且异常的莫名其妙,说是HRESULT异常。
按照以往调用C++DLL的经验,这个可能是目标平台不匹配引起的。我的开发环境是win7_64的,而DLL是以前XP下的x86平台开发的,所以想着可能是这个问题。立即将目标平台调整为x86,可是异常依旧。
奇怪了!!这是怎么回事?
百思不得其解之下,便怀疑会不会是电脑的问题。于是立即回想这一段都对电脑做了什么操作,想来想去,都是每天的日常操作,并没有什么特别的。如果真要说有,就只能是360杀毒升级了。
360杀毒!!难道是360!!
这时,想到之前这款产品,就曾经因为有针对360而引发的异常,后面认为是因为该产品在安装时因为需要而将文件释放到了system32(64位的可能还有SysWOW64)文件夹下,之后对其进行操作而引发了异常。
在我们进行DLL调用时,system32文件夹下的DLL也是搜索的目标之一。而我调用的这个DLL,确实也是将其释放到了system32文件夹下(之前在XP环境时曾经追踪过)的。这么分析看,还真有可能是这个原因。
于是迅速定位到system32和SysWOW64文件夹,没有找到所要的dll。怎么就没有了呢?奇怪!!再安装看看!!
将安装包再安装了一次,安装时弹出了提示,有dll被拦截了。再看dll的名字,正是要调用的DLL。
把360杀毒强制退出,再重新安装,异常提示没有了。安装完后,再到文件夹下查看,找到了所要调用的DLL,再启动前面的程序,DLL调用正常了。
问题解决了,再回过头来分析下原因。
3.由于产品是以前的产品,无法对其作出修改或调整。但也告诫我们,在以后的产品开发中,尽量不要将文件释放到系统文件夹下或者进行其他的对系统敏感操作。如果必须要这样做,也需要作出评估与考量,以免对后续造成恶梦。
按照以往调用C++DLL的经验,这个可能是目标平台不匹配引起的。我的开发环境是win7_64的,而DLL是以前XP下的x86平台开发的,所以想着可能是这个问题。立即将目标平台调整为x86,可是异常依旧。
奇怪了!!这是怎么回事?
百思不得其解之下,便怀疑会不会是电脑的问题。于是立即回想这一段都对电脑做了什么操作,想来想去,都是每天的日常操作,并没有什么特别的。如果真要说有,就只能是360杀毒升级了。
360杀毒!!难道是360!!
这时,想到之前这款产品,就曾经因为有针对360而引发的异常,后面认为是因为该产品在安装时因为需要而将文件释放到了system32(64位的可能还有SysWOW64)文件夹下,之后对其进行操作而引发了异常。
在我们进行DLL调用时,system32文件夹下的DLL也是搜索的目标之一。而我调用的这个DLL,确实也是将其释放到了system32文件夹下(之前在XP环境时曾经追踪过)的。这么分析看,还真有可能是这个原因。
于是迅速定位到system32和SysWOW64文件夹,没有找到所要的dll。怎么就没有了呢?奇怪!!再安装看看!!
将安装包再安装了一次,安装时弹出了提示,有dll被拦截了。再看dll的名字,正是要调用的DLL。
把360杀毒强制退出,再重新安装,异常提示没有了。安装完后,再到文件夹下查看,找到了所要调用的DLL,再启动前面的程序,DLL调用正常了。
问题解决了,再回过头来分析下原因。
1.这些DLL要安装到system32或SysWOW64文件夹下,这些是系统文件夹,是属于敏感操作,在win7中如果不是以管理员身份安装,也有可能导致。
2.360杀毒同样认定这是一个危险的操作而将其拦截。3.由于产品是以前的产品,无法对其作出修改或调整。但也告诫我们,在以后的产品开发中,尽量不要将文件释放到系统文件夹下或者进行其他的对系统敏感操作。如果必须要这样做,也需要作出评估与考量,以免对后续造成恶梦。