Dll未在ASP.net Web Api 2.0中加载



我真的需要人帮忙。我有一个ASP.Net Web Api 2.0项目,我一直在把Dll加载到我的项目中。以下是详细信息:

加载的Dll是用C++编写的,然后有一个.Net包装器WrapperA,然后有另一个项目ProjectA,我们在其中调用.Net WrapperA,然后有Web Api调用ProjectA。

我得到的错误信息是:

托管调试助手"PInvokeStackImbalance"消息=托管调试助手"PInvokeStackImbalance":"对PInvoke函数的调用"CRM.Crypto!CryptOnAPI_Lib.CryptOnAPI::LoadLibrary"使堆栈不平衡。这可能是因为托管PInvoke签名与非托管目标签名不匹配。请检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配。'

LoadLibrary((函数在WrapperA中定义为

[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr LoadLibrary(string dllToLoad, IntPtr hFile, uint dwFlag);

在web.config文件中,我也提到了这个配置以及

<hostingEnvironment shadowCopyBinAssemblies="false"/>

我试着把所有的dll放在System32、inetsvr、IIS express文件夹中,但什么都不起作用。请注意,我有一个测试应用程序,它是一个Win-Form应用程序,用于测试dll,并且dll正在该应用程序中完美加载。

我已经把所有dll放在web API项目的bin文件夹中。如果我从bin文件夹中删除dll,我会收到与上面提到的相同的错误消息。

请帮助:(

找到了我的问题的解决方案。尽管如此,我仍然无法使用win32 dll进行调试,但当部署到IIS服务器时,它运行良好。解决方案是,将Dlls放在以下文件夹之一:

C: \Windows\System32\inetsrvC: \Windows\SysWOW64\inetsrv

win32 dll将加载到Asp.Net Api中。

干杯

最新更新