1

C#でのdos-operationsにsystem(string str)コマンドを使用しようとしています。

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)が悪い解決策であることを知っていますが、私はうまくいかなかった他の解決策を試しました。

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句が不完全であるために呼び出される可能性があります。.Net4を参照してください。PInvokeStackImbalance例外このスレッドはstrlenに関するものですが、system()とstrlen()が同じスタック規則を使用していることはほぼ間違いありません。

于 2012-08-15T11:24:58.427 に答える