ページ 11

ファイルの関連付け

Posted: 2007年12月18日(火) 23:05
by M.S.
ファイルの関連付けで、
レジストリの部分は猫でもわかるプログラミングを見てできましたが、
コマンドラインの部分がうまくできていないのか、
関連付けたファイルをダブルクリックで開こうとすると、
「問題が発生したため、xxx.exe を終了します。 ご迷惑をおかけして申し訳ありません。」
というエラー報告のメッセージが出てきてしまいます。
*D & D ではちゃんと動きます

どこがいけないのでしょうか?
コマンドラインの取得部分は、
SPIRIT さんの WinTips のものを引用しました。

AB Ver.: 5.00.00 (CP3)

Posted: 2007年12月19日(水) 02:31
by konisi
こんな感じでうまく動きますか?

before:

コード: 全て選択

    lstrcat(pg,Ex"\q") 
    lstrcat(pg," %1")
after:

コード: 全て選択

    lstrcat(pg,Ex"\q \q%1\q")

Posted: 2008年1月13日(日) 22:09
by M.S.
返信遅れてしまって申し訳ありません。

konisi さんのおっしゃるとおり、

コード: 全て選択

    lstrcat(pg,Ex"\q \q%1\q")
として、
CommandLine() の中を少しいじると、
できるようになりました。
ありがとうございます。

僕が試した PC だけだと困るので、
もしよければ下記の URL からダウンロードして、
試してみてください。
Download: ファイルへ直リンクしてあります

OS: WinXP SP2, WinME

Posted: 2008年1月14日(月) 20:38
by イグトランス
icoやpgは、ZeroStringやlstrcatを使わなくても、単にico = Ex"\q" + buf + Ex"\q, 1"や、pg = Ex"\q" + buf + Ex"\q \q%1\q"で十分です(konishiさんの修正適用済)。

ZeroStringの結果を代入しても、結局その次の行の代入で参照できなくなります。
文字列の+演算子は左右を連結するのに十分なだけのメモリを確保して、それを結果とするためです。
そこへさらに、lstrcatで文字列を追加しているのは良くないです。

Posted: 2008年1月15日(火) 21:53
by konisi
本当だ、よく見たらString型だ。

WinAPIは*Char型(BytePtr型)で文字列処理を行ってるものが多いので、
簡単な文字表示以外の場面では、callocで領域を確保するようにしてみてはどうでしょうか?
開放忘れには十分に注意する必要があるんですが。

文字の連結にはwsprintfやlstrcatが使えます。
lstrcatは、長い文字を処理する時は動作が鈍るんですが。

文字列の長さの取得はlstrlenでしたっけ?

Posted: 2008年2月05日(火) 23:08
by M.S.
返信、遅れてしまいすみません。


> 本当だ、よく見たらString型だ。
>
> WinAPIは*Char型(BytePtr型)で文字列処理を行ってるものが多いので、
> 簡単な文字表示以外の場面では、callocで領域を確保するようにしてみてはどうでしょうか?
> 開放忘れには十分に注意する必要があるんですが。
>
> 文字の連結にはwsprintfやlstrcatが使えます。
> lstrcatは、長い文字を処理する時は動作が鈍るんですが。

普通に "+" で繋げると、
表示される文字列が途切れてしまうので lstrcat にしたのですが、
良くないみたいですね。
なので、wsprintf に書き換えました。


> 文字列の長さの取得はlstrlenでしたっけ?

それでよかったと思います。