0


1

Windows Vistaで.NET 3.5プログラミングとクライアント使用環境が与えられたとします。 以下の状況下で64ビットOS用のプログラミングにはどのような影響がありますか? 機能性または最適化の問題があるかどうかを指定してください。 それは動作しますか、それは64ビット環境でよりよく動作するようにすることができますか。

1)あなたはウェブアプリを開発しています(asp.net c#)

2)あなたはwin formsビジネスアプリを開発しています(ドライバレベルなし)

3)ハードウェアコントローラを開発しています

ケース1とケース2に違いはなく、ケース3にはいくつかの注意点があると思います。 しかし、私は64ビットVPNのサポートがないことに困惑しています…​ いくつかの問題があるはずです。

3 Answer


1


#1については、ほとんどいつも違いはありません。 私は大規模に取り組んでいます .NET web application developed on 32-bit machines and deployed to a 64ビットサーバーファーム 私たちが持っていた唯一の問題はTFSに関するものです - 直接関係はありません。

#2について(そしてアンマネージドコードを呼び出すという一般的な話題を扱うのである程度#3まで)、良い答えはhttps://stackoverflow.com/questions/1051065/will-a-net-winforms-です。 64ビットOSでのアプリケーションの作業または修正する必要がある/ 1051118#1051118 [ここで見つける]。


1


1に違いはありません。 2。 バイナリを特定のプラットフォームに対して構築するように特別に要求しない限り、.NETツールはILにコンパイルされます。これは実行時に実際のプラットフォームにJITされます。 アプリケーションをセットアップ時に作成していても、ほとんどの場合、開発プロセスには影響しません。

ただし、32ビットマシンで開発し、P / Invoke、COM相互運用機能、またはレジストリアクセスを使用して64ビットをターゲットとする場合、注意点がいくつかあります。 デフォルトでは、アプリはターゲットシステム用のネイティブアプリとしてJITされます。

  • 32-bit dllへのP / Invokeは64-bitターゲットシステムへのdllのロードに失敗するでしょう。

  • ターゲットの64ビットマシンで32ビットのinprocオブジェクトにクラスが登録されていないため、COM相互運用機能が失敗します。 64ビットマシン上での登録方法によっては、32ビットのout-of-procオブジェクトが機能する可能性があります。 繰り返しになりますが、32ビット開発者のマシンではすべてうまくいくでしょう。

  • 32ビットアプリケーション用のレジストリキーへのレジストリアクセスは、開発者のマシンでは機能しますが、64ビットターゲットシステムの別の場所に書き込みます。

あなたのアプリケーションを32ビットにすることでこれらのいずれかを解決することができます、これはあなたのリストからのシナリオ2のために働きますが。

ドライバに関して言えば、Windowsドライバを書くために.Netを本当に使うことができるかどうかは定かではありません。少なくとも、この分野ではあまり経験がありませんでした。 ) しかしあなたができるなら:

  • 上記と同じ問題が適用されます

  • 直接メモリにアクセスするときは、32ビットと64ビットの間でアドレス指定が異なることに注意してください(常に64ビットポインタを使用してください)。

  • Windows Driver Kitのドキュメントのベストプラクティスに従ってください。


0


Franciの回答に加えて、より抽象化されたリソースも問題を引き起こす可能性があることに注意してください。

私は一般的に32ビット専用のODBCドライバを使用して開発しており、すべてのアプリを32ビット用にコンパイルする必要があります。

おお、そして私にVPNクライアントと貧弱な64ビットサポートについて始めさせないでください! ネットワーク会社へのポックス!