从v100调用时,在平台工具集v140 DLL上写入访问冲突

时间:2016-05-08 15:09:50

标签: c++ visual-studio-2010 dll visual-studio-2015 access-violation

我有一个用VS2015编写的DLL,带有平台工具集:Visual Studio 2015(v140)。 这个DLL包括以下功能:

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

我已经通过visual studio 2010创建了一个win32控制台应用程序,并尝试将其称为#34; 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;
    }

但我得到了一个运行时"访问违规写作"例外:

  

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

1 个答案:

答案 0 :(得分:2)

所有版本的Visual C ++都有自己的strandard库实现,这些实现并不相同,事实上它们很可能是不同的。

由于不兼容,建议不要在DLL接口中指定标准库元素。

在您的程序和/或Dll内部,您可以毫无问题地使用它们。但是当彼此接口时,你必须就实施达成一致。