自作DLLの関数に対してはインテリセンスを働かせられないの?


もちのぅ  2007-09-27 07:54:16  No: 66454

Win32APIです。
つい先日初めてDLLの作成に挑戦して、無事成功したものです。
あのここで不思議に思ったことがあったので、質問させていただきたいのですが、自作DLL関数を使いたい場合は常にそのDLLを実行ファイル(.exe)と同フォルダにおいておかないといけないのでしょうか?
VC6++のように、Libフォルダ、Includeフォルダ、Binフォルダを作っておいて、それぞれに対応するファイルを(たとえば、myOp.lib→Libフォルダ、myOp.h→Includeフォルダ、myOp.dll→Binフォルダにコピーというように)入れておいて、VC6++のディレクトリの設定で、このLib、Include、Binを登録すれば良さそうな気がするんですが・・結果は×でした。
何を言ってるのか分かりにくくてすみません。
でも、はじめからシステムに存在?しているようなDll等は、とくにLibファイルのリンクの設定なんかしなくても #include <windows.h>なんていう一行で使えてしまう。  こういう風にはできないんでしょうか?

あと、どうでもいいことかもしれませんが、自作のDLL関数というのはこれに対応するLibファイルに含まれるリンク情報を手がかりにして呼び出されるということですが、どうして自作DllやLib、或いは.hからインテリセンスのような機能が働いてくれないのか??  何か方法でもあったら教えてください。

支離滅裂な質問ですが、よろしくお願いします。


wclrp ( 'o')  2007-09-27 08:27:43  No: 66455

exeと同じディレクトリにあるか探してから
環境変数pathに設定されているディレクトリを探す。
これを変える方法はしらん。
でもMFC80のDLLはこのルールとは違う特殊なものだね。
仕組みはわからない。どうやってんだろうね。

コンパイルしたファイルつまり*.objにリンクして欲しい*.libを
書いておくとリンカがそれもリンクしてくれるよ。
#pragma comment(lib,....

インテリセンスはVisualStudioが裏でこっそりソースを解析しているもので
#ifdef _DEBUGみたいにマクロの定義内容次第で
プログラムが変わってしまうようなC++だと完璧なものは難しいんじゃね。

VC6は、void func(int=0);なんて宣言のがあると
クラスビューの表示がへんだし。
おかしいときはVS終了して.ncbファイル消したり
.hファイルを判りやすいものに書き直したり
saveを何度もやってみたりするといいよ。
それでも駄目なときあるし。

VS2005だとかなり精度が上がっているよ。
VC6とは違ってビルドしなくてもソースの定義場所を教えてくれるし。


もちのぅ  2007-09-27 11:25:52  No: 66456

wclrp ( 'o')さん、どうもありがとうございます。
自作関数に対するインテリセンスって同ファイル(同じソースファイル内)で定義した関数や構造体にしか働きませんよね。
ヘッダーだけ分割して別ファイルにしてもダメ・・
ちょっと不便だなって思ってしまいます。
インテリセンス自体が開発環境のオマケ的なものなんでしょうけど、ついつい便利で自分で設定できるようなオプションが用意されてたらいいのになぁなんて..
ただ自分の場合は、SDK?っていうんでしょうか、VC6.0++についてきたもののなかにも、インテリセンスが効かないものがあって、不思議です。
コモンコントロール関係とか、あとFLASHWINDOWEX構造体とかもダメでした。

>環境変数pathに設定されているディレクトリを探す。
このパスに自作Binフォルダのパスを付け加えるとかすればDllやLibは一箇所においておけるってことなんでしょうか?
毎度毎度Libをリンクするって不便・・winmm.lib,comctl32.lib,shilap.libとか結構よく使うんですけど、ネットで調べてみたところではそういう設定項目はないみたいですね。

Dllって便利そうに見えて、書き直したりいろんなフォルダにコピーしたり思ったより不便です。
ヘッダファイルにまとめて、プリプロセス時の読み込みって形のほうが融通が効くっていうか、そんな感じがします。
ただリソースなんかを使いたい場合はDllしかないようなので、使い分け手行ったほうがいいでしょうかね。

#pragma・・・はまた勉強してみたいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加