どのように私は、32ビットと64ビットの両方の形式で配布ネイティブDLLに名前を付ける必要がありますか?

StackOverflow https://stackoverflow.com/questions/2385480

  •  24-09-2019
  •  | 
  •  

質問

私は、DLL(ネイティブ32ビットコード)の商業製品を持って、今ではそれの64ビット版を構築するための時間です。 64ビット版のWindowsにインストールするときに、32ビット版のWindows \ SYSWOW64に入り、64ビット版はに... Windowsの\ System32になります! (私はここに私の舌を噛みました...) またはDLL(s)は、クライアントアプリケーションと一緒にインストールすることができます。

私は64ビットのDLLに名前を付ける必要がありますか?

32ビットとして

同じ名前:同じことを行う2つのファイル、同じ名前を持っていますが、完全に非互換性があります。混乱やサポートの問題のためにそのレシピはありませんか?

別の名前(例えばproduct.dllとproduct64.dll):今、クライアントアプリケーションは、彼らが私のDLLを参照するために32ビットまたは64ビットを実行しているかどうかを知る必要があり、そして知られていない言語があります実行時まで - .NETはただ一例です。そして今、すべての静的にコンパイルクライアントがimport宣言を条件付きする必要があります。ターゲットは= WIN64がTHEN「product.dll」から「product64.dll」ELSE輸入何とかから何とかをインポートする場合ENDIF

の製品は、Cコードを大量に含まれており、C ++の大きな塊 - 。C#への移植はオプションではありません。

アドバイス?提案?

役に立ちましたか?

解決 3

私は、彼らが64ビットに行ったときのSystem32でDLLの同じ名前を保持している人は、この上でMicrosoftに従うことを決めました。 / 64 Win7の上、SYSTEM32 \ avicap32.dllは、64ビットのDLLです!

は、同じ名前を持つ32ビットおよび64ビットのDLLを持つ自分自身&私の顧客のためのいくつかの潜在的な混乱は、があります。しかし、私はすべての私の顧客は、コードワード幅敏感を確認する必要が持っているより悪いことだと思います。しばしば「AnyCPU」に彼らのターゲットプラットフォームのセットを残すことができます。

特に.NET開発者、

他のヒント

クライアントアプリケーションのないの彼らは32ビットまたは64ビットのある "知っている" を持っています。 OSの適切な場所から自動的にロードするDLLの64ビットプロセスに32ビットのDLLをロードすることは不可能であり、32ビットプロセスに64ビットのDLLをロードすることができないからである。

32ビット・アプリケーションのしようとすると、SYSTEM32から負荷何か、OSは黙って負荷に32ビットバージョンを強制的に、SYSWOW64ディレクトリにリダイレクトされます。

別の名前を持つことにより、あなたはこの全体のメカニズムを打ち負かします。メカニズムは同じ名前を使用できるようにするために特別に構築されます。

なぜDLLのアンダースコアの接頭辞ない...などのproduct_32.dllのをproduct_64.dll のよう?またはプラットフォームの接頭辞を使用してこれを示さ - の product_x86_32.dll product_x86_64.dll の?少なくとも、そのDLLの命名の混乱をクリアします...あなたはどう思いますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top