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
。