DLLからの呼び出し

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: DLLからの呼び出し

by 7 » 2006年4月07日(金) 22:32

>
MainWnd.sbp(11) - "CreateToolbarDx" を参照できません
> MainWnd.sbp(110) - "IDB_BITMAP1" 無効な識別子です
> MainWnd.sbp(129) - "IDB_BITMAP2" 無効な識別子です
CreateToolbarDxの参照については、呼び出し側で綴りが間違っている、DLL側で綴りが間違っている、Exportが付いていない、DLLが同じフォルダにない、を確認しても問題ない場合、自分にはお手上げですね...。
IDB_BITMAP*は、ビットマップはDLL側で扱ってるので呼び出し側では定数をそのまま使うことはできません。

失礼ですが、よく分からないままにコードを書いてますよね?
ある程度知識の付いている人ならサンプルコードから応用することもできると思うんですけど、そうじゃない人は提供されたコードのメンテナンスができないので、今回はコードを載せません。

で、以前パスワードのスレッドがありましたが、あれはDialogBox()関数、GetWindowText()関数、lstrcmp()関数で実装可能だと思います。
まずlstrcmp()関数で文字列を比較できるんだ、っていうそういう簡単なことの積み重ねをしたらどうでしょう?
パスワードに関して言うなら文字列の比較ができると、正規のパスワードとユーザーが入力したパスワードを比較することができます。

by GTR » 2006年4月07日(金) 14:44

これは、ある人のもの使って作成してみました。
これで原因が分かればいいのですが、ツールバーの情報です(見て分かると思いますが)呼び出し側のビットマップははずしました。
DLLを同じディレクトリにコピーしました。
しかしなぜか、
MainWnd.sbp(11) - "CreateToolbarDx" を参照できません
MainWnd.sbp(110) - "IDB_BITMAP1" 無効な識別子です
MainWnd.sbp(129) - "IDB_BITMAP2" 無効な識別子です
と出るのです。人に頼みすぎですが、原因が私に分からないので、教えていただけませんか?自分もできる限りの努力をして探したいと思いますが。

by 7 » 2006年4月06日(木) 16:29

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

by GTR » 2006年4月06日(木) 16:02

自分もおかしいと思いました(投稿してから)
それでもおかしいと思ったので、
始めから見直して、プログラムしてみましたが、
ちゃんとできません。
コンパイルを完了させても、実行したときに、画面の左上に出てきます。
そうなるようになっているのでしょうか?もともと。

by 7 » 2006年4月05日(水) 18:18

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

by GTR » 2006年4月05日(水) 18:04

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

コード: 全て選択

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が参照されません。
なぜか分かりませんが、(何度も質問してすいません・・・。)
失礼ですが、コードはこれで完全なのでしょうか?

by 7 » 2006年4月05日(水) 16:39

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

by GTR » 2006年4月05日(水) 15:53

すいませんでした、単なる記述ミス、こちらのほうでした。
>C&Pじゃなくてある程度手書きのようですね。偉いと思います。
ありがとうございます。始めのとこだけ手書きです。
それでも、まだ出るのですが、やっぱりおかしいです。
CreateToolbarDxが参照できませんとでて、IDM_BITMAP2が無効な識別子と出ますがなぜでしょう?

by 7 » 2006年4月05日(水) 13:13

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

by GTR » 2006年4月05日(水) 12:15

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

by GTR » 2006年4月05日(水) 10:06

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

by 7 » 2006年4月05日(水) 09:56

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

by GTR » 2006年4月05日(水) 09:45

早速入れてやってみましたが、
dyButtonが無効な識別子と出ましたが、なぜなのでしょうか。
普通はこれでできるはずが、
何か記述を間違えられているようですが・・・。
こちらも検索中です。

by 7 » 2006年4月04日(火) 23:23

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

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

by GTR » 2006年4月04日(火) 19:52

7さん。返信ありがとうございます。
えっと、いきなりで悪いのですが、ツールバーの場合はどうしたら良いでしょう?関数はすべてDLLに入れてもらいたいのですが(人に頼まない。反省②)

ページトップ