3

こんにちは。コーディングを簡単にするために、ゲームのフレームワークを作成しようとしています。オブジェクトを追加する関数を作成したばかりですが、インデックス バッファを作成する部分を作成した後、アンチウイルスから「ウイルスが見つかりました: Win32: Evo-gen [Susp]」と表示され続け、理由がわかりません。オブジェクトをロードする関数のコード:

HRESULT Framework::AddObject(Object* obj){
    std::vector<short> indices;
    std::vector<VertexType> vertices;
    obj->GetData(indices,vertices);
    IDirect3DVertexBuffer9* cVBuffer;
    IDirect3DIndexBuffer9* cIBuffer;
    int at=vertexBuffers.size();
    vertexBuffers.push_back(cVBuffer);
    indexBuffers.push_back(cIBuffer);
    unsigned int sOfVerts=vertices.size()*sizeof VertexType;
    unsigned int sOfIndices=indices.size()*sizeof(short);
    vCount.push_back(vertices.size());
    iCount.push_back(indices.size());
    HRESULT hr=device->GetDevice()->CreateVertexBuffer(sOfVerts,0,D3DFVF_VertexType,D3DPOOL_DEFAULT,&vertexBuffers[at],NULL);
    if(FAILED(hr)){
        EndWithError("Failed to load object",hr);
        return hr;
    } else {
        void* p_vertices;
        hr=vertexBuffers[at]->Lock(0,sOfVerts,(void**)&p_vertices,0);
        if(FAILED(hr)){
            EndWithError("Failed to lock buffer",hr);
            return hr;
        } else {
            applog<<"Successfuly created VertexBuffer for object "<<obj->GetClass()<<"["<<at<<"], vertices size: "<<sOfVerts<<", vertices count: "<<vertices.size()<<std::endl;
            memcpy(p_vertices,&vertices[0],sOfVerts);
            vertexBuffers[at]->Unlock();
        }
    }
    hr=device->GetDevice()->CreateIndexBuffer(sOfIndices,D3DUSAGE_WRITEONLY,D3DFMT_INDEX16,D3DPOOL_MANAGED,&indexBuffers[at],NULL);
    if(FAILED(hr)){
        EndWithError("Failed to load indices",hr);
        return hr;
    } else {
        void* p_indices;
        hr=indexBuffers[at]->Lock(0,sOfIndices,(void**)&p_indices,0);
        if(FAILED(hr)){
            EndWithError("Failed to lock index buffer",hr);
            return hr;
        } else {
            memcpy(p_indices,&indices[0],sOfIndices);
            indexBuffers[at]->Unlock();            
        }
    }
    return S_OK;
}
//device->GetDevice() - returns IDirect3DDevice9*
//obj->GetData(vector<int>& indices,vector<VertexType>& vertices); //gets vertices and indices
//obj->GetClass() const; - returns name of class of object, because Object is base class for another objects

Render 関数は次のようになります。

void Framework::RenderFrame(){
    IDirect3DDevice9* dev=device->GetDevice();
    if(dev!=NULL){
        dev->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(32,32,64),1.0f,0);
        if(SUCCEEDED(dev->BeginScene())){
            for(unsigned int i=0;i<vertexBuffers.size();i++){
                IDirect3DDevice9* dev=device->GetDevice();
                dev->SetStreamSource( 0, vertexBuffers[i], 0, sizeof( VertexType ) );
                dev->SetFVF( D3DFVF_VertexType );
                dev->SetIndices(indexBuffers[i]);
                //dev->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );
                dev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,vCount[i],0,iCount[i]/3);
            }
            dev->EndScene();
        }
        dev->Present(NULL,NULL,NULL,NULL);
    }
}

理由、アンチウイルスがこれをウイルスとして検出する理由、および修正方法を誰か教えてもらえますか?

4

2 に答える 2

2

問題が解決しました。また、インデックス バッファとはほとんど関係がありませんでした。その理由は、2 つの閉じられていない出力ファイル ストリームが原因でした。

とにかくみんなありがとう!私は少なくとも何か新しいことを学びました。

于 2013-03-05T13:11:27.093 に答える
1

ウイルス対策ソフトウェアは、「ヒューリスティック」(「高度な推測」を意味する派手な言葉) を使用して「悪いパターン」を検出します。これは「偽陽性」のように聞こえます。

適切な解決策は、AV プロバイダーに問題を報告し、有効なコードを誤って検出しない新しいバージョンの "検出" を発行してもらうことです。ただし、非常に優れた AV プロバイダーを使用していない限り、今後数週間以内に多くの成果が得られる可能性は低いでしょう。

したがって、実際の解決策は、多くの場合、AV を完全に削除するか、別の製品に置き換えることです [ちなみに、AV ソフトウェアはそれ自体をアンインストールするのが難しくなる傾向があるため、どちらも非常にトリッキーな場合があります - もちろん正当な理由があります) 、AV ソフトウェアをアンインストールするために最初のウイルスがマシンにヒットするのは望ましくありません。

「ライブスキャン」をオフにするだけで十分な場合もあります。

于 2013-03-05T12:46:52.130 に答える