DLLからの呼び出し

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
メッセージ
作成者
GTR

DLLからの呼び出し

#1 投稿記事 by GTR »

最近、質問ばかりしている私ですが、以前投稿されていたDLLからツールバーのビットマップを取り出す方法がいまいちよく分からないので、教えていただけないでしょうか?自分では考えてもいるんですが、なかなか答えといったものが出ません。私がしたいことは、DLLにビットマップと関数を両方詰め込んで、それをプログラムのほうで呼び出すだけにしたいのですが
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

Re: DLLからの呼び出し

#2 投稿記事 by 7 »

> DLLにビットマップと関数を両方詰め込んで、それをプログラムのほうで呼び出すだけにしたいのですが
DLL側のプロジェクトにはリソースとして適当なビットマップを挿入しておきます。

DLL側にはリソースIDを取得する関数(改良の余地あり?)と、リソースビットマップのハンドルを取得する関数を作ります。
必要であればビットマップに関する関数を作ってしまっても構わない。 それらDLL側の関数を使ってビットマップをウィンドウに描写します。 一応自分の環境ではグチャグチャっとした白紙に黒いペンで書いたビットマップがちゃんと表示されます。
GTR

#3 投稿記事 by GTR »

7さん。返信ありがとうございます。
えっと、いきなりで悪いのですが、ツールバーの場合はどうしたら良いでしょう?関数はすべてDLLに入れてもらいたいのですが(人に頼まない。反省②)
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#4 投稿記事 by 7 »

> えっと、いきなりで悪いのですが、ツールバーの場合はどうしたら良いでしょう?関数はすべてDLLに入れてもらいたいのですが(人に頼まない。反省②)
以前のスレッドでも十分解決できると思うんですけどね...。
最後の方CreateToolbarEx()関数について書かれていますが、第5引数にNULLを指定した場合、第6引数にはビットマップのハンドルを指定することができます。
ビットマップのハンドルはDLLから取得できたので問題の解決になったと言えるんじゃないでしょうか?

一応コードを載せますけど...。 CreateToolbarDx()関数は第5引数にNULLを指定したCreateToolbarEx()関数を呼んでいるだけです。
CreateToolbarEx()を使ってる所をCreateToolbarDx()に置き換えて、第5引数にはビットマップハンドルを指定してやるだけです。
ツールバー、実際に動かすのが面倒なので新たな問題があった場合回答できないかもしれません。
GTR

#5 投稿記事 by GTR »

早速入れてやってみましたが、
dyButtonが無効な識別子と出ましたが、なぜなのでしょうか。
普通はこれでできるはずが、
何か記述を間違えられているようですが・・・。
こちらも検索中です。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#6 投稿記事 by 7 »

> dyButtonが無効な識別子と出ましたが、なぜなのでしょうか。
すいません。引数が一つ足りませんでした。 これでいいはずです。
どうでもいいんですが、デラックスって意味でDxにしてみたんですが、カッコいいと思いませんか(笑
GTR

#7 投稿記事 by GTR »

Dxがデラックスですか。
思いつきませんでしたねー。
コンパイルして、ちゃんとできました。
呼び出し側は、関数を呼んでくるだけでいいですね。
ありがとうございました
GTR

#8 投稿記事 by GTR »

CreatToolBarDxを参照できません
というエラーが出ました。
ちゃんとDLLを呼んでるはずなのに

Declare Function CreatToolBarDx Lib "BitmapDLL" (ByVal hWnd As HWND,ByVal dwStyle As DWord,ByVal wID As DWord,ByVal nBitmaps As Long,ByVal hBitmap As HBITMAP,ByVal lpButtons As VoidPtr,ByVal iNumButtons As Long,ByVal dxButton As Long,ByVal dyButton As Long,ByVal dxBitmap As Long,ByVal dyBitmap As Long,ByVal uStructSize As DWord) As HWND
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#9 投稿記事 by 7 »

> CreatToolBarDxを参照できません
CreatToolBarDxではなく、CreateToolbarDxです。惜しい...。
C&Pじゃなくてある程度手書きのようですね。偉いと思います。
GTR

#10 投稿記事 by GTR »

すいませんでした、単なる記述ミス、こちらのほうでした。
>C&Pじゃなくてある程度手書きのようですね。偉いと思います。
ありがとうございます。始めのとこだけ手書きです。
それでも、まだ出るのですが、やっぱりおかしいです。
CreateToolbarDxが参照できませんとでて、IDM_BITMAP2が無効な識別子と出ますがなぜでしょう?
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#11 投稿記事 by 7 »

> IDM_BITMAP2が無効な識別子と出ますがなぜでしょう? DLL側にビットマップリソースを追加する度にコメントアウトしてある部分を増やす必要があります。
この関数は文字列"IDB_BITMAP*"を受けると数値IDB_BITMAP*を返す関数です。
GTR

#12 投稿記事 by GTR »

早速違うプロジェクトを作成してやってみましたが、やっぱり、

コード: 全て選択

Declare Function CreatToolBarDx Lib "BitmapDLL" (ByVal hWnd As HWND,ByVal dwStyle As DWord,ByVal wID As DWord,ByVal nBitmaps As Long,ByVal hBitmap As HBITMAP,ByVal lpButtons As VoidPtr,ByVal iNumButtons As Long,ByVal dxButton As Long,ByVal dyButton As Long,ByVal dxBitmap As Long,ByVal dyBitmap As Long,ByVal uStructSize As DWord) As HWND
のCreateToolbarDxが参照されません。
なぜか分かりませんが、(何度も質問してすいません・・・。)
失礼ですが、コードはこれで完全なのでしょうか?
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#13 投稿記事 by 7 »

> 早速違うプロジェクトを作成してやってみましたが、やっぱり、
> 中略
> のCreateToolbarDxが参照されません。
ですから...、CreatToolBarDxではなくCreateToolbarDxです。
コードを見るとCreatToolBarDxとなってますけど。
GTR

#14 投稿記事 by GTR »

自分もおかしいと思いました(投稿してから)
それでもおかしいと思ったので、
始めから見直して、プログラムしてみましたが、
ちゃんとできません。
コンパイルを完了させても、実行したときに、画面の左上に出てきます。
そうなるようになっているのでしょうか?もともと。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#15 投稿記事 by 7 »

> コンパイルを完了させても、実行したときに、画面の左上に出てきます。
> そうなるようになっているのでしょうか?もともと。
実行したときに、一体なにが画面の左上に出てくるんでしょう?
あまり人のこと言えないんですけど、しっかりと細部まで情報を書くように心がけてくださいね...。
返信する