WinMainのようなもの

オープンソース形式でコードを共有するフォーラムです。お役立ちコード、あなたも投稿してみませんか?
返信する
メッセージ
作成者
みどるべあ
記事: 25
登録日時: 2005年11月13日(日) 15:25
連絡する:

WinMainのようなもの

#1 投稿記事 by みどるべあ »

お久しぶりです.
最近ABとCを併用することが多いのですがそのときに無性にWinMainが欲しくなる(コマンドラインとかnCmdShowとか)ので作りました.
留意点はPathGetArgsが何故か先頭にスペースがあるのにそのままにする場合があるのでWhileで進ませています.
あと最初にSysWinMainと書かなくては動かないのが個人的に不満です.
参考元: http://hp.vector.co.jp/authors/VA016117/tinyexe.html

ABでもC++のUnicodeとかみたくStringとBytePtrの切り替えができたらいいのにな…と思ったり

(AB4.23で動作確認)

コード: 全て選択

Declare Function PathGetArgs Lib "shlwapi" Alias "PathGetArgsA" (ByVal p As BytePtr) As BytePtr

SysWinMain()

Function WinMain(ByVal hInstance As HINSTANCE, ByVal Reserved As HINSTANCE, ByVal sCmdLine As String, ByVal nCmdShow As Long) As DWord
	MessageBox(0, StrPtr(sCmdLine), "WinMain test", MB_OK)
	WinMain = 0
End Function

Sub SysWinMain()
	Dim szCmdLine As BytePtr
	szCmdLine = PathGetArgs(GetCommandLine())
	While GetByte(szCmdLine) = &H20 '&H20=半角スペース
		szCmdLine++
	WEnd
	Dim sinfo As STARTUPINFO
    sinfo.dwFlags = 0
    GetStartupInfo(sinfo)
	If Not(sinfo.dwFlags and STARTF_USESHOWWINDOW) Then sinfo.dwFlags = SW_SHOWDEFAULT
	Dim ret As DWord
	ret = WinMain(GetModuleHandle(0), 0, MakeStr(szCmdLine), sinfo.dwFlags)
	If ret = 0 Then End
	ExitProcess(ret)
End Sub
返信する