2017-01-25 45 views
1

によって継続的にスローされました。私はc/C++にはあまり馴染みがありませんが、ソースから巨大なプロジェクトをコンパイルする必要があります。私は過去数日間、小さな問題の多くを処理することができましたが、私はこの問題を解決することはできません。アクセス違反が_findnext(C++)

アクセス違反エラーを一貫して生成するsearch_libraryメソッドを持つMP_DLL_Manager_cクラスがあります。残念なことに、環境を設定するためには、ソースがコンパイルされるたびに、そのアプリケーションが呼び出されます。

方法は次のとおりです。

bool MP_Dll_Manager_c::search_library(vector<string> * lib_names, const char * path) 
{ 
    struct _finddata_t c_file; 
    long hFile; 
    static string fname; 
    string buffer; 
    buffer = path; 
    buffer += "\\"; 
    buffer += MP_Dll_Manager_c::get_dll_type(); 
    if ((hFile = (long)_findfirst(buffer.c_str(), &c_file)) == -1L) 
    { 
     mp_error_msg("MP_Dll_Manager::search_library","No *.dll files in current directory: [%s]\n", buffer.c_str()); 
     return false; 
    } 
    else 
    { if (strcmp(c_file.name ,"mptk.dll") && strcmp(c_file.name ,"libmptk.dll") && strcmp(c_file.name ,"mptk4matlab.dll") && strcmp(c_file.name ,"libmptk4matlab.dll")){ 
     fname = path ; 
     fname += "\\"; 
     fname += c_file.name; 


     (*lib_names).push_back(fname); 
    } 

     while (_findnext(hFile, &c_file) == 0) 
     { 
     if (strcmp(c_file.name ,"mptk.dll") && strcmp(c_file.name ,"libmptk.dll") && strcmp(c_file.name ,"mptk4matlab.dll") && strcmp(c_file.name ,"libmptk4matlab.dll")){ 
      fname = path ; 
      fname += "\\"; 
      fname += c_file.name; 
      (*lib_names).push_back(fname);} 

     } 
     _findclose(hFile); 
    } 

    return true; 
} 

ちょうど(彼らはすべきではないことと一致しません提供)指定されたパスにDLLを返すことになっています。しかし、_findnextで処理されない例外が発生しました。これはアクセス違反です。私は原因を理解できません。

call stack

答えて

2

利用intptr_t hFileの代わりに、長いファイル名を定義しました。あなたはMSDNのドキュメントを参照することができます_findnext

+1

私はそれを試してみたことができたかもしれませんが、明らかに私はしませんでした!あなたの助けてくれてありがとう - それは問題を解決したようです。私はなぜ元の開発者が長い間使って、_findfirstの出力をキャストしたのか、私はちょうど理由があると仮定した言語に精通していないという理由で、 – dmb

関連する問題