なく 32 ビットのインポート ライブラリを作成するには、方法。OBJs またはソース

文書翻訳 文書翻訳
文書番号: 131313
すべて展開する | すべて折りたたむ

目次

概要

ここで指定されたインポート ライブラリを作成する方法について説明をします。DLLソース コードまたはオブジェクト モジュールはされません。32 ビット バージョンのユーティリティがありません。インポート ライブラリを作成できますは。DLL はしましたが 16 ビットVisual C のバージョン。

メモ: この方法 Microsoft 以外の開発ツールで生成された Dll を動作しません。

詳細

通常、作成するときは。DLL または関数またはデータのエクスポート、ターゲットアイテムをインポート ライブラリ (と、エクスポート ファイル) の一部として生成、プロセスにリンクしています。キーが、サード パーティ製の場合。含まれていない DLLインポート ライブラリには、順序でインポート ライブラリを生成する必要があります。使用するがします。DLL が正常にロード時のダイナミック リンクを使用します。インポートライブラリは、実行時の動的リンクは必要ありません。

指定されたインポート ライブラリを作成するのには 2 つの方法がありますが。DLL:
  • 作成します。DEF ファイル用に LIB/DEF: コマンド。
  • 関数には、スタブし、使用がします。OBJ ファイルを模倣するために作成、インポート/エクスポートの関係。LIB/DEF] を使用しますコマンドを作成するには。インポート ・ ライブラリ。

作成します。DEF ファイル

使用できる唯一の時間を。DEF ファイルからのインポート ライブラリを作成します。.いない、ソース コードまたはオブジェクトのモジュールの DLL である場合は、.DLL 関数は、C のインターフェイス経由でエクスポートします。具体的には、関数は、必要があります。C 呼び出し規約を使用して宣言された.これが指定されて通常、関数のプロトタイプでを使用、に従って _cdecl 属性です。メモ属性が指定されていない場合にに従って _cdecl 既定値であるとき/Gz (_stdcallデフォルトです) か、/Gr (デフォルトの _fastcall だ) に指定されていない、CL のコマンドラインです。この制限の理由は、仮定に基づいたないすべての名前が自動的にエクスポートされますは、LIB ユーティリティによって、先頭のアンダー スコアします。これは、に従って _cdecl 関数名にのみ当てはまります。

指定します。C のインターフェイスを通じてエクスポート関数を DLL を作成します。ライブラリをインポートするには、以下の手順を実行します。
  1. 使用して DUMPBIN の一覧を取得するのには、/EXPORTS<.dll file="" name="">をエクスポートします。記号をします。問題は、DLL をクリックします。"Name"のシンボルを表示します。「序数のヒント名」の見出しをテーブルの列</.dll>
  2. 作成します。DEF ファイルに EXPORTS セクションの名前を含むDUMPBIN 出力の「名前」列に示されて機能します。
  3. に従って _cdecl 関数では、同じ使用するようにアイコンが表示されて呼び出し元のプログラムです。だけの EXPORTS セクションでこのシンボルを配置します。します。DEF ファイルです。
  4. LIB/DEF を使用しますエクスポート操作とインポート ライブラリを生成する<.def file="" name="">。ファイルです。インポート ライブラリの基本名は基本の名前になります、.DEF ファイルです。使用して/アウト: 出力ライブラリ名を制御します。</.def>

Stubbing の機能を排除

C 以外の呼び出し規約を使用してエクスポートされた関数は、状況は少し複雑になります。これは、場合は特にそうです、C++ の関数より複雑な名前装飾のスキームを検討してください。含まれています。このメソッドを使用するには、少なくともファイルのヘッダーがあります。について説明をします。DLL のインターフェイスです。

ヘッダー ファイル内のプロトタイプからスタブ関数を作成するには。
  1. "__Declspec(dllimport)"は、プロトタイプや宣言で使用され、"__declspec(dllexport)"に変更します。
  2. C 関数では C のソースを値を返さない関数の場合は、ソース コードの (、'extern"C"' を使用する C 関数では、C++ の構築)、関数のプロトタイプを終了セミコロンを交換してください。組の中かっこ (「{}」) を使用します。
  3. C++ の関数を (グローバルまたはメンバー) は、値を返す、行う必要がありますダミーの本文の関数を作成し、ダミーの値を返す、適切な種類です。(関数の return ステートメントを持たない無効です)。これはクラス メンバー関数は、同様に移動します。注意して、この手順の目的を生成するのには、LIB ユーティリティをトリックするのにはこれらダミーのボディに効果があるないため、適切なインポート ライブラリです。
  4. C++ クラスの場合を使用して、メンバーの機能を消去できますがプロトタイプの機能を無効にする場合に、クラスの宣言インライン展開すると、コンパイルします。
  5. 関数の引数は、通常はヘッダー ファイルの種類によって指定します。たとえば、Geta(int) です。ダミー引数識別子を指定する必要があります。Geta(int x) ダミー関数本体を追加する場合。それ以外の場合は、エラーC2055 が生成されます。

使用例

場合は、ヘッダー ファイル、MYDLL をについて説明します。DLL はようになります。
// mydll.H

extern "C" __declspec(dllimport) void _stdcall Function(void);

class __declspec(dllimport) CMyClass {
     int a;
     long b;
public:
     int Geta(int);
     long Getb();
     CMyClass();
};
				
インポート ライブラリのビルドに使用するダミーのソース ファイルは次のようにする必要があります。
 // mydll.CPP

 extern "C" __declspec(dllexport) void _stdcall Function(void) {}

 class __declspec(dllexport) CMyClass {
      int a;
      long b;
 public:
      int Geta(int x) {return 111;}
      long Getb() {return 111;}
      CMyClass() {}
 };
				
関数は、スタブとして作成されたがすると、すべてを行う必要がありますでコンパイル、ソース ファイルには。OBJ ファイル:
CL/c/Ob0 mydll。CPP
メモ: 関数のインライン展開を無効にすること生成を強制的に必要です。CMyClass で定義されている関数のシンボル。関数のインライン展開をした場合有効な場合は、コンパイラは、参照されて感じませんが変換単位関数を破棄するためのメンバー関数ボディ。インライン関数の拡張での最適化を参照してください。Visual の C++ CL のコマンド ライン リファレンスで。

します。OBJ ファイル LIB/DEF を使用することができますインポートを作成するには。ライブラリ (。LIB) とエクスポート ファイル (。EXP)。
LIB/DEF: mydll。OBJ
LIB コマンドの詳細については、「LIB リファレンス」を参照してには、ビジュアル C++ オンライン ブック。

また、次の資料では、Microsoft Knowledge Base を参照してください。
140485 Pascal 形式のようなシンボルで、32 ビットの Dll をエクスポートします。

プロパティ

文書番号: 131313 - 最終更新日: 2011年7月1日 - リビジョン: 4.0
キーワード:?
kbhowto kb3rdparty kbcode kbmt KB131313 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:131313
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。
サポート期間が終了した「サポート技術情報」資料に関する免責事項
この資料は、マイクロソフトでサポートされていない製品について記述したものです。そのため、この資料は現状ベースで提供されており、今後更新されることはありません。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com