【问题标题】:Access violation writing on platform toolset v140 DLL when call from v100从 v100 调用时在平台工具集 v140 DLL 上写入访问冲突
【发布时间】:2016-05-08 15:09:50
【问题描述】:

我有一个用 VS2015 编写的 DLL,带有平台工具集:Visual Studio 2015 (v140)。 该 DLL 包含以下函数:

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

我用visual studio 2010创建了一个win32控制台应用程序,并尝试调用这个“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];

【问题讨论】:

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


    【解决方案1】:

    所有版本的 Visual C++ 都有自己的标准库实现,它们不一定相同,实际上它们很可能不同。

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

    在您的程序和/或 Dll 内部,您可以毫无问题地使用它们。但是在相互交互时,您必须就实现达成一致。

    【讨论】:

    • OOOO,我只需要更改输入(std::string ownerid),太糟糕了,我错过了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多