1

サード パーティの DLL を受け取った場合、次のメッセージも受け取るはずです。

1) 関数プロトタイプを含むヘッダー

2) スタティック リンク ライブラリまたはインポート ライブラリ (DLL と同じベース名ですが、拡張子は .LIB)

私の混乱は、ある Dll を別の C++ DLL プロジェクトにリンクし、それをビルドして依存関係を適切にリンクする方法がわからないことです。関数プロトタイプはどこで入手できますか? 私の DLL プロジェクトでは、__declspec(dlliexport) を使用せずに .DEF ファイルを使用しています。DLL を C++ DLL プロジェクトにリンクするには、最低限必要なものは何ですか?

現在のコンセンサス (および SOF に関する私の調査から) は次のとおりであることを知っています。

1) 外部関数プロトタイプを取得したサードパーティのヘッダー ファイルを含めます (私はそれらを持っていません)。2) プロジェクト プロパティ シート (Visual Studio 2010) から .LIB ファイルを追加します。

それは行く方法ですか?DLL を実行可能フォルダーにコピーする必要がありますか? 正しい手順は何ですか?私がこれを自分でやろうとしている間、誰かが私を助けてくれませんか?

アップデート

Dll_A.h

extern void this_is_dll_A(void); // Prints DLL_A

Dll_A.c

#include <stdio.h>
#include "Dll_A.h"

void this_is_dll_A(void)
{
printf("THIS IS DLL A\n\n\n");
}

Dll_A プロジェクトに次の def ファイルを使用します

LIBRARY Dll_A
EXPORTS
    this_is_dll_A @1

Dll_B.h

#include "Dll_A.h"

extern void this_is_dll_B(void); 

プロパティ シートに Dll_A.h ヘッダー ファイルのインクルード フォルダーを追加します。また、リンカー オプションの .lib ファイルとそれを含むフォルダー。しかし、DLL はありません。

Dll_B.c

#include <stdio.h>
#include "Dll_B.h"


void this_is_dll_B(void)
{
printf("This is dll B...and...\n\n");
this_is_dll_A();
}

Dll_B プロジェクトに d_b.def ファイルを使用します

LIBRARY Dll_B
EXPORTS
this_is_dll_B @1

輸入品がない!? これが正しいかどうかはわかりません。

私の Dll_B プロジェクトでは、多くの Web サイトに含まれる SOF が推奨Dll_A.dllするフォルダーにファイルをコピーしません。Debug

それはうまく構築されます。問題は、ヘッダーファイルなしでできるかどうか、またはすべきかどうかわからないことです。また、Dll_B を VS2010 の実行可能アプリ プロジェクトにリンクする場合、どのようにすればよいでしょうか。

4

1 に答える 1

1

あなたが説明したビルド プロセスは正しいです。DLL を 2 番目の DLL のインポート ライブラリにリンクします。ランタイムに関しては、両方の DLL が DLL 検索パス (PATH 環境変数) または exe と同じディレクトリにある必要があります。DLL が見つからない場合、アプリケーションはロードされません。

LoadLibrary 関数を使用して DLL をロードする別の方法があります。この場合、インポート ライブラリにリンクせず、GetProcAddress を介して手動ですべての DLL インポートをマップする必要があります。このメソッドは、すべての DLL が既知の公開されたインターフェイスを持つプラグインに使用されます。

于 2013-11-27T10:56:04.323 に答える