-1

У меня есть DLL, написанная на VS2015, с набором инструментов для платформы: Visual Studio 2015 (v140). этой DLL включает следующие функции:Нарушение прав доступа на платформе toolset v140 DLL при вызове из v100

std::string GetUserPoints(std::string ownerid); 

Я создал консольное приложение win32 с помощью Visual Studio 2010, и попыталась вызвать эту функцию «GetUserPoints»!

Я получаю нарушение доступа во время выполнения, когда GetUserPoints стремятся вернуть строковое значение.

Я попытался изменить это GetUserPoints к:

int GetUserPoints(std::string ownerid, char*& output) 
    { 
     if (l_RestLowLevel != NULL) { 
      std::string str = utility::conversions::to_utf8string(l_RestLowLevel->GetUserCameraPoints(utility::conversions::to_string_t(ownerid))); 

      // Dynamically allocate memory for the returned string, +1 for terminating NULL 

      output = new char[str.length()+1]; 

      // Copy source string in dynamically allocated string buffer 
      strncpy_s(output, str.length() + 1, str.c_str(), str.length()); 

      return str.size(); 
     } 
     return 0; 
    } 

Но я получаю во время выполнения "Нарушение прав доступа пишущего" исключение на:

выход = новый символ [str.length() + 1 ];

ответ

2

Все версии Visual C++ имеют собственную реализацию библиотеки strandard, которые необязательно одинаковы, на самом деле они могут быть разными.

Из-за несовместимости рекомендуется не указывать стандартные элементы библиотеки в ваших DLL-интерфейсах.

Внутренне в ваших программах и/или Dll вы можете использовать их без проблем. но при взаимодействии друг с другом вам нужно договориться об осуществлении.

+0

OOOO, мне нужно было также изменить ввод (std :: string ownerid), слишком плохо, что я пропустил это. благодаря! – Joseph

 Смежные вопросы

  • Нет связанных вопросов^_^