System.MissingMethodException - только при запуске устройства

Простой пример с использованием std::sort

struct MyStruct
{
    int key;
    std::string stringValue;

    MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}
};

struct less_than_key
{
    inline bool operator() (const MyStruct& struct1, const MyStruct& struct2)
    {
        return (struct1.key < struct2.key);
    }
};

std::vector < MyStruct > vec;

vec.push_back(MyStruct(4, "test"));
vec.push_back(MyStruct(3, "a"));
vec.push_back(MyStruct(2, "is"));
vec.push_back(MyStruct(1, "this"));

std::sort(vec.begin(), vec.end(), less_than_key());

Редактирование: как указывал Кирилл В. Лядвинский, вместо предоставления предиката сортировки вы можете реализовать operator< для MyStruct:

struct MyStruct
{
    int key;
    std::string stringValue;

    MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}

    bool operator < (const MyStruct& str) const
    {
        return (key < str.key);
    }
};

Используя этот метод, вы можете просто отсортировать вектор следующим образом:

std::sort(vec.begin(), vec.end());

Edit2: Как говорит Каппа, вы также можете сортируйте вектор в порядке убывания, перегрузив оператор > и изменив вызов сортировки бит:

struct MyStruct
{
    int key;
    std::string stringValue;

    MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}

    bool operator > (const MyStruct& str) const
    {
        return (key > str.key);
    }
};

И вы должны вызвать сортировку как:

std::sort(vec.begin(), vec.end(),greater());

1
задан AlainD 5 March 2019 в 16:22
поделиться

1 ответ

Когда устройство запускается, не все API готовы к использованию с самого начала, поскольку они загружаются асинхронно. В связи с этим WinCE предлагает функцию isApiReady: https://docs.microsoft.com/en-us/previous-versions/windows/embedded/ms885686%28v%3dmsdn.10%29

При запуске устройства оно загружает драйверы, службы и, наконец, оболочку в соответствии с порядком раздела реестра init. Ваш код, вероятно, использует API, который еще не загружен и поэтому не работает.

Пример использования isApiReady можно найти по адресу https://github.com/hjgode/RAC_switch/blob/master/RAC_switch/WinAPIReady.cs

.
0
ответ дан josef 5 March 2019 в 16:22
поделиться
Другие вопросы по тегам:

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