Хай.
Подскажите товарищи кодеры, собираю простенькую исполняемую dll, с функцией выполнения команды в cmd получения результата и его обработки,
проблема заключается в том, что после выполнения резальтат возращается иероглифами, то есть проблема с кодировкой.
запускаю dll так: rundll32 myproject.dll,main
Но если я тот же код собираю для exe, то все четко работает.
Плиз расжуйте мне в чем проблема.
Для наглядности
Подскажите товарищи кодеры, собираю простенькую исполняемую dll, с функцией выполнения команды в cmd получения результата и его обработки,
проблема заключается в том, что после выполнения резальтат возращается иероглифами, то есть проблема с кодировкой.
запускаю dll так: rundll32 myproject.dll,main
Но если я тот же код собираю для exe, то все четко работает.
Плиз расжуйте мне в чем проблема.
Для наглядности
Код:
#define EXPORT extern "C" __declspec(dllexport)
EXPORT void main(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow)
{
exec("ipconfig > C:\\1.txt");
exec("chcp 65001 & ipconfig > C:\\65001.txt");
exec("chcp 1251 & ipconfig > C:\\1251.txt");
exec("chcp 866 & ipconfig > C:\\866.txt");
exec("chcp 1250 & ipconfig > C:\\1250.txt");
exec("chcp 1252 & ipconfig > C:\\1252.txt");
std::string g = exec("ipconfig"); // тоже но-ворк(
}
std::string exec(const char* cmd) {
//system("chcp 65001 > nul");
char buffer[128];
std::string result = "";
FILE* pipe = _popen(cmd, "r");
if (!pipe) throw std::runtime_error("popen() failed!");
try {
while (fgets(buffer, sizeof buffer, pipe) != NULL) {
result += buffer;
}
}
catch (...) {
_pclose(pipe);
throw;
}
_pclose(pipe);
return result;
}