3

Я создал одну статическую библиотеку «C», используя VS.Как импортировать статические библиотеки C в приложение Windows Forms vC++

Я использую тот же файл библиотеки, что и другое приложение консоли VS C работает нормально, но когда я работаю с окнами, приложение не работает.

Написал так много запросов в этом форуме, но не получил справку.

Есть ли какие-либо соглашения об именах для вызова функций статической библиотеки из форм Windows Управляемый C++?

Попадая Ошибки, как это LNK2028

ошибки: нерешенной маркер (0A000032) "STATUS перечисления __clrcall хуга (неподписанный символ)" (? Хуг @@ $$ FYM AW4STATUS @@ E @ Z) ссылку в функции __catch $? button3_Click @ Form1 @ Myapp @@ $$ FA $ AAMXP $ AAVObject @ System @@ P $ AAVEventArgs @ 4 @@ Z $ 0

Но я должен использовать ту же самую статическую библиотеку для обоих консоль и приложение для Windows.

+0

какая версия VS вы используете? – x29a

+0

Я использую VS 2008 – arya2arya

+0

Вы не «импортируете» их, вы связываете их. Конечно, намек на то, что вы делаете это неправильно, но «его не работает» дает очень мало возможностей пройти. Если вы видите имя функции в библиотеке в сообщении об ошибке компоновщика, а также «__clrcall», вы забыли сообщить компилятору, что библиотеки содержат неуправляемый код. Конечно, вы должны были разместить ошибки, которые вы получили. Они, вероятно, читают, как греческий, но рассказывают нам, что происходит не так. –

ответ

4

Сообщение об ошибке компоновщика дает сильный намек на то, что происходит. Обратите внимание на соглашение о вызове __clrcall для неопределенного символа, он сообщает вам, что компилятор считает, что это функции «CLR». Управляемый код, конечно, это не так, они __cdecl. Там больше, имена также искалечены. Обратите внимание на «@@ $$ FYM? AW4STATUS @@ E @ Z» проклятия в названии. Который говорит вам, что компилятор считает, что они были написаны на C++ вместо C.

Вам нужно будет явно сообщить компилятору об этом, файл .h недостаточно совместим. Что вы делаете, как это в C++/CLI файл исходного кода:

#pragma managed(push, off) 
extern "C" { 
#include "yadayada.h" 
} 
#pragma managed(pop) 

В #pragmas временно отключить режим управляемого кода компиляции, поэтому компилятор теперь предположим, эти неуправляемые объявления функций. Обход extern "C" {} вокруг #include указывает компилятору, что файл .h содержит объявления C.

+0

Спасибо за ваш ответ, но он показывает фатальная ошибка LNK1313: обнаружен ijw/собственный модуль; не может связываться с чистыми модулями. – arya2arya

+2

Это еще одна ошибка, не используйте/clr: чистые, когда вы связываете собственный код. Это не чисто. –

+0

Большое спасибо @Hans Passant – arya2arya

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