我有一个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调用会产生一些奇怪的行为。
文档说最可能的原因是签名不匹配,但对我来说,两个签名看起来完全相同。