Ошибка Операция метаданных LNK2022 завершилась неудачно (8013118D): Несоответствующая информация макета в дублированных типах (ChooseDeviceParam): (0x02000273)

Недавно я получил один проект .NET для компиляции без дополнительных знаний от предыдущих разработчиков и после исправления большинства ошибок (я использую Visual Studio 2017, и предыдущая версия проекта была такой)

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1

Я все еще получаю ошибку

Ошибка состояния подавления строки Операция метаданных LNK2022 завершилась неудачно (8013118D): Несогласованная информация макета в дублированных типах (ChooseDeviceParam): (0x02000273).

Вот часть кода, где объявлено «ChooseDeviceParam» (VideoSourceList.cpp)

struct ChooseDeviceParam
{
IMFActivate **ppDevices = nullptr;    // Array of IMFActivate pointers.
UINT32      count = 0;          // Number of elements in the array.

~ChooseDeviceParam()
{
if (ppDevices != nullptr)
{
for (UINT32 i = 0; i < count; i++)
{
SafeRelease(&ppDevices[i]);
}

CoTaskMemFree(ppDevices);
}
}
};

HRESULT VideoSourceList::InitVideoDevices()
{
m_videoDevices.clear();

HRESULT hr = S_OK;
ChooseDeviceParam param;

CComPtr<IMFAttributes> pAttributes;
// Initialize an attribute store to specify enumeration parameters.
hr = MFCreateAttributes(&pAttributes, 1);
if (!SUCCEEDED(hr))
{
return hr;
}

// Ask for source type = video capture devices.
hr = pAttributes->SetGUID(
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE,
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID
);
if (!SUCCEEDED(hr))
{
return hr;
}

// Enumerate devices.
hr = MFEnumDeviceSources(pAttributes, &param.ppDevices, &param.count);
if (!SUCCEEDED(hr))
{
return hr;
}

for (UINT32 n = 0; n < param.count; ++n)
{
WCHAR name[1024];

hr=param.ppDevices[n]->GetString(MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME, name, 1024, NULL);
if (!SUCCEEDED(hr))
{
return hr;
}

VideoDeviceData data;
data.name = name;
m_videoDevices.push_back(data);
}

return S_OK;
}

и вот VideoSourceList.h

#pragma once

#include "atlbase.h"#include <memory>
#include <vector>

class VideoSourceList
{
public:
VideoSourceList();
virtual ~VideoSourceList();

HRESULT GetVideoSourceCount(int& count);
HRESULT GetVideoSourceName(int index, CComBSTR& name);

private:
struct VideoDeviceData
{
CComBSTR name;
CComPtr<IMoniker> moniker;
};
std::vector<VideoDeviceData> m_videoDevices;

HRESULT InitVideoDevices();
};

вот свойства не работающей части

Спасибо за помощь.

1

Решение

Ну, я думаю, это потому, что 2 разных файла cpp имели структуру с именем ChooseDeviceParam, поэтому я переименовал один из них (ofc переименовал все вхождения этой структуры в проекте), и теперь я больше не получаю эту ошибку (появились новые ошибки, но я думаю, они не имеют ничего общего с этой проблемой)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]