2012-05-21 6 views
1

Я новичок в программировании на C++ в Qt. Если вы можете ответить на любой или часть вопросов, это будет здорово и полезно, спасибо.доступ к функциям из внешней статической библиотеки

Я использую внешнюю библиотеку как статическую, поскольку она предоставляется только в файле «.lib». Я правильно связал его с помощью веб-сайта stackoverflow. У меня также есть файлы заголовков, связанные с библиотекой. Я включил файл заголовка в main.cpp. Я могу получить подпись функции, посмотрев файл заголовка. Мой вопрос: как мне получить доступ к функциям из внешней библиотеки?

Например, здесь есть одна функция, которую я пытаюсь использовать в main.cpp:

==> QRETURN QuickFind (полукокса * устройства, без знака долго длина);

int main (int argc, char *argv[]{ 

// I have declared like this by copying the exact function signature with added extern 
extern QRETURN Quickfind(char *device, unsigned long length); 
cout << device << " and " << length << endl; 

} Тем не менее, это покажет, что ошибки устройство и длина не были заявлены в этой области. Таким образом, я могу изменить, объявляя параметры перед функциями:

int main (int argc, char *argv[]{ 
char *device = NULL; 
unsigned long length = NULL; 
extern QRETURN Quickfind(char *device, unsigned long length); 
cout << device << " and " << length << endl; 

} Я надеялся, что будут переданы в функцию этих двух параметров, но, видимо, они не сделали. Кроме того, если я использую функцию непосредственно после объявления:

int main (int argc, char *argv[]{ 
char *device = NULL; 
unsigned long length = NULL; 
extern QRETURN Quickfind(char *device, unsigned long length); 
Quickfind(*device, length); 
cout << device << " and " << length << endl; 

} Это даст мне неопределенную ссылку на «QuickFind @ 8» сообщения об ошибке.

Может ли кто-нибудь показать мне или дать мне несколько советов или помочь как правильно получить доступ к функциям и использовать их из внешней статической библиотеки? Спасибо.

+4

Получить себе хорошую C++ книги, вам срочно нужно прочитать о самых основах языка. (Извините, если это звучит жестко, но дает вам пару подсказок, чтобы вы могли его скомпилировать и, возможно, запустить, не поможет. C++ довольно сложный, вам нужно понять, что вы пишете, и нет замените для чтения хорошую книгу или десять.) – Mat

ответ

0

Хотя у вас есть правильные общие идеи для того, что вы пытаетесь сделать, есть некоторые проблемы с тем, как вы это делаете.

Во-первых, поскольку вы пытаетесь использовать функцию extern для функции, которая находится в вашем файле заголовка. Насколько мне известно, extern следует использовать только в том случае, если у вас есть функция, класс, структура или глобальная переменная, объявленные в другом .cpp-файле.

Поскольку ваша функция объявлена ​​в файле заголовка, вам не нужно использовать extern, просто включите файл, как у вас уже есть.

Во-вторых, когда вы создаете переменную length, вы устанавливаете ее на NULL; Хотя технически в большинстве случаев NULL определяется только как 0, вы должны использовать только NULL при объявлении нулевых указателей (например, вашего массива символов).

В-третьих, на основе сигнатуры функции для Quickfind ... Насколько я могу судить, Quickfind принимает параметры устройства и длину и возвращает QRETURN. Я не знаю, что именно делает Quickfind, но я предполагаю, что это не дает вам имя устройства или длину.

Возможно, это даст вам имя, но если это так, вам нужно создать массив, чтобы сначала ввести имя.

Я не знаю точно, что происходит, но, пожалуйста, попробуйте следующее:

#include <your header file> or "your header file" 

int main (int argc, char *argv[]{ 
    char *device = new char[100]; 
    unsigned long length = 100;   

    Quickfind(device, length); 
    cout << device << " and " << length << endl; 
} 
Смежные вопросы