-1

Visual Studio 2015(v140)のプラットフォームツールセットを使用してVS2015で書かれたDLLがあります。 このDLL、次の機能が含まれます。プラットフォームツールセットv140のアクセス違反書き込みv100からの呼び出し時

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 ];

答えて

2

すべてのバージョンのVisual C++には、必ずしも同じではない、実際には異なる可能性が高い、ストランドライブラリの独自の実装があります。

DLLのインターフェイスに標準ライブラリの要素を指定しないように、非互換性が推奨されています。

内部的にあなたのプログラムやDLLで問題が起こらないように、それらを使用することができます。相互にインターフェイスするときは、実装に同意する必要があります。

+0

OOOO、私も必要なのは、入力(std :: string ownerid)も変更することでした。ありがとう! – Joseph

関連する問題