1

Qt での C++ プログラミングは初めてです。質問の一部または一部にお答えいただければ、大変助かります。ありがとうございます。

「.lib」ファイルでのみ提供されるため、外部ライブラリを静的として使用しています。stackoverflow Web サイトの助けを借りて正しくリンクしました。ライブラリに関連付けられたヘッダー ファイルもあります。main.cpp にヘッダー ファイルを含めました。ヘッダー ファイルを参照することで、関数のシグネチャを取得できます。私の質問は、外部ライブラリから関数にアクセスするにはどうすればよいですか?

たとえば、main.cpp で使用しようとしている単一の関数を次に示します。

==> QRETURN Quickfind(char *device, unsigned long length);

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;

これら 2 つのパラメーターが関数に渡されることを期待していましたが、明らかにそうではありませんでした。また、宣言の直後に関数を使用すると、次のようになります。

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

1 に答える 1

0

あなたはあなたがやろうとしていることについて正しい一般的な考えを持っていますが、あなたがそれをしている方法にはいくつかの問題があります。

まず、関数を使用しようとしているexternので、ヘッダーファイルにある関数に対して。私の知るextern限り、別の.cppファイルで宣言された関数、クラス、構造体、またはグローバル変数がある場合にのみ使用する必要があります。

関数はヘッダーファイルで宣言されているため、を使用する必要はありませんextern。既に持っているようにファイルをインクルードするだけです。

次に、変数を作成するときは、変数を;lengthに設定します。NULL技術的には、ほとんどの場合、NULL0として定義されていますが、NULLnullポインタ(文字配列など)を宣言する場合にのみ使用する必要があります。

第三に、Quickfindの関数シグネチャに基づいています...私が知る限り、Quickfindはパラメータdeviceとlengthを受け入れ、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;
} 
于 2012-05-21T20:33:08.793 に答える