• 解决:对 PInvoke 函数的调用导致堆栈不对称问题


    解决:对 PInvoke 函数的调用导致堆栈不对称问题


    问题描述:

    在使用托管代码调用非托管代码时,发生“对 PInvoke 函数“UseTwiHikVisionDllTest!UseTwiHikVisionDllTest.TwiHikVision::GetFirstPic”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。”

    解决方法:

    添加属性:CallingConvention=CallingConvention.Cdecl
    如:
    [DllImport("TwiHikVision.dll", EntryPoint="GetFirstPic",CallingConvention=CallingConvention.Cdecl)]
    public static extern string GetFirstPic(string videoFileName, string exportFilePath);


    网络参考可能原因:
    http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b0637998-dc89-4ff9-b59d-5ad262a48bc6
    You need to set the calling convention. The default convention (stdcall) is not correct, which will cause P/Invoke stack imbalances.


    For example, your first call should look like:


    [DllImport("Service.dll", CallingConvention=CallingConvention.Cdecl)] static private extern IntPtr CallCreateClass();
    By default, C and C++ use cdecl - but marshalling uses stdcall to match the Windows API.

  • 相关阅读:
    Composite in Javascript
    Model Validation in Asp.net MVC
    HttpRuntime.Cache vs. HttpContext.Current.Cache
    Controller Extensibility in ASP.NET MVC
    The Decorator Pattern in Javascript
    The Flyweight Pattern in Javascript
    Model Binding in ASP.NET MVC
    Asp.net MVC
    jQuery Ajax 实例 全解析
    ASP.NET AJAX入门系列
  • 原文地址:https://www.cnblogs.com/simadi/p/4630086.html
Copyright © 2020-2023  润新知