Here is the solution: I should use Marshal.StringToHGlobalAnsi() to Allocate a managed String and copy all of an unmanaged ANSI string into it. new code is this one:
IntPtr hBmp = Marshal.StringToHGlobalAnsi(FinalPath);
SendMessage(mCapHwnd,WM_CAP_SAVEDIB,0,hBmp.ToInt32());