1

これが私がコーディングした小さなアプリケーションです。ここで、デフォルトオプションとして/ hを作成します。これにより、ユーザーが/ hを実行すると、ヘルプメッセージが表示されます。誰かがこれを手伝ってくれますか?

#include "Poco/Util/Application.h"
#include "Poco/Util/Option.h"
#include "Poco/Util/OptionSet.h"
#include "Poco/Util/HelpFormatter.h"
#include "Poco/Util/AbstractConfiguration.h"
#include "Poco/AutoPtr.h"
#include "Poco/Process.h"
#include "Poco/PipeStream.h"
#include "Poco/StreamCopier.h"
#include <fstream>
#include <iostream>

using Poco::Util::Application;
using Poco::Util::Option;
using Poco::Util::OptionSet;
using Poco::Util::HelpFormatter;
using Poco::Util::AbstractConfiguration;
using Poco::Util::OptionCallback;
using Poco::AutoPtr;
using Poco::Process;
using Poco::ProcessHandle;
using namespace std;

class SampleApp: public Application
{

    protected:  
    void defineOptions(OptionSet& options)
    {
        Application::defineOptions(options);
        options.addOption(
            Option("help", "h", "Displays help details")
                .required(false)
                .repeatable(false)
                .callback(OptionCallback<SampleApp>(this, &SampleApp::handleHelp)));

        options.addOption(
            Option("Execute", "e", "Executes a c++ code and stores output in processess.txt")
                .required(false)
                .repeatable(false)
                .callback(OptionCallback<SampleApp>(this, &SampleApp::handleExecute)));
    }

    void handleHelp(const std::string& name, const std::string& value)
    {   
        Help();
    }
    void handleExecute(const std::string& name, const std::string& value)
    {   
        Execute();
    }

    void Help()
    {
        cout << "App.exe /option";

    }
    void Execute()
    {
    std::string cmd("D:\\Projects\\sample_cpp\\Debug\\sample_cpp.exe");
        std::vector<std::string> path;
        path.push_back("");
        Poco::Pipe outPipe;
        ProcessHandle ph = Process::launch(cmd, path, 0, &outPipe, 0);
        Poco::PipeInputStream istr(outPipe);
        std::ofstream ostr("processes.txt");
        Poco::StreamCopier::copyStream(istr, ostr);
        cout << "Chk for processess.txt file" << endl;
    }

    int main(const std::vector<std::string>& args)
    {

        return Application::EXIT_OK;
    }

};

POCO_APP_MAIN(SampleApp)
4

1 に答える 1

2

OT:<rant>私はPoCoが大好きで、以前に使用したことがあります。最近、コンパイラのサポートが普及しているので、代わりにBoostに惹かれます。この問題は、侵入的/制限的なフレームワークの私の定義です。単純なことは実行が難しくなります。良いプログラマーの価値に逆らうこともあります。</rant>

私はそのように旗を立てることを提案します:(床を見てください_noop

#include "Poco/Util/Application.h"
#include "Poco/Util/Option.h"
#include "Poco/Util/OptionSet.h"
#include "Poco/Util/HelpFormatter.h"
#include "Poco/Util/AbstractConfiguration.h"
#include "Poco/AutoPtr.h"
#include "Poco/Process.h"
#include "Poco/PipeStream.h"
#include "Poco/StreamCopier.h"
#include <fstream>
#include <iostream>

using Poco::Util::Application;
using Poco::Util::Option;
using Poco::Util::OptionSet;
using Poco::Util::HelpFormatter;
using Poco::Util::AbstractConfiguration;
using Poco::Util::OptionCallback;
using Poco::AutoPtr;
using Poco::Process;
using Poco::ProcessHandle;
using namespace std;

class SampleApp: public Application
{

    protected:  
    void defineOptions(OptionSet& options)
    {
        Application::defineOptions(options);
        options.addOption(
            Option("help", "h", "Displays help details")
                .required(false)
                .repeatable(false)
                .callback(OptionCallback<SampleApp>(this, &SampleApp::handleHelp)));

        options.addOption(
            Option("Execute", "e", "Executes a c++ code and stores output in processess.txt")
                .required(false)
                .repeatable(false)
                .callback(OptionCallback<SampleApp>(this, &SampleApp::handleExecute)));
    }

    void handleHelp(const std::string& name, const std::string& value)
    {   
        Help();
    }
    void handleExecute(const std::string& name, const std::string& value)
    {   
        Execute();
    }

    void Help()
    {
        _noop = false;
        cout << "App.exe /option";

    }
    void Execute()
    {
        _noop = false;
        std::string cmd("D:\\Projects\\sample_cpp\\Debug\\sample_cpp.exe");
        std::vector<std::string> path;
        path.push_back("");
        Poco::Pipe outPipe;
        ProcessHandle ph = Process::launch(cmd, path, 0, &outPipe, 0);
        Poco::PipeInputStream istr(outPipe);
        std::ofstream ostr("processes.txt");
        Poco::StreamCopier::copyStream(istr, ostr);
        cout << "Chk for processess.txt file" << endl;
    }

    SampleApp() : _noop(true) { }

    int main(const std::vector<std::string>& args)
    {
        if (_noop)
            Help();

        return Application::EXIT_OK;
    }

  private:
    bool _noop;

};

POCO_APP_MAIN(SampleApp)
于 2011-06-16T14:55:14.343 に答える