No.3ベストアンサー
- 回答日時:
VBという存在自体に興味がないのですが、そもそもこいつに.libなんて無縁では。
WindowsのDLLのインターフェイスはバイナリベースであり、インポートの仕方は呼出側に依存します。
基本的に、汎言語的に必須なのはあくまでDLL本体だけです。
.libというか、インポートライブラリの位置づけを誤解されていませんか。
インポートライブラリ自体は、DLLのインターフェイスではありません。中間ファイル(.obj)を作るような言語からDLLを参照しやすくするためのプロキシです。インポートライブラリが意味を持つのはスタティックリンクする言語であって、それ以外では原則として無意味です。
そもそも中間ファイルとリンクするためのものですから、VC++用のインポートライブラリとBCC用のインポートライブラリは違う形式ですし、DLLからツールで専用のインポートライブラリを生成したりすることもあります。
言語次第では独自の方法でDLLをインポートできます。
# VBなら「宣言」
1-a
用法上、そう考えても問題ないでしょう。
1-b
Yes.
2-a,b
VBでインポートライブラリって意味があるのですか?
> 2.VBからVC++で作成したDLLを使用するときには.libファイルは必要ないのでしょうか。
Yes。
言語を問わず、
インポートライブラリであるかを問わず、
WindowsのDLLを使用するために.libは必須ではない。
ご回答ありがとうございます。
まだ勉強不足で回答に書かれていることが理解できません。これから勉強して行こうと思います。
繰り返し質問に答えて頂きまして感謝しております。
No.2
- 回答日時:
> DLL自体はDLLの検索されるところに配置すればよいのですが、
> .libファイルはプロジェクトに参加させる必要がないということですね。
その通りです。
> VCからDLLを呼ぶ際に.libファイルを使わずに済むには
> 何かすることがありますか。
関数の取得コードを自分で書く必要があります。
LoadLibrary API で DLL を指定してロードし、
GetProcAddress API で、内部の関数ポインタを取得します。
後は関数ポインタから関数呼び出しします。
取得した関数ポインタをキャストするには、VBの宣言相当の情報が必要です。
また、実際に使うには、インターフェイス仕様(何を渡すとどう動くか)を知っている必要があるのも一緒です。
インポートライブラリを使った場合や、VBはこれらをやってくれる、と。
この回答への補足
>インポートライブラリを使った場合や、VBは
>これらをやってくれる、と。
ここがひっかかります。何度もすいません。
※実行形式というのはDLL内の関数を呼び出すものを指しています。
(1)VCアプリからVCで作ったDLLを呼び出す
(a)インポートライブラリを使う場合
実行形式内にある関数と同様にDLL内の
関数を使用する。
(b)インポートライブラリを使わない場合
LoadLibrary API、GetProcAddress APIを使って
コードを書く。
//(1)の(a)(b)については自信がありません。
(2)VBアプリからVCで作ったDLLを呼び出す
(a)インポートライブラリを使う場合
実行形式内にある関数と同様にDLL内の
関数を使用する。
(b)インポートライブラリを使わない場合
”この場所”
”この場所”は(1)の(b)同様のものがくるはずだと思っていました。ところが実際には(2)の(a)と同じように、実行形式内にある関数のようにインポートしたDLL内の関数を書いたら、動いてしまいました。
VBのソースの上の方に
「
Declare Function fncSub Lib "TEST.dll" (ByVal a As Long, ByVal b As Long) As Long
」
のようなものを書くことでインポートライブラリをプロジェクトに追加するのと同じ効果が得られているのでしょうか。
No.1
- 回答日時:
1. スタティックライブラリといえば、スタティックリンクライブラリをさすのが普通です。
つまり、表現の違いだけで同一のもの。2.一般に.libという拡張子がある場合、スタティックライブラリを指しますが、その中にDLLの呼び出しを簡単にするためのインポートライブラリと呼ばれる類があります。インポートライブラリとはスタティックにリンクしますが、処理の実体はDLLにあるので、いわゆる一般のスタティックライブラリとは意味あいが微妙に違います。(Proxyですね
ダイナミックリンクライブラリ(DLL)を使う場合、インポートライブラリがある方が楽なので、通常はインポートライブラリ(.lib)を使います。但し、DLLのインターフェイスなどが分かっているなら、VB/VCを問わず.lib は必須ではありません。
という説明でよろしいですか。
この回答への補足
ご回答ありがとうございます。
1については、納得しました。
2はインポートライブラリ、スタティックライブラリの仕様用途は理解できるのですが、
>但し、DLLのインターフェイスなどが分かっている
>なら、VB/VCを問わず.lib は必須ではありません。
というところがひっかかります。
DLL自体はDLLの検索されるところに配置すればよいのですが、.libファイルはプロジェクトに参加させる必要がないということですね。
VBの場合はソースファイルの上のほうに、
「
Declare Function fncSub Lib "TEST.dll" (ByVal a As Long, ByVal b As Long) As Long
」
のようなものを書けばよいとして、VCからDLLを呼ぶ際に.libファイルを使わずに済むには何かすることがありますか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- フリーソフト cygewf-2.dllがない、と表示され、ダウンロードしたファイルが動作しない 2 2023/03/27 11:05
- その他(OS) OBSが起動できません 3 2022/03/30 12:21
- その他(スマホアプリ・スマホゲーム) iPhoneで使用してるウィルスバスターのアプリを 削除した場合… iPhoneで使用してるウィルス 3 2022/10/31 15:28
- その他(SNS・コミュニケーションサービス) ゲームでボイスチャットを使いたいんですが、親にどう説明したらいいですか 2 2022/08/03 14:07
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- その他(言語学・言語) ハワイ語を勉強するためのおすすめの教材について 1 2022/11/23 18:51
- その他(ソフトウェア) MMD PMXエディタ プラグイン 押せない はじめまして。MMDについて質問させていただきます。 7 2022/05/04 15:53
- その他(スマートフォン・携帯電話・VR) ページを削除するときに写真にある、「Appライブラリから使用できます」のやり方が分からないので教えて 1 2023/01/17 20:47
- 工学 非対称三相交流について 2 2022/07/06 00:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OpenSSLの共有ライブラリ(libcr...
-
error LNK2019: 未解決の外部シ...
-
Visual StadioでLeapMotionの開...
-
スタティックライブラリ関係の...
-
MP3の再生
-
Visual C++ 2008でのDXライブラ...
-
warning LNK4098で試行錯誤して...
-
富士通のSoftune
-
VC++6.0からVC++.NET2005へ移植
-
VC++でビルド時の、リンク警告 ...
-
WindowsにおけるPostgreSQL+C言...
-
Visual Studio 2022の『#define...
-
VS2010にて、依存関係とビルド順
-
'stdafx.h'のエラーに関して
-
C/C++の.libについて教えてくだ...
-
#include <winreg.h>をインクル...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
<math.h>があるのにsqrtが・...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スタティックライブラリ関係の...
-
fatal error LNK1104: ファイル...
-
【VS2008 C++】2つのプロジェ...
-
C++Builder リンカエラーとは?
-
スタティックリンクライブラリ...
-
visual studio community2017 O...
-
静的/動的リンクライブラリにつ...
-
VC++6.0からVC++.NET2005へ移植
-
VC++でビルド時の、リンク警告 ...
-
error LNK2019: 未解決の外部シ...
-
#pragma commentの相対パス指定
-
dllかlibか
-
VS2010にて、依存関係とビルド順
-
'stdafx.h'のエラーに関して
-
WindowsにおけるPostgreSQL+C言...
-
eclipse+MinGWの環境で外部ライ...
-
'd3dx9.lib' が開けません。
-
lvwReport/エラー/プロジェクト...
-
#include <winreg.h>をインクル...
-
operator new が再定義されてい...
おすすめ情報