2015-01-20 2 views
0

У меня есть управляемый проект 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", чтобы решить эту проблему (или, возможно, я их неправильно использую). Я попробовал несколько решений, предоставленных для подобных вопросов здесь, но безрезультатно.

Как правильно вызвать неуправляемую функцию из управляемого кода? Какая декларация или обертка требуется здесь?

+0

Я компилирую с '/ clr', на самом деле ... – buzjwa

+0

Ок, извините, это то, на что ссылается страница с ошибкой –

+0

Объявления в стиле C в файле .h должны быть обернуты' #pragma managed' так что компилятор знает, что функции не управляются кодом. Или объявления функций должны явно указывать вызывающее соглашение, всегда лучшее, что нужно сделать. Используйте атрибут __stdcall или __cdecl. –

ответ

1

Оказывается, это не проблема с управляемым неуправляемым конфликтом. Я просто забыл объявить используемую функцию, как на экспорт, т.е.

__declspec(dllexport) void convertTo(structA& dest); 

Второй, более общая ошибка линкер (LNK2019) для функции без ссылок было то, что я должен был обращать внимание. Странно, что также была выбрана управляемая неуправляемая ошибка столкновения (LNK2028), так как это более специализированная ошибка (которая также отбросила меня со следа). Насколько мне известно, эта ошибка должна была применяться только в том случае, если я использовал /clr:pure, как это было предложено в комментариях.

Смежные вопросы