[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/10 00:36 / Filesize : 205 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build77



1 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 01:54:24 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!

過去スレ、関連リンクは>>2-10くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

- Win32API質問箱 wiki
wiki.livedoor.jp/program1/d/FrontPage

Win32API質問箱 Build76
pc11.2ch.net/test/read.cgi/tech/1233622578/

191 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 01:48:30 ]
レスありあとうございます。
>>189を試してみましたが
Can not marshal parameter #4: Invalid managed/unmanaged type combination
(Interfaces must be paired with Interface).
というエラーが出てしまい対応できませんでした。

>>190
New Guid("618736E0-3C3D-11CF-810C-00AA00389B71")
を定義すると取得失敗へ行かなくなりました。
varChildに何か入っているようです。
最初のグーグルで最初に出てくるページのサンプルでvarChildを調べる部分でエラーが
出てしまいましたが、また色々やってみたいと思います。
何をやってもNothingのままだったので>>33がやっと解決できましたみたいでありがたいです。
ありがとうございました。

192 名前:デフォルトの名無しさん [2009/03/05(木) 10:19:12 ]
>>191
インターラプト入れれば、マーシャルでエラーでない

Imports System.Runtime.InteropServices

Private Declare Function AccessibleObjectFromWindow Lib "oleacc" (ByVal Hwnd As Int32, _
     ByVal dwId As Int32, _
     ByRef riid As Guid, _
     <MarshalAs(UnmanagedType.IUnknown)> ByRef ppvObject As Object) As Int32

193 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 10:47:34 ]
>>174
そうだ!!
WM_COPYDATAがあったんだ!
ありがとうありがとう

194 名前:デフォルトの名無しさん [2009/03/05(木) 18:03:33 ]
ツールバーを消したいんですけど、手順的にはどうすればいいのですか?
サイズを 0,0,0,0 にしたり SW_HIDE とか HWND_BOTTOM を試しても
うまくいかず、「上に」詰めた領域がツールバーに隠れるんですが、、、

195 名前:デフォルトの名無しさん [2009/03/05(木) 18:39:06 ]
>>194
ShowControlBar()

196 名前:デフォルトの名無しさん [2009/03/05(木) 18:45:54 ]
ごめん間違えた。ShowWindowのSW_HIDEで消えないの?

197 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 22:18:58 ]
まともなのが共産と国民新党しかないとかどれだけw

198 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 22:23:58 ]
ひでえ誤爆

199 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 22:57:10 ]
>>192
Imports System.Runtime.InteropServices
は書いたのですがエラーになってしまいました。

もう一つ教えて頂きたいのですが、
Dim objAcc As IAccessible
という宣言があるのですが、
objAcc を入力したあとにピリオドを入力すると
メンバが出るようにしたいのですが方法がありましたら教えて頂きたいです。




200 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 22:58:46 ]
おっとそこまでだ
その質問はVB.NETスレでやってくれ

201 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 22:59:28 ]
>>199
何度もすみません。
現在デスクトップ上のアイコンの名前がリストボックス登録されるところまで出来ました。
(グーグル検索の最初に出てくるサンプルをVB.NETに書き換えて)

202 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 23:10:53 ]
>>197
どういう話題のスレか分かってしまうw

203 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 23:44:55 ]
プログラムが立ち上がったときに、エディットコントロールに初期文字が表示されるようにするため、
プログラム内からエディットコントロール内に文字を打ちたいのですが、どのようにすればよいでしょうか?

SendMessageを使って、例えば「7」を入力しようとしましたが、ダメでした。

SendMessage( hEdit, WM_KEYDOWN, '7', 0 );

ご助言、お願いします。

204 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 23:49:55 ]
>>203
WM_INITDIALOG 内で SetWindowText()

205 名前:203 mailto:sage [2009/03/06(金) 00:02:49 ]
>>204
ありがとうございました!!

206 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 09:29:08 ]
>>194
SetMenu(hWnd, NULL);


207 名前:デフォルトの名無しさん [2009/03/06(金) 19:31:44 ]
トップレベル・ウィンドウに

BOOL MoveWindow(
  HWND hWnd,
  int X,
  int Y,
  int nWidth,
  int nHeight,
  BOOL bRepaint
);

と、

BOOL SetWindowPos(
  HWND hWnd,
  HWND hWndInsertAfter,
  int X,
  int Y,
  int cx,
  int cy,
  UINT uFlags
);

を、 X、Y、W、H とも同じ値にして実行したときに出来るウィンドウのサイズと座標が
全く異なるんですが、これは一体どういうことなんですか??

208 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 19:48:15 ]
スクリーン座標とクライアント座標じゃね?
WndPosがクライアントだった希ガス

209 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 22:34:14 ]
悪い、SWP_NOSIZEとSWP_NOMOVE指定してたわ



210 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 07:39:56 ]
そーゆーオチかよwww

211 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 16:41:43 ]
あああああああああああああああああああああああああああああああああああああああ

212 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 16:43:47 ]
何?何?

213 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 16:49:03 ]
酒飲んでて屁だと思ったのが下痢だった

214 名前:デフォルトの名無しさん [2009/03/08(日) 01:14:34 ]
OS:Windows VISTA SP1
ボタンを押したらOS情報取得するプログラムを以下の様に記述
しました。

GetVersionEx(&osv);
switch (osv.dwPlatformId)
{

case VER_PLATFORM_WIN32s:
MessageBox(NULL, "Win32sです", "Platform", MB_OK);
break;
case VER_PLATFORM_WIN32_WINDOWS:
MessageBox(NULL, "Windows95です", "Platform", MB_OK);
wsprintf(str, str_format, LOWORD(osv.dwBuildNumber));
MessageBox(NULL, str, "OK", MB_OK);
break;
case VER_PLATFORM_WIN32_NT:
MessageBox(NULL, "WindowsNTです", "Platform", MB_OK);
break;
結果、なぜか、VISTA上で動かしてボタンを押すと、
VER_PLATFORM_WIN32_NT:
MessageBox(NULL, "WindowsNTです",
となってしまいます。
VISTAを判別するためのdefineってなんでしょうか?
GetProductInfoで細かく取得するつもりはないんですが・・。



215 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:20:02 ]
VistaはNTだし…

216 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:21:55 ]
dwMajorVersionとdwMajorVersion見ろ

217 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:31:02 ]
ドキュメントぐらい読め
msdn.microsoft.com/en-us/library/ms724834(VS.85).aspx

218 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:32:06 ]
>>214
msdn.microsoft.com/en-us/library/ms724834(VS.85).aspx

219 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:32:58 ]
かぶったorz



220 名前:デフォルトの名無しさん [2009/03/08(日) 01:36:26 ]
NT系列だったんですね 勘違いしてました。
ありがとうございました

221 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:38:07 ]
まさか本気でMeの後継だと…

222 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 02:26:19 ]
さらに、Windows 7.0はバージョン7.0と思っているに違いない。

223 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 02:49:04 ]
え??VISTAの完成度の低さはMeの後継だからでしょ?

224 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 02:52:21 ]
うん そうだね

225 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 02:56:45 ]
Win32を使っているのならVistaのAPIの完成度の高さはわかるはずだが…

226 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 03:30:29 ]
>>222
>Windows 7.0
もしかしてそれはWindows 7と言いたいのか?

227 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 03:31:53 ]
>>223
「Meの後継」と「完成度」には何の関係もないだろ

228 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 06:03:34 ]
>>226
そのとおり。すまん、つい勢いで書いてしまった。今は反省している。

229 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 06:35:58 ]
>>227
そのとおり。すまん、つい勢いで書いてしまった。今は反省している。



230 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 10:37:52 ]
VistaのAPIの完成度の高さ、って……

MS社員乙って言ってほしいのか?

231 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 12:15:03 ]
後に出たAPIほど洗練されるのはある意味当たり前
VistaのAPIが完成度高いってよりWin32 APIが極端に使いにくいだけ
でも歴史的背景を考えればやむなし

232 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 13:40:29 ]
はぁ?
VistaのAPIが完成度高い??洗練されてる??

もしかして、VistaのAPI=.NET3.0/WPF=洗練されてる、とか言いたいだけの人なのかね

233 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 13:45:09 ]
WERやスレッド関連は以前よりはるかに完成度が高いと思うけど

234 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 13:49:43 ]
>>233
アホは議論に参加しなくていいから。

235 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 13:54:28 ]
一部流動的なものを対象としている為に、
ライブラリのような「完成度」が求めることが不可能
であるか極度に困難だからこそAPIと呼ばれライブラリ
とは呼ばれない件について
(以上チラ裏)

236 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 14:06:18 ]
まあ APIの完成度 なんて表現を使う時点で程度の低さが分かっちゃうけどね

237 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 14:08:39 ]
API=Aplication Programming Interface
だったっけ?
完成度は求められる対象じゃないか?

238 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 14:11:14 ]
いやVISTAのAPIは完成度高いだろ
だってさ、XP用のソフトも使えるんだぜ?

XP = XP用のソフトしか使えない
VISTA = XP用ソフト、VISTA用ソフトの両方が使える

239 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 14:18:44 ]
そもそもVistaのAPIつっても大部分がWin16時代からの物なのに「完成度」てw

どうも"API"を理解してない人がいるみたいだね
またいつもの人か?



240 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 14:20:03 ]
どこぞのVZ厨だろ

241 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 14:21:46 ]
>>239
そだね。APIってインターフェースだから内部構造は絶対不変で
Win16のコードすら必ず残ってるからね。だからVistaでもXPでも
Windows2.0のプログラムがそのまま動くw。

242 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 14:30:44 ]
WERやスレッド関連って、VistaからのAPIだろ…

243 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 14:40:04 ]
MSの互換性絶対主義の賜だね
さすがMS様はわかってらっしゃる

244 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:07:33 ]
>>241
64bit版にはWin16サポート無くなってるんじゃなかったか?
古いInstallShieldのインストーラが起動しないとかどっかで見た気がする

245 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:23:24 ]
まぁさすがにWin16はもういいだろ・・・

246 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:24:42 ]
最近のソフトでも、インストーラーが16bitのがあるのがむかつく。
しかも64bit版でそんなインストーラ使うアホなとこもあるw

247 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:32:33 ]
.NET Frameworkなんか糞だろ
開発する側のメリットしか考えてない使い手無視のAPI
互換性だけでWin32APIを残しているあたりも糞OS

248 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:43:59 ]
PEの出だしって16bitじゃなかったか?

249 名前:デフォルトの名無しさん [2009/03/08(日) 15:52:50 ]
Windowsの灰色ってRGBで言うところの(255,255,255)いくつなんでしょうか?
SetTextColor(hdc, RGB(0, 0, 0);
SetBkColor(hdc、RGB(???));

背景はダイアログボックスの灰色です

これでいろいろ試してみたんですけど
なぜか背景色が合わないんです

どうしたらダイアログボックスと文字の背景色を合わせられるでしょうか?



250 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:53:29 ]
PEは32/64bitだろ

因みに16bitはNEと呼ばれてた
LEとかLXとかっていう16/32bitハイブリッドなのもあってこれは9x時代のドライバにも使われてた

251 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:55:43 ]
>>249
hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);

252 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:59:24 ]
>>250
すまん
言い方が悪かった
OSが16bitだった場合実行される16bit命令が出だしにあったんじゃないかと

253 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:00:45 ]
int型だぁ〜(><;)わからないよ〜

254 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:04:12 ]
>>249
::SetTextColor( hDC, ::GetSysColor( COLOR_BTNTEXT));
::SetBkColor( hDC, ::GetSysColor( COLOR_3DFACE));

255 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:04:58 ]
>>251さん
SetBkColor(hdc、COLORREF )
hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); を
COLORREF形式にするにはどうすればいいんでしょうか?

256 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:05:56 ]
>>254
ありがとうございます
できましたm(_;)m

257 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:05:58 ]
>>249
設定とかによって変わってくるから決めうちはいかんよ。

258 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:17:53 ]
ほんと決め打ちは勘弁して欲しい
配色を黒基調にしてると文字が見えなくなるとかw

259 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:46:50 ]
     __
     \|/
       |
   ┌─┼─?|─┬──┐
   三  |入    ,>   .└-、
   三  =    <、      ヽ、   ,-‐-、
   三 /.|      ,>   .┌-、 "''-( ( ̄〇
   └─┼───┴──┘ "''''""" ヽ,,,,ソ
     _|_
     ////



260 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:52:59 ]
大抵SetBkMode(TRANSPARENT)するから
SetBkColor()はあんまり使わんかも

261 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:56:45 ]
>>248
出だしつーかファイルの一番先頭は「このプログラムはDOSじゃ動かねーよ」って表示するだけの16bitコードだな。
極限までバイナリサイズ縮める遊びとかでたまに書き直してた。

262 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 17:00:21 ]
>>261
ちゃんとしたプログラムに差し替えも可能だな。

263 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 17:31:27 ]
誰ですか、スタブをjxw,exeにした人はw

264 名前:デフォルトの名無しさん [2009/03/08(日) 20:49:27 ]
VC++2005 でサウンド入出力プログラムを作っています.
SDK,低レベルAPIを使っています.
入力,出力共にマルチバッファリングを行っているのですが,
入力と再生の間に,バッファ数に従う遅延が生じてしまいます.
体感では,(1バッファに録音する秒数 * 用意したバッファ数)秒
の遅延が生じていると思われます.

リアルタイムに近い動作を実現したいため,
1バッファに録音する秒数(RecSEC)を短くしています.
現在の設定では RecSEC = 0.005 [sec/buffer] です.
バッファ数が少ないと音声がブツブツと途切れてしまいますが,
バッファ数を増やす事で解決しました.

これで遅延量が少ない動作が実現できたと思っていたのですが,
RecSEC = 0.1 として実行してみたところ,約0.1[sec]の遅延を期待していたのですが
約(0.1*バッファ数)[sec] という大きな遅延となってしまいました.

ソースコードをアップしましたので,解決方法をご教授願います.
waveInStart の実行位置を変えてみる等色々とやってみましたが
よくわかりませんでした.

pass: sagehoge
ttp://www2.uploda.org/uporg2074476.txt.html

よろしくお願いします.

265 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:21:12 ]
延滞が気になるASIOを使え

266 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:28:17 ]
whOut[k].dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;
whOut[k].dwLoops = 1;

関係ないと思うけど↑が気になった
両方とも0でよくね?

267 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:44:58 ]
>>264
Vista以降ならCoreAudioで扱えばいい。
他にもDirectSoundでバッファ読みまくりとか。

ソースは見るまでもないが、きっとやり方間違っているよ。
あらゆる方法を試した事のある俺が言うんだから間違いない。

268 名前:264 mailto:sage [2009/03/08(日) 21:50:58 ]
>>265
ありがとうございます.
ですが,低レベルAPIで書きたいです.

>>266
ループ再生は不要なので,確かに両方とも0ですね.

>>267
XPで書いています.DirectXにも挑戦しようか悩みましたが,
低レベルAPIで片付けてみたいのです.
お暇な時にでもソースを見ていただけたら.

269 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:55:49 ]
APIレベルではどうしようとも遅延が200〜500msあるんだが、それを理解した上でやっているのか?



270 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:56:58 ]
>>264
ここよりサウンドプログラムスレの方が良いアドバイスもらえるんじゃないか


271 名前:264 mailto:sage [2009/03/08(日) 22:07:46 ]
>>269
数値がどの程度かは知りませんでしたが
それくらいの遅延は覚悟しておりました.
しかし現状ではアルゴリズムの問題で遅延が生じてしまっているため
それを解消したいのです.

>>270
スレ検索が足りなかったようです.
サウンドプログラミングのスレを見つけましたので,
そちらでお聞きする事にします.

皆さん,ありがとうございました.

272 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 04:20:37 ]
>>231
互換性を切り捨てられるなら君の言うとおりだ。>後の方が洗練

273 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 05:32:19 ]
互換性が切り捨てられるなら新しいOSが出る毎にコードを書き直さないといけないだろ
そんなのが洗練されてるとか、馬鹿?

274 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 07:24:18 ]
↑話を分かっていないバカ

275 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 07:27:49 ]
>>274 お前がな

276 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 07:34:07 ]
>>274
荒らすなよ。

277 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 09:56:49 ]
ここは荒らしていいスレじゃなかったっけ

278 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 10:33:57 ]
落書きだらけの壁に「落書き禁止」の紙が貼ってあるようなもんだ。

279 名前:デフォルトの名無しさん [2009/03/09(月) 12:42:44 ]
荒らしていいスレ(笑)



280 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:31:20 ]
>>278
「落書き禁止」なんて貼ってないよ
「自由の板です、どうぞ」の紙が貼られている板



281 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:40:56 ]
以下のコードでnewでメモリ確保すると大丈夫なのにスタックにメモリ確保するとエラーになります。
どこがまずいのでしょうか?なんとなくスタックの概念を根本的に間違っているような気がします。
//----大丈夫----------------------------
#include<windows.h>
#include<gdiplus.h>
#pragma comment(lib,"Gdiplus.lib")
#include<cstdio>
void main()
{
Gdiplus::GdiplusStartupInput gdiplusStartupInput1;
ULONG_PTR gdiToken;
Gdiplus::GdiplusStartup(&gdiToken,&gdiplusStartupInput1,NULL);
Gdiplus::Bitmap*pBitmap1=new Gdiplus::Bitmap(TEXT("C:\\WINDOWS\\winnt.bmp"));
printf("%d\n",pBitmap1->GetWidth());
delete pBitmap1;
Gdiplus::GdiplusShutdown(gdiToken);
}
//----エラー----------------------------
#include<windows.h>
#include<gdiplus.h>
#pragma comment(lib,"Gdiplus.lib")
#include<cstdio>
void main()
{
Gdiplus::GdiplusStartupInput gdiplusStartupInput1;
ULONG_PTR gdiToken;
Gdiplus::GdiplusStartup(&gdiToken,&gdiplusStartupInput1,NULL);
Gdiplus::Bitmap bitmap1(TEXT("C:\\WINDOWS\\winnt.bmp"));
printf("%d\n",bitmap1.GetWidth());
Gdiplus::GdiplusShutdown(gdiToken);
}


282 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:45:43 ]
>>281
使ってるクラスの内容は知らんが、
上だとビットマップ削除後Shutdown呼んでるが
下だとShutdown呼んだ後ビットマップ削除してる
辺りが原因なのでは?

283 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:46:53 ]
スタックうんぬんというより、クラスのインスタンス生成の概念がわかってないんじゃない?

284 名前:281 mailto:sage [2009/03/09(月) 22:02:47 ]
>>282
レスありがとうございます。
おっしゃるとおりでした。
main()を抜ける時にBitmapのデストラクタが実行されてすでに開放された領域を読もうとしていたようです。

>>282
レスありがとうございます。
クラスのインスタンス生成の概念がわかってないっぽいです。

自分のやり方だと確保する領域が固定だと
Gdiplus::Bitmap bitmap1(TEXT("C:\\WINDOWS\\winnt.bmp"));
という風にスタックに確保するのですが、

他の人は
Gdiplus::Bitmap*pBitmap1=new Gdiplus::Bitmap(TEXT("C:\\WINDOWS\\winnt.bmp"));
という風に確保する領域が固定でもnewで確保しているようです。
なぜそうするかは理解できません。


285 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:07:53 ]
newを使いたくないなら無理やり↓みたいにスコープ作ればよいのでは。
{
 Gdiplus::Bitmap bitmap1(TEXT("C:\\WINDOWS\\winnt.bmp"));
 printf("%d\n",bitmap1.GetWidth());
}

286 名前:281 mailto:sage [2009/03/09(月) 22:22:46 ]
>>285
レスありがとうございます。
デストラクタのタイミングを制御する必要がある時意外でも、
たとえば、デストラクタのタイミングを制御する必要がなく、いっけんnewを使う必要が無いような時も

自分のやり方だと
Gdiplus::Graphics graphics1(hdc1);
という風にスタックに確保する場面で

他の人は
Gdiplus::Graphics*pGraphics1=new Gdiplus::Graphics(hdc1);
という風にnewで確保しているようです。
この理由がわかりません。

287 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:53:01 ]
>>286
クラスのインスタンスでも、基本的には変数と同じ使用方法でいいと思うけどね。
#関数内でのみの使用、永続的な使用等で切り分け

わざとnewで確保するのは、明示的にdeleteを呼ぶことでそこでデストラクタが
実行されることを示したいからじゃない?

ま、別にこだわる必要はなし。
下手にnewばかりしてメモリリークさせるなら>>281の方が合理的なのは確か。

288 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:59:10 ]
コンストラクタでGdiplusStartup呼んで、デストラクタでGdiplusShutdown呼ぶクラス一個つくって
mainの頭に置こうぜ

289 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:02:40 ]
>>286
サイズがデカいクラスをスタックにとりたくない場合はnewする場合はある。
Gdiplusがそこまでデカいかは知らんが。



290 名前:デフォルトの名無しさん [2009/03/09(月) 23:04:02 ]
> Gdiplusがそこまでデカいかは知らんが。

実装依存

291 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:09:29 ]
Gdiplusの実装とか






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<205KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef