[BUG] 別のタイプ ライブラリを参照する実行可能なプラットフォーム依存する、表示します。

文書翻訳 文書翻訳
文書番号: 281913 - 対象製品
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
すべて展開する | すべて折りたたむ

目次

現象

(Microsoft Windows 2000 ベースのコンピューター) などの 1 つのプラットフォームでは、複数のタイプ ライブラリを参照する Visual Basic プロジェクトをコンパイルした後結果はバイナリ (Microsoft Windows NT 4 で、Microsoft Windows 95 で、Microsoft Windows 98、および Microsoft Windows ME ベースのコンピューター) などの他のプラットフォーム上で実行が失敗し、アクセス違反 (AV) を取得します。

原因

Visual Basic コンパイラは、 dllname タイプ ライブラリ内のエントリを読み取ることはときに大文字と小文字が区別されます。 その結果、プロジェクトを 2 つ以上のタイプ ライブラリを参照すると、ライブラリ、dllname("kernel32.dll") と dllname("KERNEL32.DLL") ライブラリ B などの異なるライブラリでは異なる場合、同じ DLL の dllname エントリのスペルが、コンパイラでは、同じ DLL のインポートの 2 つのセクションを生成され、バイナリのプラットフォームの依存をレンダリングします。

状況

マイクロソフトではこれが、この資料の冒頭に記載されているマイクロソフト製品のバグとして認識しています。

詳細

問題の再現手順

  1. 両方の最新のサービス パックと、Windows 2000 ベースのコンピューターおよび Windows NT 4 ベースのコンピューターで設定します。 また Visual Basic や Visual C++ 6. 0 Service Pack 5 をコンピューターにインストール両方。
  2. Windows 2000 ベースのコンピューター、コピー アンド ペースト、次のインターフェイスの説明言語 (IDL) メモ帳にコードし、 lcase.idl として保存します。 MIDL.EXE、 midl lcase.idl でコンパイルします。 結果として得られるタイプ ライブラリを lcase.tlb と呼びます
    [
      uuid(D618AA4D-814A-47a2-9AC1-DDE18EDF1C54),
      version(1.0),
      helpstring("Lower case test")
    ]
    library lcasetest
    {
        [
          dllname("kernel32.dll"),
          version(1.0),
          helpstring("Sleep function exported by kernel32.dll")
        ]
        module lcasetest {
            [
    			entry("Sleep"), 
    			helpstring("sleep - lcase test.")
    		]
            void _stdcall Sleep([in] long dwMS);
        };
    };
    					
  3. 手順 1 でとしてビルド ucase.tlb 次の IDL コード:
    [
      uuid(3F215C63-D0AD-4980-93F2-5DDF850061E4),
      version(1.0),
      helpstring("Upper case test")
    ]
    library ucasetest
    {
        [
          dllname("KERNEL32.DLL"),
          version(1.0),
          helpstring("Sleep function exported by kernel32.dll")
        ]
        module lcasetest {
            [
    			entry("Sleep"), 
    			helpstring("sleep - ucase test.")
    		]
            void _stdcall Sleep([in] long dwMS);
        };
    };
    					
  4. Visual Basic 標準 EXE プロジェクトを作成します。 デフォルトで Form1 が作成されます。
  5. メニューの [プロジェクト ] をクリック 参照 を選択します。 参照設定 ] ダイアログ ボックスに、 lcase.tlb ucase.tlb 、両方のライブラリを選択し、[ OK] をクリックします。
  6. 次のコードを Form1 に追加:
    Private Sub Form_Load()
        lcasetest.Sleep 1
        ucasetest.Sleep 1
    End Sub
    					
  7. [ ファイル ] メニューの [プロジェクトを 保存 するクリックし、 Project1.exe の作成 、プロジェクトをコンパイルする [します。
  8. 実行可能、Project1.exe を実行し、フォームがエラーなしで表示されます。
  9. Windows NT 4 ベースのコンピューターに Project1.exe をコピーし、実行します。 アクセス違反が発生するメモ。
  10. コピーし、Windows NT 4 ベースのコンピューター上の同じプロジェクトをコンパイルし、両方の Windows NT 4 と Windows 2000 ベースのコンピューターで実行します。 Windows 2000 ベースのコンピューターが失敗したことに注意ください。

プロパティ

文書番号: 281913 - 最終更新日: 2014年2月23日 - リビジョン: 3.0
この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
キーワード:?
kbnosurvey kbarchive kbbug kbnofix kbcompiler kbmt KB281913 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:281913
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