なぜでしょうか

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
YS
記事: 5
登録日時: 2006年1月07日(土) 22:08
お住まい: 静岡県

なぜでしょうか

#1 投稿記事 by YS »

Callback.wbp の中で

Function DialogBox(hOwnerWnd As HWND, TemplateName As LPSTR) As LONG_PTR
Else
Exit Function
End If

というのがあります。Ifがないと思うのですが。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#2 投稿記事 by konisi »

一度も呼び出されなければ問題無いのかもしれません。

・・・と思って暇を潰してみる。

コード: 全て選択


#strict
Function Test(A As Byte) As Byte
	fjsdlkfjd
End Function
コンパイル結果↓
コンパイルは正常に完了しました(エラー:0、警告:0)。

但し、一度でもこの関数を呼び出すと無効な識別子として弾かれます。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#3 投稿記事 by イグトランス »

ABでは呼び出されない関数の内部はきちんと解析されないので,
konisiさんが仰っている通り呼び出されなければ問題ないのです。
YS
記事: 5
登録日時: 2006年1月07日(土) 22:08
お住まい: 静岡県

#4 投稿記事 by YS »

なるほど!
・・・でも、ProjectEditorで最初にできるファイルだから何か意味があるのでは、と思ったのですがどうでしょうか?考えすぎかも。
 まだ疑問に思うことがあります。
MakeWindow.wbp の最後です。いきなり、

CreateWindowEx( …

となっていますが、

hMainWnd=CreateWindowEx( …

ではないのでしょうか?
Toshi
記事: 98
登録日時: 2005年7月19日(火) 19:47
お住まい: 山形県
連絡する:

#5 投稿記事 by Toshi »

Callback.wbp で、
MainWnd に WM_CREATE メッセージが来た時に

コード: 全て選択


Function EventCall_MainWnd(hWnd As HWND, message As DWord, wParam As WPARAM, lParam As LPARAM) As LRESULT
	Select Case message
'中略
		Case WM_CREATE
			hMainWnd=hWnd

としているので、問題ありません。
確かに MakeWindow.wbp で取得してしまっても良いとは思いますけどね。
YS
記事: 5
登録日時: 2006年1月07日(土) 22:08
お住まい: 静岡県

#6 投稿記事 by YS »

ああそうか。ん?
じゃ、この hWnd はどこで得られたんでしょうか?
初歩的ですみません。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#7 投稿記事 by イグトランス »

EventCall_MainWndはWindowsが呼び出すコールバック関数です。
しかもWM_CREATEはCreateWindowExから戻るよりも前に呼び出されます。
従ってこのEventCall_MainWnd内でmessageがWM_CREATEのときが,
最初にウィンドウハンドルを得られるときなのです。
(本当はWM_CREATEよりも前に呼ばれるメッセージもありますけどね。)
YS
記事: 5
登録日時: 2006年1月07日(土) 22:08
お住まい: 静岡県

#8 投稿記事 by YS »

 だから、プログラムの中だけでこの hWnd の出所を探してもないということですね。何となく理解の手がかりが得られました。
 本当に有難うございました。
返信する