1

我正在尝试在 C# 中使用 system(string str) 命令进行 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". */
        }
    }
}

我知道 usingstatic extern int system(string str)是一个糟糕的解决方案,但我尝试了其他不起作用的解决方案。

4

2 回答 2

3

您忘记指定调用约定:

[DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int system(string str);

我通常会尝试解释原因,但这在这里似乎没有必要;)否则这不太可能解决您的问题,无论它可能是什么,它与

Process.Start("cmd.exe", "/c " + str);
于 2012-08-15T11:36:14.310 回答
1

一般来说,你做错了。此函数适用于基于 C/C++ 本地控制台的应用程序。在 C# 中,您拥有 System.Diagnostic 命名空间,您可以使用它轻松启动新进程。请看这里:C#中的C++“system()”

当然,您也可以使用该功能。可能调用异常是因为 DllImport 短语不完整,请参见.Net 4:PInvokeStackImbalance Exception此线程是关于 strlen,但我几乎可以肯定 system() 和 strlen() 使用相同的堆栈约定。

于 2012-08-15T11:24:58.427 回答