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

Dll is not loading in ASP.net Web Api 2.0

我真的需要有人帮忙。我有一个 ASP.Net Web Api 2.0 项目,但我一直在将 Dll 加载到我的项目中。详情如下:

loading Dll是用C++写的,然后是.Net包装器WrapperA,然后是另一个项目ProjectA,我们调用.Net WrapperA,然后是WebApi调用ProjectA。

我收到的错误消息是:

Managed Debugging Assistant 'PInvokeStackImbalance' Message=Managed Debugging Assistant 'PInvokeStackImbalance' : 'A call to PInvoke function 'CRM.Crypto!CryptOnAPI_Lib.CryptOnAPI::LoadLibrary' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.'

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 文件夹中,但没有任何效果。请注意,我有一个测试应用程序,它是一个用于测试 dll 的 Win Form 应用程序,并且 dll 正在该应用程序中完美加载。

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

请帮忙:(

找到了我的问题的解决方案。我仍然无法使用 win32 dll 进行调试,但是当部署到 IIS 服务器时,它工作正常。解决方案是,将 Dll 放在以下文件夹之一中:

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

win32 dll 将加载到 Asp.Net Api。

干杯