2012-05-21 5 views
1

Qt에서 C++ 프로그래밍을 처음 사용합니다. 질문의 일부 또는 전부에 답할 수 있으면 좋고 도움이 될 것입니다. 감사합니다.외부 정적 라이브러리에서 함수에 액세스

".lib"파일에서만 제공되므로 정적 라이브러리로 외부 라이브러리를 사용하고 있습니다. 나는 올바르게 stackoverflow 웹 사이트의 도움을 통해 그것을 연결했습니다. 라이브러리와 관련된 헤더 파일도 있습니다. main.cpp에 헤더 파일을 포함 시켰습니다. 헤더 파일을보고 함수 서명을 가져올 수 있습니다. 내 질문은 외부 라이브러리에서 함수에 어떻게 액세스합니까? 예컨대

여기에서 I는 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; 

} 이 나에게 오류 메시지 '8 @ Quickfind'에 대한 정의되지 않은 참조를 제공 할 것입니다.

누군가가 나를 보여 주거나 기능에 올바르게 액세스하는 방법과 외부 정적 라이브러리에서 사용법에 대한 힌트를 줄 수 있습니까? 고맙습니다.

+4

자신에게 좋은 C++ 책을 얻을, 당신은 긴급 언어의 가장 기초에 대해 읽어해야합니다. (이 말은 거칠게 들릴지 모르겠지만, 이것을 컴파일하고 실행할 수 있도록 몇 가지 단서를 제공하면 도움이되지 않을 것입니다 .C++은 매우 복잡하고 작성한 내용을 이해해야하며 좋은 책을 읽거나 10을 읽는 대신에.) – Mat

답변

0

당신이하려는 일에 맞는 일반적인 아이디어가 있지만, 당신이하는 일에 몇 가지 문제가 있습니다.

첫 번째, 헤더 파일에있는 함수에 대해 extern 함수를 사용하려고하기 때문에. 필자가 아는 한 extern은 다른 .cpp 파일에 선언 된 함수, 클래스, 구조체 또는 전역 변수가있는 경우에만 사용해야합니다.

함수가 헤더 파일에 선언되었으므로 extern을 사용할 필요가 없습니다. 이미 갖고있는 파일을 포함하면됩니다.

두 번째로 변수 length을 만들 때 NULL으로 설정하고 있습니다. 기술적으로 대부분의 경우 NULL은 0으로 정의 된 것이므로 문자 배열과 같이 null 포인터를 선언 할 때는 NULL 만 사용해야합니다.

세 번째로, Quickfind ...에 대한 함수 서명을 기반으로합니다. 내가 알 수있는 한 Quickfind는 매개 변수 device 및 length를 받아들이고 QRETURN을 제공합니다. 정확히 퀵핀트가 무엇을하는지는 모르겠지만 그것이 장치 이름이나 길이를 알려주지 않는다고 추측합니다.

아마도 이름을 되돌릴 수는 있지만, 그렇다면 먼저 이름을 넣기 위해 배열을 만들어야합니다.

내가 정확히 무슨 일이 일어나고 있는지 알고 있지만,이 시도하십시오하지 않습니다

#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; 
} 
관련 문제