如何在在asp项目中正常调用非托管c++dll


我有非托管c++dll一个,用托管c++封装了一下(不封装的话,C++类就没法在c#里面用了),然后用asp.net调用。
不是asp直接调用非托管dll。
如果是c#控制台调用一切正常,但改成 http://asp.net 项目就不行了。
原因是vs调试的时候会在一个Temporary ASP.NET Files生成一个目录,托管c++dll会被复制过去,但非托管dll不会,所以导致了程序集加载失败的异常。

google了很久发现了一个靠谱的解决方法: http://www.cnblogs.com/yeahgis/archive/2011/11/12/2246341.html
简单的说就是,在托管c++里面设置非托管c++dll延迟导入,然后把在web项目Application_Start方法内,将一个存放非托管dll的文件夹添加到path环境变量内。
这样确实不在报程序集加载失败的异常或者外部组件发生异常了;

但是随便调用一个非托管dll方法的时候,asp网页都处于假死状态,方法一直无法调用。
唉,不知道该怎么解决了

c# dll asp.net C++

无聊的夏天 9 years, 8 months ago

非托管的dll用P/Invoke 调用的时候用绝对路径。不要用path。

奶油蛋挞味 answered 9 years, 8 months ago

Your Answer