C# 对PInvoke函数的调用。。。这可能是因为托管PInvoke签名与非托管目标签名不匹配

C# 对PInvoke函数的调用。。。这可能是因为托管PInvoke签名与非托管目标签名不匹配,c#,.net,C#,.net,附加信息:调用PInvoke函数“Test Embed!”!Test_Embed.Form1::SetWindowLong'使堆栈不平衡。这可能是因为托管PInvoke签名与非托管目标签名不匹配。检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配。 在WinForm项目中托管EXE应用程序 private void button1_Click(object sender, EventArgs e) { Process p = Pr

附加信息:调用PInvoke函数“Test Embed!”!Test_Embed.Form1::SetWindowLong'使堆栈不平衡。这可能是因为托管PInvoke签名与非托管目标签名不匹配。检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配。

在WinForm项目中托管EXE应用程序

  private void button1_Click(object sender, EventArgs e)
        {

                Process p = Process.Start(@"C:\Users\Conmeo\AppData\Roaming\Microsoft\Windows\Start Menu\LDPlayer-1.lnk");
                Thread.Sleep(500);
                 p.WaitForInputIdle();
            appWin = p.MainWindowHandle;
            SetParent(appWin, this.Handle);

            // Process p = Process.Start(@"D:\ChangZhi\LDPlayer\dnplayer.exe");


            // Remove border and whatnot
            SetWindowLong(appWin, GWL_STYLE, WS_VISIBLE);

            // Move the window to overlay it on this window
            MoveWindow(appWin, 0, 0, this.Width, this.Height, true);

        }
 [DllImport("user32.dll", EntryPoint = "SetWindowLongA", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
            private static extern long SetWindowLong(IntPtr hwnd, int nIndex, long dwNewLong);

Windows API函数使用
CallingConvention.StdCall
,而不是
Cdecl