Я пользуюсь библиотекой 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, и все же именно только этот заголовок вызывает проблему.
Таким образом это решение кажется субоптимальным мне. Это то, как Вы обработали бы это предупреждение, или можно ли рекомендовать лучшую практику?
Я думаю, что вы хотите следующее:
#pragma unmanaged
#include <cv.h>
#pragma managed
// managed code wrapping unmanaged opencv functions
Проект C++/CLI может содержать как управляемые, так и неуправляемые части, и компилятор позаботится о маршалинге данных между ними. Управляемые точки входа будут вызываться из обычных приложений .NET (таких как C# и другие) и будут использовать сборку мусора, а для выполнения тяжелой работы они будут вызывать неуправляемые функции.