std :: ofstream ведет себя по-разному в DLL - PullRequest
0 голосов
/ 16 декабря 2011

Я разрабатываю плагин.Посмотрите на следующий код.

string request(char post_params[]) {
    CURL *curl;
    CURLcode res;
    std::string buffer; //here we'll write response

    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post_params);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) strlen(post_params));
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);

        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
    }

    return buffer;
}
....
bool perform(..) {
    std::ofstream file ("d:/t/t.txt");
    file << "opened";
    file.close();       
    string resp = request(....); 
    ...
}

Если код запускается внутри приложения, создается файл d:/t/t.txt, но если код скомпилирован в DLL и запущен из приложения, в котором запущен мой плагин, файл не создается.Но если я закомментирую строку string resp = request(....); и далее, файл будет создан.Может кто-нибудь объяснить мне, что здесь?

Ответы [ 2 ]

1 голос
/ 11 ноября 2015

Убедитесь, что вы добавляете msvcprtd.lib (Debug) и msvcprt.lib (Release) в ваши зависимости, если используете Visual Studio.

1 голос
/ 16 декабря 2011
std::ofstream file ("d:/t/t.txt");

// Make sure the file is opened before trying to write in it
if (!file.is_open())
{
   // print error message
}
else
{
   file << "opened";
   file.close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...