インポートライブラリファイル(.lib)とは
何を行うファイルなのでしょうか。
外部DLLを使用可能にするためのファイルでしょうか。
libファイルの意味、使用方法を教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

そのとおりです。

間接的にリンクできる関数はDLLにあって、実行時にリンクすることがあります。DLLの関数群を直接コールすることもできるはずですが、それらの関数をコールするための手続きをインポートライブラリとして用意しておくことが多いようです。

どうも、間違ってはいないんだけど、いまいちつかめないといった感じですね。

実行ファイルの中に入っているのが直接リンクした関数で、実行時にリンクされるのが間接的にリンクする関数と言うことになるでしょう。

C++ Builder5のことはよくわかりません。ごめんなさい。
    • good
    • 0
この回答へのお礼

お礼が遅れまして申し訳ありません。
どうもありがとうございました。
ところで、antigenさんとhorusさんは同一人物でいらっしゃるのでしょうか。
(今回の回答が前回の補足の回答であるような感じがしましたので)
インポートライブラリとは、スタティックリンク時の手続きを書き込むファイルということですね。

お礼日時:2001/02/16 10:36

あなたが言っている通りライブラリです。



外部DLLを使う時はもちろん必要ですが
#この時は、どういったDLLに必要とするライブラリが
#あるのかの情報が記されている。

実行ファイルに直接リンクする関数

たとえば、
fopen()
printof()
など
のライブラリ郡だったりします。

言い替えれば、オブジェクトファイル(.o)の塊
だと思ってください。

これがないと、あなたは普段何気に使っている
fopen,printfなど自分で作らないと使えないことになりますよ

この回答への補足

御返事ありがとうございました。
初心者ですのでよく分からないので、追加で質問させて
頂きたいのですが、「実行ファイルに直接リンクする関数」というのはどういう意味なのでしょうか。
直接リンクする関数と、間接的にリンクする関数が
存在するのですか?。
インポートライブラリの役割としては
(1)間接的にリンクする時の仲介役
(2)そのものが関数ファイル
の2つがあるということになるのですか。
もう一つお聞きしたいのですが、C++ Builder5で
外部DLLを使用する時に、Implibというコマンドを使用
しないといけないそうですが、この使用方法がよく
分かりませんので教えていただけないでしょうか。
どうか御回答を宜しくお願いします。

補足日時:2001/02/02 22:47
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qなんでお相撲さんの顔って、老けてるんですか?

なんでお相撲さんの顔って、老けてるんですか?

Aベストアンサー

相撲の世界は、大変厳しいことは、ご存知かと
思います。
厳しい世界に身を置くことによって、顔は、引きしま
り、年齢以上に大人顔に変わってしまいます。
まぁ尋常じゃない程の苦労は、顔を大人顔いやいや苦労顔へと。
そんな苦労顔が老けて見えるだと思います。
今第一線で活躍している横綱や大関でも、新弟子検査の時の映像が
流れると、初々しかった若き頃の表情が、数年しただけで、老け顔へと。
まぁそれほど、相撲の世界とは、厳しい世界で、そこに身を置くことで
顔が引き締まり、老けた顔へと変えてしまうという証明だと思います。

QUnix上C++でのdllとインポートライブラリの関係

こんにちわ。
いつも教えてgooにお世話になっているorange_pieです。
UNIX上のC++で作成した自作ライブラリをdllにして配布したいのですが、
Unixでの基本的な考え方を教えてください。

(1)Unix上ではDLLの標準的な名称は”libxxxx.so”とするのが普通ですか?
 ※この形式ならLD_LIBRARY_PATH環境変数が検索してくれる。。。
(2)通常、DLLにする場合、インポートライブラリ(.lib)と実際のライブラリ(.so)を作成して、使用する側はインポートライブラリのみをリンクするのでしょうか?
(3)配布されたdllを使う側では、Link時にインポートライブラリをリンクして、関連インクルードファイルをインクルードするだけで使えるのでしょうか?
(4)上記の(2)のように、インポートライブラリとライブラリの実態を作成する為のコンパイルオプションが見つかりません。(ldのmanを見たのですが、意味がわからないと言うか。。。。。)

この質問は、自作ライブラリからlibxxx.soという形のオブジェクトファイルを作り、別プログラムからこのlibxxxをコンパイルオプション(-l)でリンクしてみたら正しく動作したのですが、これでは結局ライブラリの本体が一緒にリンクされている様子で、出来上がった実行形式のファイルサイズが静的ライブラリとしてリンクした時と同じ大きさになっていることに疑問を抱いてしまったものです。
 この状態でも、ライブラリの方だけコンパイルしなおして実行すると
ちゃんとライブラリの変更点は反映されるので問題は無いのですが、
これでもダイナミックリンク・ライブラリと呼べるのでしょうか?

こんにちわ。
いつも教えてgooにお世話になっているorange_pieです。
UNIX上のC++で作成した自作ライブラリをdllにして配布したいのですが、
Unixでの基本的な考え方を教えてください。

(1)Unix上ではDLLの標準的な名称は”libxxxx.so”とするのが普通ですか?
 ※この形式ならLD_LIBRARY_PATH環境変数が検索してくれる。。。
(2)通常、DLLにする場合、インポートライブラリ(.lib)と実際のライブラリ(.so)を作成して、使用する側はインポートライブラリのみをリンクするのでしょうか?
(3)配布されたdll...続きを読む

Aベストアンサー

# すっごく暇ってわけではないんですが :-)

> -Wl,-B,dynamic -lclntsh -ldl -lm -lnsl -lsocket -lrt -lpthread
>
> この中の”-B, dynamic ”の辺りが「ライブラリをダイナミックにリンクするよ」ってことだったのでしょうか?

man ld の -l と -B のところを読めば分かると思いますが、大体、そういうことです。

-B dynamic の場合(普通は、こっちがデフォルト)には -lxxx の指定で libxxx.so
を探して、無ければ、libxxx.a を探します。-B static の場合には libxxx.so を
対象にしません。

参考URLには solaris の AnswerBook を紹介しておきます。


> ということも考慮に入れると、arコマンドで作ったアーカイブもDLLもリンクオプションで-B dynamic とすれば、実行時にリンクできる。(のかな?)

いやいや。静的なライブラリ、っつう位ですから、静的なリンクにしか使え
ません。

.a も .so も「ライブラリ」って名前がつきますけれど、.a はアーカイブファイル
なので、tar の出力ファイルの方に似ています。.so の方は、実行形式のヘッダを
持ち ELF というフォーマットのファイルで実行バイナリの方に似ています。


> で、他人に提供するのにアーカイブとDLLのどちらが適しているかというと、
> 関数などが増えた場合以外はどちらでも同じ(という感じ?なのかな?)

その「他人」の環境次第なんですが、相手の OS やバージョンが特定できないと
静的なアーカイブの方が、利用できる可能性が少し広いです(ソース提供には
遠く及ばないですが)。

> arコマンドは、複数のオブジェクト(.o)を追加することで作成しなおすことができるが、DLLはライブラリ構成プログラムをリコンパイルする必要がある。

リコンパイルではなく、再リンクです。


後、共有ライブラリの場合には、あまり小さく刻んでしまうとロードの時間が
気になり出すので、ひとつのファイルの単位をどうするかを悩むときがあり
ます。


最後に、No.2 の回答にあるように unix をひと括りにして、.so が普通、と
言うのは、ちょっと大雑把すぎました。他の質問のことが頭にあったもので
orange_pie さんが使っている環境を暗に想定してました。

十年くらいさかのぼっただけで共有ライブラリが扱えない unix なんてのは、
ごろごろしてましたし。

参考URL:http://docs.sun.com:80/ab2/coll.153.4/REFMAN1/@Ab2PageView/116238?Ab2Lang=ja&Ab2Enc=shift_jis

# すっごく暇ってわけではないんですが :-)

> -Wl,-B,dynamic -lclntsh -ldl -lm -lnsl -lsocket -lrt -lpthread
>
> この中の”-B, dynamic ”の辺りが「ライブラリをダイナミックにリンクするよ」ってことだったのでしょうか?

man ld の -l と -B のところを読めば分かると思いますが、大体、そういうことです。

-B dynamic の場合(普通は、こっちがデフォルト)には -lxxx の指定で libxxx.so
を探して、無ければ、libxxx.a を探します。-B static の場合には libxxx.so を
対象にしません。...続きを読む

Q年齢25歳ですが、27〜8歳に見られます。 老けてるってことでしょうか?(´;ω;`) 身長169c

年齢25歳ですが、27〜8歳に見られます。
老けてるってことでしょうか?(´;ω;`)

身長169cmあります。
身長だけで可愛い系ではないということですかね?笑

Aベストアンサー

以前からつくづく思うのですが
おそらく質問者さんは女性なのでしょうが、女性はどうして10代なら大人びて見られることを望み、20代になれば若く見られたいのでしょうね(笑)
10代半ばで化粧をしているような子を見ると、「あんた、後数年で今度は若く見られたいと思うようになるんだよ」なんて意地悪を言いたくなります。
40代以上から見れば25歳も28歳も全く変わりません(笑)
また、高校生くらいの年齢から見ても25歳も28歳も変わりません。

もっとも25歳女子の恋愛対象になろうであろう35歳~20歳男子から、2、3歳でも実年齢よりも年長に見られるのは女性にとって悩みどころというのも分からないではないですが。

QDLLでLIBファイルが作成されない

DLLを作るプログラムをしているのですが、どうしてもコンパイル時にLIBファイルが作成されません。

1>warning C4091: '__declspec(dllexport)' : 変数が何も宣言されていないときは、'DDDClass' の左辺を無視します。

と警告が出てしまいます。

私が書いたソースは以下の通りで、クラスとそのメンバをEXPORTしたいのです。ここで、最後のコメントを外して有効にするとLIBファイルが作成されることはわかっています。また、クラスのメンバにEXPORTをつけてもオーバーライトだと怒られてしまいます。

どのようにしたらLIBファイルが作成されるようになるのでしょうか?

■■■stub.h■■■

#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif

typedef int (*HOGEHOGE)(int i);

EXPORT class DDDClass{
private:
int num;
HOGEHOGE c;
public:
DDDClass();
int CALLBACK counter();
int CALLBACK touroku(int (*b)(int i));
};

■■■stub.cpp■■■

#include <windows.h>
#include "Stub1.h"

int WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved){
return true;
}

EXPORT class DDDClass;

DDDClass::DDDClass(){
num =0;
c = NULL;
}

int CALLBACK DDDClass::touroku(int (*b)(int i)){
c = b;
return 0;
}


int CALLBACK DDDClass::counter(){

//c = b;
c(num);
num++;
return 0;
}

/*
EXPORT bool CALLBACK aaaaa(){
return true;

}
*/

DLLを作るプログラムをしているのですが、どうしてもコンパイル時にLIBファイルが作成されません。

1>warning C4091: '__declspec(dllexport)' : 変数が何も宣言されていないときは、'DDDClass' の左辺を無視します。

と警告が出てしまいます。

私が書いたソースは以下の通りで、クラスとそのメンバをEXPORTしたいのです。ここで、最後のコメントを外して有効にするとLIBファイルが作成されることはわかっています。また、クラスのメンバにEXPORTをつけてもオーバーライトだと怒られてしまいます。

ど...続きを読む

Aベストアンサー

__declspecの挿入位置が悪いのだと思います

class __declspec(dllexport) クラス名 {
// クラス定義の内容
};

といった具合に classとクラス名の間に __declspecが無いといけません
リンケージ指定の extern "C"は classより前にある必要があります

ですから EXPORTのみで両方をマクロ定義するのはちょっと無理がありそうです

それとstub.cppの
> EXPORT class DDDClass;
これは どんな意図でしょう クラスのインスタンスをエクスポートしたいのならオブジェクト名が必要だと思います

Q長澤まさみって「老けてる」と思いませんか?

目鼻立ちは整っています。美人です。しかも可愛いさもあります。
背が高くてスタイルは抜群です。
好きか嫌いかと問われたら「好き」です。

しかし・・・
「年齢の割には老けている!」と思えてならないんです・・・
30歳といわれたらそのくらいに見えるくらいの感があるので、
実際30になるとどうなってしまうのか、心配ですw
なのに周りの知人にそのことを言うと
「ええ?そうかなぁ?」と言われてしまうのでw
世間一般どう思っているか気になって、というわけで
「老けていると思うか思わないか」をお尋ねするアンケートです。
けっしてファンに喧嘩を売っているわけではないので
誤解のないようにお願いします。

回答は以下の順で
1.長澤まさみを好きかそうでないか
2.老けていると思うか、思わないか
3.その理由(できるだけ具体的に)
4.回答者の年齢・性別

ではまず私から。
1・どちらかというと好き
2.思う
3.若いのに肌にハリがない。と、少なくとも画面では見える。
(ほうれい線がくっきりある。目の下のたるみ、シワもある)
顔立ちだけで言うとそれこそ、山田優や上原美佐のほうが「老け顔」だが、
肌がプリプリなので、若い!と思う。
長澤まさみの場合は、顔立ちは歳相応なのに、肌で判断して
老けてる!と思ってしまう。
4.30代前半・女

ではよろしくお願いします。

目鼻立ちは整っています。美人です。しかも可愛いさもあります。
背が高くてスタイルは抜群です。
好きか嫌いかと問われたら「好き」です。

しかし・・・
「年齢の割には老けている!」と思えてならないんです・・・
30歳といわれたらそのくらいに見えるくらいの感があるので、
実際30になるとどうなってしまうのか、心配ですw
なのに周りの知人にそのことを言うと
「ええ?そうかなぁ?」と言われてしまうのでw
世間一般どう思っているか気になって、というわけで
「老けていると思うか思わな...続きを読む

Aベストアンサー

やはり「ほうれい線」のせいだと思いますよ・・
私もあの「ほうれい線」はかなり気になります。
マンガなんかでも、「ほうれい線」を加えるだけで一気に「おばさんの顔」になりますし。

というわけで
1 好き
2 老けて見えると思う
3 ほうれい線のため
4 20代後半

Qスタティックライブラリファイル作成時のデバッグセッションの実行可能ファイル

VisualC++2008ExpressEditionを使用しています。

スタティックライブラリファイルを作成しようとしているのですが、コンパイルしようとすると、「デバッグセッションの実行可能ファイル」というタイトルのウィンドウが現れ、「デバッグで使用する実行可能ファイル名を指定して下さい。」と出てきます。
libファイルはdllと違いコンパイル時に読み込まれてしまうため、テストしたかったら、EXEファイルをコンパイルして作り直さないといけないと思うのですが、ここでいうデバッグで使用する実行可能ファイルとは、どの様なファイルを指しているのでしょうか?

宜しくお願いします。

Aベストアンサー

ライブラリのプロジェクトがあるソリューションにテスト用のプロジェクトも作ります。
テスト用のプロジェクトをライブラリに依存させます。

Q30代男性のリアクションが気になります。そんなに老けてるのでしょうか?

老けて見られる28歳の女性です。とてもコンプレックスに感じています。
こちらで何度か質問させていただくうちに、女性からはたまに若く見られることもあるのですが、男性で特に自分より年上の30代の方に老けて見られる傾向があることに気が付きました。

「28歳です」と歳を言うと、
女性は「若く見えますね、25位だと思った」という方も、「落ち着いてるね」という方もいて色々です。
男性で年下や同年代の20代の方、または40代以上の方からは「大人っぽいですね」と言われたり「へぇ」と無関心だったりします。
ですが、30代の男性は「えぇ?!28なの?!オレより上だと思った!」と驚かれる方や、「オレよりお姉さんだね」と言われる方ばかりです。

男性で、しかも30代の方のリアクションが「とても28歳には見えない!」という感じで引っ掛かります・・・。そんなに老けてる?周りの28歳とそんなに違うのかしら?と気になります。

何故この年代の男性はこんなにも驚かれるのでしょうか?何か原因があるのでしょうか?

Aベストアンサー

女性は、肌や皺などを自分と比較して見ていて、これに対して男性は全体的な雰囲気を見ているのではないでしょうか?服装とか動作とかです。
服装でいけば露出が少なくて地味な色彩とかデザインの服を着ている。動作はゆっくりで静か。また結婚していると落ち着きが出てくると思います。
そして、30代の男性にとっては、「自分より年上だと思っていたら年下だった」という逆転の状態に、リアクションが大きくなるのではないでしょうか?それで「よく見ると若いね」とでも言われるようなら、きっとそうだと思います。
落ち着いているのは素敵だと思いますが、あまり年上に見られるのが不本意でしたら、服装やお化粧などに変化をつけてイメージチェンジしてみたらいかがでしょう?ブティックや化粧品店でアドバイスしてくれると思います。

Qライブラリ、.libとは?

ライブラリと検索すると、標準ライブラリばかり出てきて「○○.lib」のことがいまいち見えてこないのですが、このファイルはどういったものなのでしょうか。
.h、.c、.cppなどでは代用が利かないものなのでしょうか。

あと、C、C++にはライブラリと言うものがあり、あると便利・・・
というのは何となく分かるのですが、
1.ライブラリを配布しているのをあまり見ませんが、どこかまとまって置いてある場所はあるのでしょうか。
2.あまり記載されている参考書が見当たりませんが、どのように使うものなのでしょうか。
3.「このライブラリはどういうものか覚えていた方がいい」というものはありますでしょうか。

この3点について教えていただけるとありがたいです。
よろしくお願いいたします。

Aベストアンサー

>1.ライブラリを配布しているのをあまり見ませんが、
>どこかまとまって置いてある場所はあるのでしょうか。
なんのライブラリのことでしょうか?
ライブラリとは汎用性の高い関数や機能を再利用可能な形にした物を
言います。これは、目的によってプログラマが作ったり、
既に公開されたりしているものもあります。

>2.あまり記載されている参考書が見当たりませんが、
>どのように使うものなのでしょうか。
ライブラリの作りはそれを使う環境にも依存しますが、
Windows環境の場合、Libファイルにはダイナミックリンクライブラリ
(DLL)とスタティックリンクライブラリという2種類が存在します。
Libファイル(***.lib)はDLLの場合、そのライブラリが提供している
関数の関数名などの外部参照用のデータが入っています。
そして、実行には使用したLIBファイルのバイナリデータが入った
DLLファイル(***.dll)が必要です。
スタティックリンクライブラリのLibファイルは、それ自体に
ライブラリのバイナリが含まれており、使う場合はその使ったアプリ
にバイナリとして埋め込まれます。
なので、実行時にDLLファイルは必要ありません。

>3.「このライブラリはどういうものか覚えていた方がいい」
>というものはありますでしょうか。
ライブラリについては特に覚えることは多くありませんし
自分でライブラリを作るなら覚えて損はありません。
むしろ、覚えなくてはいけないのは、ライブラリにした場合に
どのようなことに注意するかです。
ライブラリの扱いは上には上にも書いたとおり、環境に依存する
ところがあるため、使用する環境に応じてある程度作り方が
違ってきます。

>1.ライブラリを配布しているのをあまり見ませんが、
>どこかまとまって置いてある場所はあるのでしょうか。
なんのライブラリのことでしょうか?
ライブラリとは汎用性の高い関数や機能を再利用可能な形にした物を
言います。これは、目的によってプログラマが作ったり、
既に公開されたりしているものもあります。

>2.あまり記載されている参考書が見当たりませんが、
>どのように使うものなのでしょうか。
ライブラリの作りはそれを使う環境にも依存しますが、
Windows環境の場合、Libファイルに...続きを読む

Q友人に顔も老けてるねと言われました…

32歳の主婦です。

この間友人の家に遊びに行った時に、
他のママたちがいくつくらいなんだろうって話になりました。
私自信、10代の時から服装や雰囲気から実年齢より上にみられていたので、
最近40代にみられるんだよねって友人に話しました。
そしたら、持っているカバンがハイブランドだし、色も白いから落ち着いて見えるんじゃないと、、それで日焼けしてみれば?っていわれました。
今までシミができないように気をつけていたので、この年になって焼くことは考えられません

ここまでは、よく言われたのでなれているのですが、子供の遠足の時にとった写真に私ものっていて、それをみながら私に顔も老けてるよねって言ってきました…
その場では笑って流しましたがかなりショックでした。
とくに化粧が濃いわけではないのですが…
まさか同性に老けてるといわれると思いませんでした…

その友人は私より上でいつもノーメイクです。シミはすごいですが、私はそれも素敵だし友人に対して何も言ったことはありません。
それに、その友人からいつも自分の言うことがきつくて、すぐ友達が離れて行くと相談されていて、
今までははっきりいう所がその人の良い所だと思い親身になって相談も受けていて信頼できる友達だと思っていました。
ただ私自信オシャレやきれいにすることが大好きな分そんな事を言われて、かなり嫌いになってしまいました。
また近々みんなで遊ぶことになるかもしれないですが、顔もみたくありません。

プラスに考えてアンチエイジングをしようとおもいますが、、その友人の一言が許せません(⌒-⌒; )
言われた事がある方どのようにきりかえましたか?

32歳の主婦です。

この間友人の家に遊びに行った時に、
他のママたちがいくつくらいなんだろうって話になりました。
私自信、10代の時から服装や雰囲気から実年齢より上にみられていたので、
最近40代にみられるんだよねって友人に話しました。
そしたら、持っているカバンがハイブランドだし、色も白いから落ち着いて見えるんじゃないと、、それで日焼けしてみれば?っていわれました。
今までシミができないように気をつけていたので、この年になって焼くことは考えられません

ここまでは、よく言われたのでな...続きを読む

Aベストアンサー

いますいます、そういうズケズケとモノを言う人・・・

そういう人って、もしかしたら悪気は無いのかもしれませんが、
言われた本人はたまったものじゃないですよね。

私もそういう経験ありますから、お気持ちは痛いほどわかりますよ。


その友人は、かわいそうな人ですね。
人を嫌な気持ちにさせることを平気で言うなんて、
いろんな人たちからきっと嫌われていることと思いますよ。

しかし、そんな事を言うなんて・・・
私だって言われたら、絶句してしまいますよ。
返答しようがないですもの。



でもその人、あなたより年上なんでしょう?
きっとあなたにヤキモチを焼いているんですよ。


自分より若くて、持っているものもいいし、スタイルもいいし、
子供さんにしても、自分の子と比べて出来がいいし・・・って。
これは私の想像ですが、きっとあなたのお子さんは、その人のお子さんに比べたら
成績もきっと上になると思いますし、だいたい、生活レベルも
その人よりあなたの方が上のような気がします。

どうやってもたちうちできないから、
そういう事を言って、あなたを傷つけてほくそ笑んでいるんだと思います。

そういう人は、今後、これから、どんどん友達も周りから去っていきますし、
なにより、陰で悪口をたくさん言われ、嫌われていきます。

私は、そういう傷つけられるようなことを言われたとき、相当落ち込みましたが、
あの人はああいう人なんだ、と割り切って忘れることにしました。
あの人に言われたことは、事実はそうではない、って、自分に言い聞かせて乗り越えました。


あなたはきっと、老けているのではなく、
落ち着いて、頭のいい方なんだと思います。

肌も白くて、私が思うには、きっと美人系でいらっしゃるのではないか、と思います。

32歳なら、まだお顔にしわなどないでしょうから、
服装を少し変えるだけで、若々しくなりますよ。


私は50代ですが、できる限り、パステルカラーなどの明るい色を着るようにしています。
明るい色は、顔色を美しくみせてくれ、多少、若くもみてもらえます。

あなたはまだまだお若いのですから
今しかできないファッションをもっともっと楽しまれたらいいって思います。

それと、
日焼けなどしたら、ますます老けて見えてしまいますよ。
日焼けはしわをふやしてしまいますからね。
その友人のその言葉にも、あなたの肌の白さに対して嫉妬が入っているって思いました。

そんな、人を傷つける言葉を簡単に言う人の言葉など、
鵜呑みにしないでいいって思います。


そういう人とはなるべく距離を置くようにしましょう。
そして、優しい言葉を使える人とお友達になりましょう。
そのほうが、気持ちがずっと穏やかでいることができます。

私もね、
そういう人はもう、どんどん遠ざけていっています。
なので、私の周りは、温かいひとたちばかりです。


そういう人たちに包まれていると、いいものがたくさん入ってきますし、なにより
心の中がいつも温かく、穏やかでいることができて、幸せです。


ご自分が老けている、って、暗示をかけてはダメですよ。
鏡をみて、私は綺麗、って言葉をかけてください。
そして、ご主人にも「綺麗だよ、可愛いよ」って、言ってもらってください。

ご主人から言われるそういう言葉は、ほんとに魔法の言葉になりますよ。


老けてるっていうその人の方が、きっと老けていますし、
顔もどこか、とげとげしいものがあるって思いますから
もし、今度会うことがあったら、じっくり観察してみればいかがですか?


で、言ってやればいいんです。


「人を傷つける言葉を平気でいうあなたって、
 ほんと、やっぱりきつい顔しているわね」、って・・・

「私も今、あなたにきつい言葉を言ったから、きっと嫌な顔してるかもしれないけど・・・」って・・



彼女、どんな顔するでしょうね。


とにかく、人を傷つける言葉を言う人は、
心の貧しい人、それプラス、現在幸せではない人たちです。

そういう人たちは、だれかを攻めて、いじめたい気持ちでいっぱいなんです。


そんな負のオーラを持つ人たちなんて、遠ざけてしまってください。

レベルが違うのだ、と思って忘れましょう。

いますいます、そういうズケズケとモノを言う人・・・

そういう人って、もしかしたら悪気は無いのかもしれませんが、
言われた本人はたまったものじゃないですよね。

私もそういう経験ありますから、お気持ちは痛いほどわかりますよ。


その友人は、かわいそうな人ですね。
人を嫌な気持ちにさせることを平気で言うなんて、
いろんな人たちからきっと嫌われていることと思いますよ。

しかし、そんな事を言うなんて・・・
私だって言われたら、絶句してしまいますよ。
返答しようがないですもの。



でもその...続きを読む

Qdllかlibか

自作のライブラリの場合は任意で
ユーザーが任意のプラグイン読み込めるアプリなら
プラグインに関してはdllでしょうが

公共的なライブラリについて
動的ロード推奨か、静的リンクでもいいという線引はどのあたりなのでしょうか

現状では

ole32.dll
msimg32.dll
comctl32.dll
comdlg32.dll
dsound.dll
kernel32.dll
shlwapi.dll
shell32.dll
uxtheme.dll

を動的にロードし

winmm.lib
user32.lib
gdi32.lib

を静的にリンクしています。
kernel32とかはさすがに静的リンクでもOKでしょうか?
あるいはwinmmとかは動的な方がいいでしょうか?

なお、対象はWindowsでXP以降とする場合、です。
(Windows以外の場合も教えていただけるとより良いですが)

あと、dsound.dll
とかについてですが

DirectSoundCreate8
だけGetProcAddressすれば

あとの

struct IDirectSound8;
struct IDirectSoundBuffer8;

のメンバなどについてはGetProcAddressしなくても使えるようだし
リンクエラーにならないのですが、これはどんな感じの仕組みになっているのでしょうか?

あるいは、それを気にしなくてもこれは「そうやっておけば問題ない」
としておいてもいいようなものなのでしょうか?

自作のライブラリの場合は任意で
ユーザーが任意のプラグイン読み込めるアプリなら
プラグインに関してはdllでしょうが

公共的なライブラリについて
動的ロード推奨か、静的リンクでもいいという線引はどのあたりなのでしょうか

現状では

ole32.dll
msimg32.dll
comctl32.dll
comdlg32.dll
dsound.dll
kernel32.dll
shlwapi.dll
shell32.dll
uxtheme.dll

を動的にロードし

winmm.lib
user32.lib
gdi32.lib

を静的にリンクしています。
kernel32とかはさすがに静的リンクでもOKでしょうか?
あるいはwinmmと...続きを読む

Aベストアンサー

#1です。#1に書いた補足の所の回答をします。

・実行速度の件
アセンブラコードを見ると判るのですが、動的リンクの場合は、DLLに対応するジャンプテーブルが、コード領域の最後に作られるらしく、一度そちらにジャンプしてからDLLのコードに飛んでいきます。
それに対して、(実証したことがないので推測ですが)静的リンクの場合は自EXE内に既にコードが展開されるので、直接ジャンプしているものと推測しています。(どこにあるか判るのでジャンプテーブルは必要ないはず)
なので、若干静的リンクが早いとは思いますが、正直ループで1万回まわしてどれだけ差が出るの?って感じ程度だと思います。
キャッシュミスを考えても、そもそもコード量>1次命令キャッシュがほとんどですから、どっちにしろコード量が大きければ、静的リンクも動的リンクも同じくらいヒットしたりミスしたりするとおもいますが。
動的DLL部分だから違うキャッシュ空間を使う、というわけでもありませんからね。DLLのコードの位置が、ちょっと離れているか、自EXE内にあるか、というだけで、そもそもキャッシュは関数レベルでリードしているわけではありませんから、どっちもどっちかと思いますよ。
ただ、前述のジャンプテーブルの分だけ、動的リンクの方がキャッシュを使いつぶしやすいでしょうけど。

・アップグレード権うんぬんの話
これについては、たしかにインストール時に必要なパッチをインストールさせる手もありますね。
ただし、そのEXEをCDやDVDに入れないといけないですが。
また、そこに至るまでの前提パッチ全て入れる必要もあります。
(このあたりのパッチの依存関係を調べるのは大変じゃないですかね・・・?)

・TrackMouseEventの件
さすがに、プラットフォームSDKのヘッダに記載されている名称そのままはぶつかりますので使えません。
ですが、LoadLibraryとGetProcAddress()を使っているなら、その取得したアドレスをポインタに格納すれば名称変更で同じことができると思いますが。
  typedef BOOL (*LOADADDR_TRACKMOUSEEVENT)( LPTRACKMOUSEEVENT lpEventTrack );

  LOADADDR_TRACKMOUSEEVENT pTrackMouseEvent = (LOADADDR_TRACKMOUSEEVENT )GetProcAddress(~);

  LPTRACKMOUSEEVENT event;
  BOOL brc = pTrackEvent( &event );

こんな感じでいけると思います。これで、”TrackMouseEvent”を、”pTrackMouseEvent”と置換するだけで済むかと。


・#2さんのお礼の所にあったLIBの話
自分の所ではないのですが、思ったことが1つあったので、書いておきます。

たしかに、libの中にコードが入っているコンパイラもあります。
私も使ったことはあります。自分の担当分をlib化してコードを1つにしておいて、後で他人の作ったLIBと合わせて1本にする、という用法です。

ただし、Windowsの開発環境の場合は、LIBにコードは含まれていないはずなのですが。
主さんがLIB=静的リンク、と言っているのは、上記の通り、そういう環境で開発したことがあるからではないかな、と推測しますが、どうでしょうか?

私が認識している感じでは、winmm.lib等、プラットフォームSDKに入っているlibは、あくまでこれに対応するDLLに格納している関数名とその引数の数やオフセットアドレス位しか格納していないと思いました。

なので、まとめてしまうと、Windowsの場合に限っていえば、静的リンクはDLLのコードごとEXEに組み込むことを指し、動的リンクはEXE実行時にDLLをロードして使う(LIBを使ってコンパイル・リンクして、自動でロードさせる)、または、EXE側でLoadLibrary+GetProcAddressで使うことを指す、ということになります。

なお、#pragma comment( lib, "winmm.lib" )は、主さんの書いている通り、追加の依存関係に書くのと同じです。
(なので、私も1箇所でしか使っていない場合とか、他人に流用させることを意識したソースコードの場合は#pragmaを使います)

・必要DLLが無い環境でのEXE実行の件
d3dx9.dllの話を出していますが、主さんの書いており通り、d3dx9.libに対応するDLLがなければEXEは起動できませんので、通常はこのDLLが無い環境にインストールされるかもしれないと想定される場合は、インストーラーでインストールして導入させる必要があります。

何でもいいのですが、アプリをインストールしていて、インストーラーからインストーラーを起動する光景をみたことはありませんか?
もしくは、ゲームのインストーラーに必ずと言って良い位、DirectXのインストーラーもついて来ます。これを入れないと動かないぞと言わんばかりです。
つまり、導入しないなら使えない、使いたいなら前提となるDLLをインストールしてください、というのが動的リンクを使ったEXEを使う場合の前提です。ただし、これをやると以降のバージョンUPの際は、EXE入れ替えのみで済むという手抜きアップグレードができたりします。(普通やらないでしょうけど)
これがいやな場合は、静的リンクにするしかありません。無いものは自前で用意する、という感じですね。

・静的リンクのアプリの作り方
すいませんが、静的リンクはMFCでしかやったことがないので、他のDLLの静的リンクの方法はわかりません。
MFCのDLLの場合は、プロジェクト設定時に指定できるので、スイッチポンで指定できるのですが・・・他のは設定がありませんね。もしかしたら、自分でリンカの所にオプションを追加するのかもしれません。

#1です。#1に書いた補足の所の回答をします。

・実行速度の件
アセンブラコードを見ると判るのですが、動的リンクの場合は、DLLに対応するジャンプテーブルが、コード領域の最後に作られるらしく、一度そちらにジャンプしてからDLLのコードに飛んでいきます。
それに対して、(実証したことがないので推測ですが)静的リンクの場合は自EXE内に既にコードが展開されるので、直接ジャンプしているものと推測しています。(どこにあるか判るのでジャンプテーブルは必要ないはず)
なので、若干静的リンクが早いとは...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報