托管调试助手'PInvokeStackImbalance'

时间:2017-01-21 08:17:18

标签: .net f# pinvoke marshalling

我有一个C函数,我正在暴露给F#代码:

#define EXPORT extern "C" __declspec(dllexport)
EXPORT Video *NewVideoEncoder(LPCWSTR file, unsigned int width, unsigned int height)

客户端F#代码是:

module VideoFunctions =
    open System
    open System.Runtime.InteropServices

    [<DllImport(Common.LibraryName)>]
    extern IntPtr NewVideoEncoder(IntPtr filename, uint32 width, uint32 height)

let strPtr = Marshal.StringToHGlobalUni(filename)
let video = VideoFunctions.NewVideoEncoder(strPtr, uint32 width, uint32 height)

当我可以在代码中获得“托管调试助手'PInvokeStackImbalance'”警告时。代码似乎正确执行,但我观察到稍后的PInvoke调用会产生一些奇怪的行为。

文档说最可能的原因是签名不匹配,但对我来说,两个签名看起来完全相同。

0 个答案:

没有答案