Visual Stdio C++を用いた、Windowsライブラリについて教えてください。


- Windowsのライブラリについて、32ビット版とか64ビット版という区別はあるのでしょうか。

- 32ビット版のライブラリがあった場合、64ビット版のアプリから32ビット版のライブラリを利用できるのでしょうか。

- Visual Stdio C++のライブラリは、Win32アプリケーションウィザードから"スタティックリンクライブラリ"や"DLL"を選択すると思っています。
64ビット版のライブラリを作成したい場合には、プラットフォームをx64にすれば良いのでしょうか。

質問が多いですが、よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/10/12 23:41:35
  • 終了:2011/10/19 23:45:03

回答(2件)

id:a-kuma3 No.1

a-kuma3回答回数4596ベストアンサー獲得回数19352011/10/13 00:20:18

ポイント50pt

Windowsのライブラリについて、32ビット版とか64ビット版という区別はあるのでしょうか。

ありますよ。

同じソースコードでも、ポインタ変数のサイズとかが変わりますから、バイナリは確実に違いがあります。


32ビット版のライブラリがあった場合、64ビット版のアプリから32ビット版のライブラリを利用できるのでしょうか。

ライブラリによりますが、無理だと思ってた方が間違いが無いでしょう。

たとえば、ポインタ変数のサイズが違います。

ポインタを受け渡しするような API を持っているようなライブラリは、全滅です。


Visual Stdio C++のライブラリは、Win32アプリケーションウィザードから"スタティックリンクライブラリ"や"DLL"を選択すると思っています。

64ビット版のライブラリを作成したい場合には、プラットフォームをx64にすれば良いのでしょうか。

「プラットフォームを x64 にすれば、後は何も気にしなくて良いのか?」という質問であれば、

それは間違いです。

型のサイズを前提にしないようなプログラムを書く必要があります。

例えば、

char* p_char;
long  long_var;
long_var = (long)p_char;

かなり、恣意的なコードなので、「こんなことはしないよ」とか、思うかもしれませんが、

かつて、16bit から 32bit に移行する時代にも、こんなレベルのプログラムがたくさんあったので、

対応に苦労した方は多いはずです。


どういう状況下、いまいち分かりませんが、プログラムをリリースする立場にいるのであれば、

  • ソースは、32bit と 64bit でクロスコンパイルできるように書く
  • バイナリは、32bit 版と、64bit 版の二つをリリースする

ということになるかと思います。


今どきだと、.NET Framework で作ってる人が多いだろうと思いますが、

こんなことを書いている方もいらっしゃいます。

http://sgry.jp/pgarticles/64.html

id:SweetSmile1978 No.2

SweetSmile1978回答回数191ベストアンサー獲得回数292011/10/13 12:54:59

ポイント50pt

> Windowsのライブラリについて、32ビット版とか64ビット版という区別はあるのでしょうか。

もちろんあります。

> 32ビット版のライブラリがあった場合、64ビット版のアプリから32ビット版のライブラリを利用できるのでしょうか。

できないことはありませんけど、基本的に無理だと思った方がいいかもしれません。

以下が少し参考になるかと思います。

http://d.hatena.ne.jp/sea-show/20100313/1268476785

> Visual Stdio C++のライブラリは、....プラットフォームをx64にすれば良いのでしょうか。

その通りです。

一部データ型のサイズが変わってくるので気をつけるべきことはありますが、

コンパイル時に警告がでてくれるのでそれを見ながら考えればいいかと思います。

Win32 でも x64 でもコンパイルが通るようにコードを書くことが大事です。

  • id:cx20
    Windows のライブラリとしては大ざっぱな分類をすると
    ・.NET のライブラリ
    ・COM のライブラリ
    ・Win32 のライブラリ
    のような種類があります。

    いずれも 64ビット/32ビット 版が存在ます。

    VC++ でネイティブアプリでの開発ですと、Win32 のライブラリを使うことになりますが、
    64ビットプロセスから32ビットライブラリの呼出し、
    32ビットプロセスから64ビットライブラリの呼出し
    はサポートされていません。

    ■ プロセスの相互運用性 (Windows) - 64 ビット Windows プログラミング ガイド
    http://msdn.microsoft.com/ja-jp/library/aa384231(VS.85).aspx

    > 64 ビット版の Windows では、
    > 64 ビット プロセスは 32 ビットの DLL を読み込むことができません。
    > また、32 ビット プロセスは 64 ビット DLL を読み込むことができません。

    また、Windows の 64ビット環境でのプログラミングに関しては以下の情報が参考になるかと思います。

    <参考情報>
    ■ 64 ビット プラットフォームへのアプリケーション移行(PDF 形式、20.1 MB)
    http://download.microsoft.com/download/B/0/9/B09F266D-8D54-4476-A3EC-E974CA5F61F8/BS_202.pdf
    ■ WOW64 のベスト プラクティス(Word ファイル 323 KB)
    http://download.microsoft.com/download/1/E/F/1EF2E35E-501E-490B-B4B3-5E34A86FF1C2/wow64_bestprac_jpn.docx

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません