У меня есть управляемый проект C++/CLI, который должен использовать некоторый собственный код. Упрощенная версия исходного файла заголовка будет:Вызов функции native из управляемого кода
struct structA
{
// Some variables...
};
struct structB
{
// Some similar variables...
void convertTo(structA& dest);
};
Этот заголовок включен в управляемый код. Управляемый код имеет:
structA sA;
structB sB;
// Load data into sB...
sB.convertTo(sA);
Я использую Visual Studio 2008 и компиляции управляемого кода с /clr
. Это, конечно, создает ошибку компоновщика (LNK2028), поскольку соглашения о неявных вызовах различаются. Однако я не смог использовать объявления extern "C"
, чтобы решить эту проблему (или, возможно, я их неправильно использую). Я попробовал несколько решений, предоставленных для подобных вопросов здесь, но безрезультатно.
Как правильно вызвать неуправляемую функцию из управляемого кода? Какая декларация или обертка требуется здесь?
Я компилирую с '/ clr', на самом деле ... – buzjwa
Ок, извините, это то, на что ссылается страница с ошибкой –
Объявления в стиле C в файле .h должны быть обернуты' #pragma managed' так что компилятор знает, что функции не управляются кодом. Или объявления функций должны явно указывать вызывающее соглашение, всегда лучшее, что нужно сделать. Используйте атрибут __stdcall или __cdecl. –