天天看点

OSGeo.MapServer.mapscriptPINVOKE错误的解决

    在使用C#开发MapScript的时候这是出现最频繁的错误。结合我开发中遇到的问题,总结了可能的导致该错误的原因,也许不全面,但也能解决一部分问题。如果大家有其他解决办法,也希望告知,一起学习。 

    最经常遇到的出错原因就是缺少依赖库导致。如果是WinForm程序,通常会产生如下的错误信息: 

“OSGeo.MapServer.mapscriptPINVOKE”的类型初始值设定项引发异常。 

        WEB程序中的错误信息不太一样,可能是: 

无法加载DLL”mapscript”:找不到指定的程序。(异常来自HRESULT:0x8007007f)。

    如果程序中引用了mapscript_csharp.dll,那么程序在执行时会首先在程序的执行目录下寻找它所有的依赖库,如果找不到再到system32下去找,然后是系统目录中寻找。这几个地方都找不到就会报如上错误。我的习惯是将所有的依赖动态库都放到程序的执行目录之下,具体放哪里看你的爱好,效果应该都一样。

    当然首先要解决的问题就是如何找到mapscript.dll的每一个依赖库,然后将其放到执行目录之下或者是system32目录下。我一般使用depends工具来查找依赖库,这个工具很好用,一个都不会漏掉,使用也很方面,直接将mapscript.dll拖进去就能看到所有缺少的依赖库,如下图: 

    将上图中这几个缺少的动态库找到,放到应该放的地方,一般来说这样就可以解决问题了。 

    如果这么做了还是不行,那你人品实在是太不好了,很有可能是依赖库版本不正确,这时候找起来就比较麻烦了。我遇到过一次,后来放弃了找版本,直接下载了一套最新的库。 

    我建议是直接下载ms4w或者是fwtool,他们提供的动态库一般比较全面,即使缺少也不会很多。

继续阅读