Как использовать внешний файл dll в управляемом проекте Visual C++, сгенерированном с помощью firebreath

Мне нужно использовать некоторые функции внешнего файла dll в моем проекте firebreath. Этот проект является управляемым проектом C++. Я хочу знать, как ссылаться на внешний файл или включать его в свой проект. Я не получаю параметр «Добавить ссылку» в своей визуальной студии 2010 (потому что это управляемый проект С++). Подскажите пожалуйста как это сделать..


person rahul khandelwal    schedule 25.04.2013    source источник
comment
Если это обычная неуправляемая Dll, сделайте это по общим собственным правилам C++: все файлы .lib в список зависимостей компоновщика и вызывайте функции Dll из кода. Не используйте функцию «Добавить ссылку» — она предназначена только для библиотек .NET или COM.   -  person Alex F    schedule 25.04.2013
comment
@AlexFarber ... Но у меня есть только файл dll, а не файл .lib. Более того, я не знаю, обычная ли это неуправляемая dll или что-то еще.   -  person rahul khandelwal    schedule 26.04.2013
comment
@AlexFarber.. Более того, файл dll на самом деле является dll C #, и мне нужно ссылаться или использовать его функции в управляемом проекте C ++, созданном с помощью firebreath.   -  person rahul khandelwal    schedule 26.04.2013
comment
В проекте VS2012 C++/CLI эта функция находится здесь: Обозреватель решений — щелкните правой кнопкой мыши элемент проекта — Ссылки — Добавить новую ссылку. Надеюсь, в VS2010 это то же самое. Почему вы называете это управляемым C++, а не C++/CLI, может быть, это очень старая языковая версия VS2003?   -  person Alex F    schedule 26.04.2013


Ответы (1)


Предполагая, что вы знаете имена функций, которые вы хотите вызывать в DLL, механизм, который вы должны использовать, следующий:

// these are examples of functions --> change return values and params as needed
typedef CHAR (WINAPI *DLL_FUNC1) (USHORT, USHORT);
typedef CHAR (WINAPI *DLL_FUNC2) (USHORT, UCHAR*, UCHAR*, USHORT, UCHAR*, USHORT*, UCHAR*);
typedef CHAR (WINAPI *DLL_FUNC3) (USHORT);

// load library
HMODULE hDLL = LoadLibrary( L"\\path\\to\\your.dll" );

// check if dll was loaded 
if (hDLL == NULL) {
    // error 
    return;
}

// assign functions
DLL_FUNC1 func1 = (DLL_FUNC1) GetProcAddress( hDLL, "name_of_func1" );
DLL_FUNC2 func2 = (DLL_FUNC2) GetProcAddress( hDLL, "name_of_func2" );
DLL_FUNC3 func3 = (DLL_FUNC3) GetProcAddress( hDLL, "name_of_func3" );

// use functions --> here func1 as an example
if( func1( 1, 2 ) != OK ) { // or whatever return value
    // error
    FreeLibrary( hDLL ); 
    return;
}

// --> go on working with the DLL functions

// do not forget to call at the end
FreeLibrary( hDLL ); 
person heinob    schedule 26.04.2013