Как делают люди обрабатывают предупреждение C4793: 'some_function': функция, скомпилированная как собственный компонент?

Я пользуюсь библиотекой OpenCV, и один из ее заголовочных файлов, cxoperations.hpp, генерирует "warning C4793: 'anonymous namespace'::CV_XADD' : function compiled as native", если мой проект C++ компилируется с поддержкой CLR. Я могу предотвратить предупреждение путем окружения заголовка OpenCV, включают как это:

#pragma managed(push,off)
#include <cv.h>
#pragma managed(pop)

Но проект, который на самом деле использует OpenCV, не компилируется с поддержкой CLR, это - собственный C++ статическая библиотека. Проект, который действительно имеет поддержку CLR и генерирует это предупреждение без операторов прагмы, просто пользуется этой статической библиотекой. Таким образом, я немного удивлен, что предупреждение было создано вообще, особенно учитывая то, что вся статическая библиотека не компилируется с поддержкой CLR, и все же именно только этот заголовок вызывает проблему.

Таким образом это решение кажется субоптимальным мне. Это то, как Вы обработали бы это предупреждение, или можно ли рекомендовать лучшую практику?

19
задан Jav_Rock 11 June 2012 в 20:42
поделиться

1 ответ

Я думаю, что вы хотите следующее:

#pragma unmanaged
#include <cv.h>
#pragma managed
// managed code wrapping unmanaged opencv functions

Проект C++/CLI может содержать как управляемые, так и неуправляемые части, и компилятор позаботится о маршалинге данных между ними. Управляемые точки входа будут вызываться из обычных приложений .NET (таких как C# и другие) и будут использовать сборку мусора, а для выполнения тяжелой работы они будут вызывать неуправляемые функции.

17
ответ дан 30 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: