我正在尝试将系统(string str)命令用于C#中的dos操作。
namespace XYZ
{
internal class Program
{
[DllImport("msvcrt.dll")]
static extern int system(string str);
static void Main(string[] args)
{
string Command = Console.ReadLine();
system(Command);
/* Excutes command, then "PInvokeStackImbalance". */
}
}
}
我知道使用static extern int system(string str)
是一个糟糕的解决方案,但我尝试过其他不起作用的解决方案。
答案 0 :(得分:3)
您忘了指定调用约定:
[DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int system(string str);
我通常会尝试解释原因,但这似乎没有必要;)否则这不太可能解决您的问题,无论它是什么,它都与
相同Process.Start("cmd.exe", "/c " + str);
答案 1 :(得分:1)
一般来说,你的做法是错误的。此函数适用于基于C / C ++本机控制台的应用程序。在C#中,您拥有System.Diagnostic命名空间,您可以轻松地使用它来启动新进程。请看这里:C++ "system()" in C#
当然, 也可以使用该功能。可能因为DllImport短语不完整而调用异常,请参阅in .Net 4: PInvokeStackImbalance Exception此线程是关于strlen的,但我几乎可以肯定system()和strlen()使用相同的堆栈约定。