Недостатки использования / LARGEADDRESSAWARE для 32-битных исполняемых файлов Windows?

Нет - объектный подход - это ответ JavaScript на это. Нет проблем с этим, если ваша функция ожидает объект, а не отдельные параметры.

30
задан Arve 8 July 2016 в 06:14
поделиться

1 ответ

Первое, что нужно сделать, это определить, находится ли ваш ввод в Юникоде. Для этого необходимо прочесть введенные данные в формате ЮНИКОД и проверить, искажены ли результаты.

FILE * fp = _wfopen( L"fname",L"r" );
wchar_t buf[1000];
while( fgetws(buf,999, fp ) )   {
    fwprintf(L"%s",buf);
}

Если вывод - OK, у вас есть UNICODE-файл, если он искажен - UTF-8

Если у вас есть UTF-8, вам придется преобразовать в Юникод, чтобы сделать обработку простой.

// convert UTF-8 to UNICODE

    void String2WString( std::wstring& ws, const std::string& s )
    {
        ws.clear();
        int nLenOfWideCharStr = MultiByteToWideChar(CP_ACP, 0, 
            s.c_str(), s.length(), NULL, 0); 
        PWSTR pWideCharStr = (PWSTR)HeapAlloc(GetProcessHeap(), 0, 
            nLenOfWideCharStr * sizeof(wchar_t)+2); 
        if (pWideCharStr == NULL)         
            return; 
        MultiByteToWideChar(CP_ACP, 0, 
            s.c_str(), s.length(), 
            pWideCharStr, nLenOfWideCharStr);
        *(pWideCharStr+nLenOfWideCharStr ) = L'\0';
        ws = pWideCharStr ;
        HeapFree(GetProcessHeap(), 0, pWideCharStr); 

    }

    // read UTF-8
FILE * fp = fopen( "fname","r" );
char buf[1000];
std::string aline;
std::wstring wline;
std::vector< std::wstring> vline;
while( fgets(buf,999, fp ) )    {
    aline = buf;
    String2WString( wline, aline );
    vline.push_back( wline );
}

Выше предполагается, что вы находитесь в Windows. В Unix применяется та же идея и код довольно похож. Однако я не нахожу его столь простым, поэтому позволю эксперту UNIX предоставить детали.

-121--3791884-

Нет, это не военное преступление иметь код третьей стороны в вашем хранилище, но я считаю, что это расстроило мое чувство эстетики. Многие люди здесь, кажется, придерживаются мнения, что хорошо иметь всю вашу команду развития на одной версии этих зависимостей; Я говорю, что это ответственность. В конечном итоге вы зависите от определенной версии этой зависимости, где гораздо сложнее использовать другую версию позже. Я предпочитаю гетерогенную среду разработки - она заставляет вас отделить свой код от конкретных версий зависимостей.

IMHO - подходящее место для сохранения зависимостей - это резервные копии на ленточных накопителях и депозитные депозиты, если они имеются. Если этого требует конкретный проект (и проекты в этом отношении не совпадают), то также сохраните документ в системе управления версиями, который связан с этими конкретными версиями.

-121--1326610-

Поскольку большое количество устаревших кодов записывается с расчетом на то, что «отрицательные» указатели недопустимы. Любой элемент в двух верхних Гб 32-битного процесса имеет набор msb.

Поэтому для Microsoft гораздо проще играть в безопасности и требовать приложения, которые (а) нуждаются в полной 4Gb и (б) были разработаны и протестированы в сценарии большой памяти, чтобы просто установить флаг.

Это не так трудно, как вы заметили.

Рэймонд Чен - в своем блоге The Old New Thing - освещает проблемы с включением его для всех (32-битных) приложений.

12
ответ дан 27 November 2019 в 20:30
поделиться
Другие вопросы по тегам:

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