Как я могу получить доступ к argc и argv в C++ от библиотечной функции

[g0] Хотя этот пост очень старый. В случае, если кто-то ищет это. [/G0] [g1] Гуава облегчает разбиение списка на подсписки определенного размера [/g1] [f1]
9
задан DanJ 1 October 2008 в 23:56
поделиться

9 ответов

Этот поток показывает, как сделать это на Linux.

http://linux.derkeiler.com/Newsgroups/comp.os.linux.development.system/2005-07/0147.html

5
ответ дан 4 December 2019 в 06:12
поделиться

Существует GetCommandLine () функция в API Win32. На других платформах необходимо ли было бы сохранить argc/argv где-нибудь (внешняя переменная?).

11
ответ дан 4 December 2019 в 06:12
поделиться

На Linux псевдофайл/proc/self/cmdline содержит командную строку для процесса. Каждый аргумент завершается с 0 байтами, и заключительный аргумент сопровождается на дополнительные 0 байтов.

12
ответ дан 4 December 2019 в 06:12
поделиться

На окнах можно получить доступ к argc/argv через __ argc и __ argv. __ wargv, если Вы хотите версию широкого символа.

5
ответ дан 4 December 2019 в 06:12
поделиться

Позвольте мне предположить, что это походит на странную ситуацию. Вы пишете плагин или что-то? Возможно, Вы не должны получать доступ к argv/argc?

4
ответ дан 4 December 2019 в 06:12
поделиться

В Windows можно использовать GetCommandLine (), чтобы получить указатель на командную строку и затем использовать CommandLineToArgvW () для преобразования того указателя на argv [] формат. Существует только широкое (Unicode) доступная версия, все же.

4
ответ дан 4 December 2019 в 06:12
поделиться

В Windows я использую этот тип вещи получить аргументы:


#include <windows.h>
#include <string>
#include <vector>
#include <cwchar>
#include <cstdio>
#include <clocale>
using namespace std;

vector<wstring> getArgs() {
    int argc;
    wchar_t** argv = CommandLineToArgvW(GetCommandLineW(), &argc);
    vector<wstring> args;
    if (argv) {
        args.assign(argv, argv + argc);
        LocalFree(argv);
    }
    return args;
}

int main() {
    const vector<wstring> argv = getArgs();
    setlocale(LC_CTYPE, ".OCP");
    for (vector<wstring>::const_iterator i = argv.begin(); i != argv.end(); ++i) {
        wprintf(L"%s\n", i->c_str());
    }
}

Править: Функция getArgs как этот также полезна для mingw, поскольку mingw не поддерживает wmain ().

1
ответ дан 4 December 2019 в 06:12
поделиться

Используйте getpid () и команда PS.

международный pid;

интервал fd;

символьный cmd[80];

pid = getpid ();

sprintf (cmd, "PS %d", pid);

fd = popen (cmd, "r");

.... строки должны быть похожими

.... 1358. определение abc/a.out

0
ответ дан 4 December 2019 в 06:12
поделиться

Вы уделили какое-либо внимание использованию переменных среды вместо командной строки? Могло бы быть легче на пользователе в зависимости от того, в каких видах приложений библиотекой будут пользоваться, и можно использовать стандарт getenv () функция.

Я думаю, в любом случае, если Ваша библиотека собирается использовать argc и argv, программа должна быть той для передачи их.

0
ответ дан 4 December 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: