★初心者にVisual C++を教えるスレ★ Part38
1 :
デフォルトの名無しさん :
2011/11/03(木) 00:54:48.61
>>1 乙です
40代のLinux鯖屋ですが未だにVC6でたまに仕事がありますw
未だに作法がわからず、とりあえず動くものを納品してます。
よろです。
>>5 それわたしです
SDK入れたり色々してみたんですが
やっぱりうまく行きません
ウインドウアプリケーションを作っているんですが 基本ネットにつないであるデスクトップの32ビットVistaに入れたVC++2008EEはthis->とか入れたらドロップリストみたいなのが出て自動入力できるんですが ノーパソの64ビット7に入れたVC++2010EEでは全く出てくれません。どうしてでしょうか?
>>8 「#include <」とか、
「#include "」とかって書くとどうなります?
2010からヘッダファイルもインテリセンスしてくれるので動作確認できます。
ちなみに、インテリセンスさんは頻繁に気絶されるので、動かないときは再起動してあげてください。
↑で何も変化ないなら、設定切れてるかインストール失敗したのでは?
>>9 ありがとうございます
#include <と書くとヘッダファイルのドロップリストがいっぱいでてきました
でもメンバは全く出ないのです
Ctrl+Jでおk
Ctrl+J?何もおこりませんが
ソリューションを全クリーンして、自分で .pdb (だっけ?)を削除した上でリビルドしてもかわんない?
.ncb も削除しとけよ
そのサンプルのままやろうとしたの? 匿名メソッドって使えたんだっけ?
はい。 サンプルのままやろうとしました。 C++/CLIはサンプルが少ないので、いつもC#を参考にして色々試しているのですが、今回はどう変えればいいのか分かりませんでした。
C++/CLI には匿名メソッドがなかったような気が。 ※ this.Invoke の行から始まるヤツのこと でもデリゲートはあったはずだから、匿名メソッドの部分を通常?の関数?にして やってみればいいんじゃね。それも分からないなら、デリゲートをちゃんと勉強してからだと思う。 で、あやふやな記憶で書いてる。間違ってたらごめん。
デリゲートの概念がすぐに理解できずにちょっと躓きましたが、なんとか解決できました。 関数化は簡単でしたが、関数で引数を受けなければならない場合、Invokeの引数は(デリゲートのインスタンス,引数)となるんですね。 アドバイスを下さった方々、ありがとうございました。
ネストがややこしいのですが細かく考えすぎないほうがいいのでしょうか?
ネストが深くなるなら、深い部分を関数かするとかは同等手段だね。 try 〜 catch とか古くは do 〜 while(false) を使って流れの中では正常ケースしか存在しないようにするとかも。
x同等 o常套
すみません、ここ最近参考書を買って独学しているものです 頭では理解しているのですがいざこういう処理をするプログラムを書けって言われて書けないことが多々あるのですがまずいのでしょうか? また対策として何かありますか?
>>24 それが普通。
その度に調べて自分の血肉にしていくしかない。
そうなんですか 自分語りのつもりはないのですが学生時代はアホだったものでこれも向いてないのかなと不安になりました 素早いレスありがとです
インストール時に保存先を別のディスクに選んでもへ殆どがC:に保存されるけど後でコピーして別のディスクにいれて起動できる?
VC ってプロジェクトの設定に OutDir のようなマクロ変数を使いますよね。 これの中身を外部のプログラムなどから覗くことは出来ないでしょうか。 プロジェクトファイルが XML で書かれているので、その中に定義があると思ってたのですが、見あたらなかったです。
現在実行中のスレがどのような呼び出し階層でそこに居るのか調べて、std::stringに文字列を代入したいのです。 なんという関数を利用すれば解決できるかわかりません。 び出し階層、ログ、アサート、assertで検索してみましたが、節穴でみつけられていません。 ヒントをください。
質問です。 メモリリークの検出方法を調べていたんですが。 @最初に_CrtSetDbgFlagを記述する方法と // メイン関数 int main(int argc, char* argv[]) { _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); : } A最後に_CrtDumpMemoryLeaksを呼び出す方法があるようなのですが int main(int argc, char* argv[]) { : _CrtDumpMemoryLeaks(); } @だとメモリリークが検出されずAだと数箇所のメモリリークが検出されてしまいます。 どちらが信用できるのでしょうか?ソースを追ってみたところ メモリリークが発生しそうな箇所はありませんでした。
>>31 mainのスコープのデストラクタは_CrtDumpMemoryLeaks();を呼んだ時点で
まだ呼ばれてはいないぞ。ヒープの解放予定のあるオブジェクトがあったら
当然誤検知
だからどちらも信用できる
ただ@のほうが自動で全部終わったあとに調べるから使い勝手はいいと思われ
xmlのフォーマットで書かれたテキストファイルを読み込みたいのですが、 そもそも、ファイルの内容がXMLとしておかしくないかチェックしてくれる便利なライブラリを紹介いただけないでしょうか? <root> <piyo>ababababa<hoge></piyo> Hello World</hoge> </root> の場合は、<piyo>に値があるのに、閉じられる前に次のタグが始まっているからパースエラー、というようなチェックをして欲しいのです。 よろしくお願いします。
34 :
33 :2011/11/16(水) 13:07:54.11
33です。 rapid_xml(もしくは、boost::property_tree)でxmlのパースができることを見つけたのですが、閉じタグをチェックしてくれないので少し困っています。 ここまでのチェックは、他のライブラリも含めて、してくれないものなのでしょうか? <root> <aa>えー</cc> <bb>びー</bb> </root> この例の場合、<aa>の閉じタグが何故か</cc>になっているのでパースエラーになってほしいのですが、rapid_xmlだと問題なしにされてしまいます。 欲を出すと、boostライセンスのように取扱が簡単なものがよいのですが…。 MSXMLも試してみます。(…MSのは、どうしてこんなに複雑なのだろう…。)
35 :
33 :2011/11/16(水) 13:10:16.30
33です。スレッド間違えました。 【初心者歓迎】C/C++室 Ver.76【環境依存OK ↑のスレッドのつもりで書き込んでいました。申し訳ないです。あちらへ移動します。
ビルド結果の文字列の並びを変更することって可能でしょうか? ========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ========== ↓ ========== ビルド: 正常終了 1、失敗 0、更新不要 0、スキップ 0 ==========
不可能
>>36 msenvui.dllの中に入っている文字列リソースのようなので、
それを自己責任で書き換えてしまえばできるかもしれないけど。
(`●ω●´) < ふ か の う〜 と某スレでは書きます。
したいこと: スタートアップフォルダにソフトを置いて、PC起動時にRAMディスクドライブに "z:\test\"という共有フォルダを作成したい。 #include "stdafx.h" #include <direct.h> int _tmain(int argc, _TCHAR* argv[]) { _mkdir("z:\test\"); return 0; } あとは共有設定したいのですが続きをお願いします。
mkdir net share ... のバッチで十分な気がしないでもない
プロジェクトのプロパティの 構成プロパティ>リンカー>入力>追加の依存ファイル とは、何を入力する欄なのですか? visual c++ 2010 Express を利用してプログラムの学習をしていて、 boost c++ libraryをインストールした際は、 Program Files\Microsoft SDKs\Windows\v7.0A にヘッダとライブラリをコピーするだけで利用できたのに対して、 libxml2をインストールした際は、上記に加えて、 構成プロパティ>リンカー>入力>追加の依存ファイル に対して、libxml2.lib を追記しないとリンクに失敗して、LNK2001・LNK2019が発生していたことが質問の背景にあります。 以前、何かのまねをしてプロジェクトを作っていたときに、 追加の依存ファイルに、ws_32.lib だったかを追記するようにという記述を思い出したので、 試してみたら、リンクエラーが無くなって解決できました。 そして、逆に、どうして必要・不要なのか気になってきました。 よろしくお願いします。
>>43 ライブラリは明示的にリンクしろと書かないかぎりリンクされない
追加の依存ファイルはリンクするライブラリを指定する場所
boostはヘッダに
#pragma comment(lib, "〜.lib")
と書いてリンカに自分のライブラリを指定しているから追加の依存ファイルに書かなくてもリンクが通る
テンプレートクラスが気持ち悪い
46 :
43 :2011/11/17(木) 21:30:26.01
>>44 ありがとうございます。
ところで、どこでそんなことを知るのですか?
現在VC2008で汎用のテンプレートクラスを作成していて エラー出力の方法を模索しています コンソールアプリならコンソールに GUIアプリならアラートという風に出力先を静的に切り変えたいのですが そのためのdefine定義がVCに既定であったりするのでしょうか?
_CONSOLE ちょっとプロジェクト作ってプリプロセッサの定義を見れば書いてあるぞ。 でもそんなんで切り替えるんじゃなくて、例外かなにかをそのクラスを使う側で捕捉できるようにして、 捕捉した側で出力を行うようにした方が設計的に良くないか?
今作成しているエラー処理がリリース時には必要のないもので 外部にまでひっぱりだすのが面倒臭いのでクラス内に直接書くつもりです。 本来のエラー処理の関してはおっしゃる通りだと思います。
privateのインスタンスメソッドのユニット試験がとても面倒です。 というか、やり方がわかりません。 教えて欲しいです。 C言語であれば、全ての関数はグローバル的な感じなので、適当なファイルにmain()を作って、そこから呼び出すだけだったのですが…。 自宅で趣味でプログラムをしているだけなので、殆ど試験をしていません。 が、何か寂しいです。 何かよい方法があれば教えてください。よろしくお願いします。
#ifdef [ユニット試験識別用のマクロ] #define private public #endif とか。
インテリセンスorz
53 :
デフォルトの名無しさん :2011/11/20(日) 14:27:27.61
PDB,LIBファイルとはどういうファイルなんですか プロパティページの追加のライブラリィディレクトリの項目にそれらが入っている場所 が指定されていたんですが それらを開けなくて困ってます
【開発環境】 Visual studio 2008 pro Windowsフォームアプリケーション 【やりたいこと】 ソフト起動時から、ボタンを押した時点までの時間を表示するプログラムを作りたい 【ソース】 #include <windows.h> #include <mmsystem.h> #pragma comment (lib, "winmm.lib") #include <time.h> (中略) private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { DWORD start; start = timeGetTime(); } private: System::Void button13_Click(System::Object^ sender, System::EventArgs^ e) { DWORD end; end = timeGetTime(); MessageBox::Show(String::Format("{0}msです。",end - start)); 【出力】 'start' : 定義されていない識別子です。 Loadで宣言した関数が定義されてないと言われるのを解消したいんですけどどうすればいいですか?
startをグローバル変数にしろ
開発環境:VS2008 種類:DLL ref classに配列を定義する場合、 staticとして定義したものと同様に扱えて(以前の内容を保持して)、 かつ、各インスタンスからは独立するようにするのはどうしたらいいのでしょうか?
つい先日2010Expressを導入しました。 ベターCとして使っています。 一度作った構造体にメンバを追加したのですが、デバッガでステップを 追うと、どうもメンバが更新前の古いままのようです。 キャッシュが効いているという事でしょうか? そのキャッシュは、どこで手動更新出来るのでしょうか?
>>57 public:
static array<T>^ arr = gcnew array<T>(N){...};
61 :
58 :2011/11/20(日) 21:52:29.05
>>59 クリーンすると言うのはどういう事でしょうか?
ディレクトリ削除、これは私にもすぐ理解出来たので、同じ問題が
出たらやってみようと思います。
で私は、問題の出た周辺に意味のない代入式を色々置いたり
メンバの変数名を変えたりして、無理やりねじ伏せました。
お答え有り難うございました。
#と言うか、よく起きる事なのでしょうか。
>>61 >クリーン
オブジェクトファイル等の中間生成物や、exeファイル等を
削除する。
手作業ではなくて、ビルドメニューにそういうのがある。
63 :
58 :2011/11/21(月) 23:42:06.24
>>62 ビルドと言うメニュー自体ないのですが・・・と思ったら、
上級者設定にしたら出現しました。
なるほど。
しかし、今度はデバッグ中に構造体のメンバの値が
表示されなくなりました。先頭アドレスのみ表示されて。
慌てて基本設定に戻しましたが復元せず。
どこをいじれば良いのでしょうか。
どーしてもなおんなかったら、再現する最小構成をどっかに晒せや。
65 :
デフォルトの名無しさん :2011/11/26(土) 11:18:25.95
age
完全初心者なのにヘッドマウントディスプレイを使って3D空間を見渡せるプログラムを作ってみたいと思い、
先日勢いでVR920というセンサー付きのヘッドマウントディスプレイを購入しました。
公式サイト
http://www.vuzix.com/_jp/support_downloads_drivers.html からSDKをDLしてHelloTracker3というサンプルを参考に頭の向きや角度の数値を取得する最低限のコードを模索しようとしていた所
そもそも公式のHelloTracker3がコンパイル出来ず
1>cl : コマンド ライン warning D9035 : オプション 'Wp64' の使用は現在推奨されていません。今後のバージョンからは削除されます。
1>stdafx.cpp
1>c:\program files\vuzix corporation\vuzixsdk\examples\hellotracker3\stdafx.h(34) : fatal error C1083: include ファイルを開けません。'afxwin.h': No such file or directory
1>ビルドログは "file://c:\Program Files\Vuzix Corporation\VuzixSDK\examples\HelloTracker3\Debug\BuildLog.htm" に保存されました。
1>HelloTracker3 - エラー 1、警告 1
========== すべてリビルド: 0 正常終了、1 失敗、0 スキップ ==========
というエラーが表示され完全に出鼻をくじかれてしまいました。
調べてみた結果MFCというものを利用しているのでExpress2008では開発出来なさそうという事実に行き着いてしまったのですが
やはり上記のようなセンサーからの数値取得はExpress2008では無理でしょうか?
GUIの部分に使ってるだけだろうから 無くてもいけるだろうけど visualStudioのprofessional買った方が早い気がするな
>>67 早速の返信ありがとうございます!
やはり購入したほうがスムーズなんですね・・・
下調べが足りずに買ってしまった自分がバカだったんですけどこれ以上は資金的な余裕が・・・
MFCとやらがGUIだけに使われていてセンサーからの数値取得自体には必要とされていなければ気合でなんとかなりますでしょうか
ここにソース貼るかリンクすれば ネトウヨさんがMFCなしで動くように治してくれるよ
SDKとにらめっこすればいけるんじゃね
>>71 ほんのちょっとかじった程度でいきなりこの挑戦は思い上がりすぎだったかもしれないと反省している所ですorz
一応見渡すための3D空間とカメラ等はDXライブラリのサンプルを参考に作ってあるので、
頭の角度の数値さえ取得できればあとはなんとか自力で・・・という所です。
あきらめず自分なりにもにらめっこ挑戦してみます。
環境:VC++2010 int* ptr = nullptr; ってメインスレッドでして、サブスレッド内で ptr = new int[10]; としてすぐにサブスレッドは終了。確実に終了したことを確認した上で メインスレッドで delete[] ptr; とやりました。 で、#include <crtdbg.h> を使ったところ、ptrは解放されてない、 とメモリリークが検出されました。 スレッドをまたぐメモリ確保はやっちゃだめでしょうか? それとも単にcrtdbgが解放を検出できてないだけでしょうか?
74 :
73 :2011/11/29(火) 02:02:34.01
スマポ使ったらメモリリーク無し、と出たので間違いなく自分のコードが どこかおかしいことがわかりました。ということで無視してください。
#include <crtdbg.h> #ifdef _DEBUG #define _CRTDBG_MAP_ALLOC #define new ::new( _NORMAL_BLOCK, __FILE__, __LINE__ ) #endif // _DEBUG #include <Windows.h> #include <process.h> unsigned int WINAPI thread(void *p) { int* &pp = *(int**)p; pp = new int [ 100]; _endthreadex(0); return 0; } int main() { int *p; HANDLE hThread; hThread = (HANDLE)_beginthreadex(NULL, 0, thread, (void*)&p, 0, NULL); WaitForSingleObject(hThread, INFINITE); CloseHandle(hThread); delete [] p; _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); return 0; } リークしないなぁ
ぬるぽ
がっ
環境
Windows Vista SP2 32bit
Visual C++ 2010 Express
こちらにあるようにWinHttpRequestを使用したいと思いました。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa384045 (v=vs.85).aspx
デバッグしようとしたところ下記のエラーが出て対応をしました。
・error C2872: 'IServiceProvider' : あいまいなシンボルです。
"using namespace System;" と "#include <windows.h>"
を同じ名前空間に記述することが問題だとなってましたので
"using namespace System;"をコメントアウト
・error C2653: 'WinHttp' : 識別子がクラス名でも名前空間名でもありません。
#import "winhttp.dll" named_guids
と記述してGUID型のCLSIDやIIDの定義が生成しなくてはならないとありましたので
記載
コードは次レスです。
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <objbase.h>
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "oleaut32.lib")
#import "winhttp.dll" named_guids
//using namespace System;
// IID for IWinHttpRequest.
const IID IID_IWinHttpRequest = {
0x06f29373,
0x5c5a,
0x4b54,
{0xb0, 0x25, 0x6e, 0xf1, 0xbf, 0x8a, 0xbf, 0x0e}
};
int main(array<System::String ^> ^args){
HRESULT hr;
hr = CoInitialize(NULL);
Win
Http::IWinHttpRequest * pIWinHttpRequest = NULL;
CLSID clsid;
hr = CLSIDFromProgID(L"WinHttp.WinHttpRequest.5.1", &clsid);
if (SUCCEEDED(hr)){
hr = CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,IID_IWinHttpRequest,(void **)&pIWinHttpRequest);
}
CoUninitialize();
return 0;
}
83 :
デフォルトの名無しさん :2011/12/04(日) 03:46:24.60
>>80 で忘れていましたが、
プロジェクト作成時のテンプレートは
「CLRコンソールアプリケーション」です。
CoCreateInstance呼び出しで
HRESULTのhrが【0x80004002】になってしまいます。
インターフェースがわからない??
お願いします。助けて下さい。
COMじゃない方使えよ
馬鹿には無理
86 :
81 :2011/12/04(日) 17:53:04.67
お願いします。age
ほぼ同じ環境で上のコードをコピペしてやってみたが、ふつーに通ったぞ。 なにか必要なライブラリかなにかが入ってないんじゃねーの?
88 :
デフォルトの名無しさん :2011/12/05(月) 18:30:36.09
>>87 ありがとう。そして少し聞きたい。プログラムで取得できたCLSIDとレジストリに設定されているProgID、WinHttp5.1の数値が違うのだが、
あなたは一緒でしょうか?
自分はプログラムで取得したCLSIDは「00389130-0000-0000-54EF-1C00F036C15D」でした。
hr = CLSIDFromProgID(L"WinHttp.WinHttpRequest.5.1", &clsid);
- clsid {00389130-0000-0000-54EF-1C00F036C15D} _GUID
以下レジストリをWinHTTP.dllで検索しました
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{2087c2f4-2cef-4953-a8ab-66779b670495}]
@="WinHttpRequest Component version 5.1"
[HKEY_CLASSES_ROOT\CLSID\{2087c2f4-2cef-4953-a8ab-66779b670495}\InProcServer32]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,77,00,69,00,\
6e,00,68,00,74,00,74,00,70,00,2e,00,64,00,6c,00,6c,00,00,00
"ThreadingModel"="Apartment"
[HKEY_CLASSES_ROOT\CLSID\{2087c2f4-2cef-4953-a8ab-66779b670495}\ProgID]
@="WinHttp.WinHttpRequest.5.1" ←◆ここです!!
[HKEY_CLASSES_ROOT\CLSID\{2087c2f4-2cef-4953-a8ab-66779b670495}\TypeLib]
@="{662901fc-6951-4854-9eb2-d9a2570f2b2e}"
[HKEY_CLASSES_ROOT\CLSID\{2087c2f4-2cef-4953-a8ab-66779b670495}\Version]
@="5.1"
89 :
82 :2011/12/05(月) 18:31:17.70
ちなみに最近WindowsUpdateに失敗します。
C#を1年くらいしかやったことないんだけど、 今からC++のWin32を勉強始めても何か役に立ちますかね? C#ってやっぱり重いし、デザインもモッサリしてるし、 ネイティブなC++のほうが難しそうだけど良いのかな?と思いました。 でも時代は64bitだし、VS2010EEでできるのはWin32ですよね。
IDEにEE使ってもx64バイナリを吐かせることはできる
>>88 プログラムでの CLSID の取り方なんて忘れたよ。w
コードの clsid の中身を並べてみたけど、これで良かったんだっけか?
[プログラムコードから取得したID]
2087c2f4-2cef-4953-a8ab-66779b670495
[レジストリの値]
[HKEY_CLASSES_ROOT\CLSID\{2087c2f4-2cef-4953-a8ab-66779b670495}\ProgID]
ProgID = WinHttp.WinHttpRequest.5.1
TypeLib = {662901fc-6951-4854-9eb2-d9a2570f2b2e}
Version = 5.1
‥‥ ::CLSIDFromProgID() で取得した値はレジストリの CLSID の下のノードの名前?みたいだな。おまえのも一緒だし。
>>90 C++ を自在に操れるレベルになれば、他の言語なんか怖くない。
でも大抵は C# で事足りる。十分すぎるくらい。しかも凄く簡単、ってか楽。
どこまでやるかによる。
>>92 いえ、
私は00389130-0000-0000-54EF-1C00F036C15Dです。
今.netframework4アンイントールができなくて困ってます(T_T)
これやったり
regsvr32 Softpub.dll /s
regsvr32 Wintrust.dll /s
regsvr32 Initpki.dll /s
regsvr32 Mssip32.dll /s
HotFixかけたり
修復したり
復元したり
(T_T)なみだ(T_T)なみだ
まあなんだ。頑張れ。w 逆にインストールしたら欠けてた部分が補完されて正常に、なんて都合のいいことはないか。
0x800B010B こいつなんとかし netFx_core.mzz のセキュリティ検証で落ちるぞ
これさー これやん IID_IWinHttpRequest
98 :
82 :2011/12/06(火) 00:44:55.21
>>93 レスありがとうございます。
やはり細かなところまで要求するとC++なんですよね。
でも大概はC#で事足りる。プログラミング歴1年の僕にでも「とりあえず」出来てしまいましたから。
C++も新規格が出たようですし、今から勉強始めても損は無さそうですね。
100 :
デフォルトの名無しさん :2011/12/06(火) 18:41:14.84
101 :
デフォルトの名無しさん :2011/12/06(火) 20:33:24.31
#importで定義を吐き出すとなんでヘッダーファイルと定義が違うの?
OBJ obj[15]; OBJ obj1[5]; OBJ obj2[5]; OBJ obj3[5]; とあって、objの中にobj1〜obj3を順に格納したいんですが、 ポインタを使うとどう書くんですか? ポインタがいまいち分かってません。
OBJ* obj[15]; obj[ 0 ] = &obj1[ 0 ]; (以下略) じゃないの?
104 :
片山博文MZ ◆0lBZNi.Q7evd :2011/12/08(木) 13:16:19.78
>>102 #define BAKA for(int i = 0; i < 5; i++) obj[i] = *p++;
OBJ *p;
p = obj1; BAKA
p = obj2; BAKA
p = obj3; BAKA
dllを使うプログラムをつくったのですけど、 そのdllが無くても起動してしまって、困りました。 変なパスが通っているのかと思って、環境変数の「Path」を眺めていたら、怪しいのをみつけました。 で、それを削除して実行したところ、dllがないと言われました。 あるアプリをインストールしたら、たまたま同じdllがインストールされて、それを使って動いていました。 自分で用意したdllを強制的に使うようにしたいのですけど、どうすればいいのでしょうか? 出来れば実行ファイルのサブフォルダに格納して、それを参照させたいです。出来なければ諦めます。
LoadLibrary とバージョンチェックしかないんじゃない
自分が用意したDLLならEXEと同じフォルダに置くのが一番だと思う
ファイル名とか関数名をあんまり使わないようなものにしちゃうとか。
>>107 でFA?
必ずexeの場所のdllが最初に検索される?
検索順序はちゃんと書いてあるだろ。
質問です ブラシ(Brush)の色は宣言したあとに変えることは出来るのでしょうか? Brush^ mybrush = gcnew SolidBrush(Color::Red); と宣言したのを mybrush->Color = Color::Blue; みたいなことは出来ないのでしょうか?(↑は勿論エラーになります) Penの色や線の太さを変更できるのにBrushではできないので疑問に思いました。
((SolidBrush^)mybrush)->Color = :Color::Red; では? Color プロパティは Brush クラスではなくて、SolidBrush クラスで定義されてるね。 とりあえずエラーが出たときは、その説明とか使うクラスの MSDN とかをちゃんと確認すると良いと思うぞ。
>>112 解決しました。ありがとうございます
クラスの説明のサイトを見ても良く分からなかったので今まであまり見ていませんでした;;
test
メニューバー>ビルド>ソリューションのビルド メニューバー>ビルド><プロジェクト>のビルド を常にバッチビルドにする方法ありますか? バッチビルドを開いてマウスを移動させてOKを押すのが面倒です。 Alt+BTBを覚えるのも面倒です。
改行を揃えたいときどうしたらいいですか? 変な日本語で申し訳ないのですが printf(); printf(); みたいになってしまっているとき printf(); printf(); というように左端を揃えたいです。 何かいい方法があれば教えてください。
printf(); -----printf(); ← -はスペースです みたいになってしまっているとき printf(); printf();
範囲選択して Ctrl+K Ctrl+F
VCだと「test->」とか打つと自動で一覧表示されるじゃん? でも俺が作ったライブラリでだけ表示されないんだけどなんぜ?
120 :
デフォルトの名無しさん :2011/12/30(金) 22:03:52.61
期待age
122 :
片山博文MZ ◆0lBZNi.Q7evd :2011/12/31(土) 13:08:04.10
韓国LGディスプレーの中国工場でスト、大赤字の同社に打撃
中国経済網は29日付で「ストライキの原因は年末のボーナス削減と韓国人従業員への差別的待遇に対する中国人従業員の不満だ」と報じた。
LGDの南京工場では26日から28日にかけて生産ラインが完全に停止し、関連工場にも影響が出た。
南京市経済開発区管理委員会に所属する呉主任は「今回の件はストライキでもサボタージュでもなく、工場が臨時休業しているだけ」と述べたが、
記事は「LGディスプレーは2011年、約670億円の赤字を出したことで、従来までは月給3カ月分だった年末ボーナスの支給そのものが難しくなった。
これは従業員の不満を招いたことに起因するストライキだ」と報じている。
http://news.searchina.ne.jp/disp.cgi?y=2011&d=1230&f=business_1230_116.shtml
クラスを構造体代わりに使ってるんですが、動的に作成したクラスは デストラクタで破棄しないといけないんですか?
動的にってnewを使ってってことか?
>>124 何を言っている?
デストラクタにはそのクラスが破棄されたときに必要な処理を書く。
デストラクタで破棄するわけじゃない。
>>124 何を聞きたいのかよく分からないが、
new で動的に作成したクラスを使い終わったらどうするかという話なら
delete で削除するのが正解、デストラクタは利用者が呼び出すものではない
あるクラスAのインスタンスに付随する情報をクラスBとして動的に作成した場合の、クラスBを破棄するタイミングの話なら
クラスAのデストラクタで削除するのが自然ではある
コンストラクタ内でいくつかのメンバ(ポインタ)に newで別のインスタンスを生成し デストラクタでdeleteしているのですが コンストラクタ途中で例外か例外じゃなくても new出来なかったりで中断する必要がある場合 途中まで生成していたメンバのインスタンスが デストラクタで解放されることは期待出来ますか?
>>128 コンストラクタ内で例外を発行したら、インスタンス生成は完了しないので、デストラクタも呼ばれない
以下のような感じで処理するとか、ひと工夫必要になる
class A{
X* x;
Y* y;
A(){
try{
x = y = NULL;
x = new X; y = new Y;
catch(...) {
clear();
throw;
}
}
~A(){
clear();
}
clear(){
if (x != NULL) delete x;
if (y != NULL) delete y;
}
};
ありがとう A() : x(NULL), y(NULL) { と書くのは良くないですか?
delete NULL は有効だからdelete時にNULLチェックは無駄
133 :
デフォルトの名無しさん :2012/01/04(水) 22:31:34.51
人民元暴落間近、実はマイナス成長の中国GDP
アメリカの研究者の中には、今年の中国のGDPはマイナス10%ぐらいではないかと推計する人もいます。
そもそも中国の国家統計局が出している数字は、「架空の物語」です。
全国人民代表大会で決まった成長率を覆すような数字を、地方政府が上げるはずがない。16%だの24%だの、ありえない数字を出してきます。
みんなそれを知っていますから、加減してほどよい数字を作り上げる。それが国家統計局の仕事なんです。
中国の現状からすればGDPが上がるとは思えません。個人消費は明らかに減っています。住宅はといえば6500万戸が空き家状態。
企業は設備投資どころではなく、政府の財政支出も限界に来ています。
日本の新聞もようやく中国の不動産バブル崩壊について書き始めました。しかし内容は必ずしも正しくない。
不動産価格が上海で25%、北京で20%下落したといいますが、実際には40%ぐらい下がっていると思われます。
JBPRESS
http://jbpress.ismedia.jp/articles/-/34131?page=2 世界のGDP(単位10億ドル)
1位 アメリカ 14,526.55
2位 中国 5,878.26
3位 日本 5,458.80
↓
1位 アメリカ 14,526.55
2位 日本 5,458.80
3位 中国 5290.43
135 :
デフォルトの名無しさん :2012/01/12(木) 21:32:10.22
VC++2010, SDKで開発しています。 EditBoxに関する質問なのですが、 入力が空っぽの場合には、グレー文字で入力のヒントを 表示する機能は持っていますでしょうか? MFCのCEditクラスには該当するもの(SetCueBanner)が 見つかりましたが、SDKでは自分で ゴリゴリ書くしかないのでしょうか? よろしくお願いします。
EM_SETCUEBANNER
137 :
デフォルトの名無しさん :2012/01/13(金) 00:15:17.21
>>136 ありがとうございます。
まさか名前そのままでしたか。
WM_INITDIALOGで、
SendMessage(EditBoxのハンドル指定, EM_SETCUEBANNER, 1, (LPARAM)TEXT("ヒントです"));
と書きましたが、ヒントは表示されませんでした。
OSはWin7の64bitです。
139 :
デフォルトの名無しさん :2012/01/13(金) 09:51:43.02
>>138 すみません。
コモンコントロールの使用に必要な
マニフェスト作成を忘れていただけでした。
動作確認できました。
また、ユニコードで作っています。
プロジェクトのプロパティページの"構成"に アクティブ(Debug) Debug Release すべての構成 とあります。DebugとReleaseで設定を変えるということは分かるのですが アクティブ(Debug)とすべての構成とは、何のため、どういうときに使われるものなのでしょうか? よろしくお願いします。
アクティブは今IDE上で選んでるもの。 IDE上でDebugを選んでると、アクティブはアクティブ(Debug)となり、 構成でDebugを選んでもアクティブ(Debug)を選んでも同じ。 すべての構成は、すべての構成で共通するもの。 構成がDebugとReleaseの二つしかない場合、 その二つで同じ設定になっているものは表示され、 違う設定になっているものは空の表示がされる。 どれか設定をするとDebugとReleaseの両方に同じ設定がされる。
ありがとうございます やはりそうでしたか
コンボボックス内の文字列がリソースファイルのDLGINITで設定されているVCのプログラムを見ました。 これはどのようにしたらこのやり方ができるのでしょうか。 DLGINITでググっても解説等が見つかりませんでした。 どうやらActiveXを使うことと関係があるらしいのですが。
その見たというVCのプログラムを調べりゃいいだろ
>>144 VisualStudioの使い方のことです。
>>143 VC6ではダイアログにコントロールを配置するときにコンボボックスを
右クリックしてプロパティを表示すると初期文字列を設定できるけど
VS2002以降は分からない
2010じゃMFCだとできるけど、Win32だとグレーになって入れられないな。
vs2003だとコンボボックスのプロパティの「動作」にある Dataに文字列入れたらできた。複数文字列はセミコロン区切りで。 Dataはmfcアプリのみ入力可能。
大ざっぱな質問になってしまうのですが C++で指定のswfのアニメーション流すことは可能なのでしょうか? WEBカメラで画像をチャプターし、その画像の結果で 指定のswfアニメーションを流したいと考えています。 開発環境はVC2008です。 よい方法などありましたら、アドバイスお願いします。
COM使えば
馬鹿には無理
VCで作ったアプリのハンドルリークを検出する方法は、どのようなものがありますか? deleteし忘れのときのように出力してくれると便利なのですが。
・タスクマネージャのパフォーマンスタブ ・CRT デバッグ ヒープ関数 ・市販のツール でも delete 忘れとかなら、最初の初期化と、解放後の初期化を確実にやって、 プログラムやインスタンスが終了するタイミングで、自分の持ってるポインタが NULL になっていることを 確認するのがいちばん早いと思うんだ。
失礼します。 VC++でWindowsフォームのプログラムを組んでいるのですが、 別ファイルでextern宣言したクラス(の配列)をform1.h等で参照したいのですがコンストラクタが上手く働いてくれないのか、宣言の場所が悪いのか ゴミ値ばかりで上手く動作してくれません。 何かヒントもらえませんか?
>>155 他スレでもそちらに誘導されてしまいました。。
なんかマルチみたいで申し訳ないです。
そちらで質問したいと思います。
わざわざ有難うございます。
みたいで
VC++を使い始めて2週間目です。
コンソールアプリケーションでしばらく遊んでいたのですがこの度windowsフォームアプリケーションへ挑戦することにしました。
>>8 でも出ているのですが、コンソールアプリケーションの時には自動でインデントしてくれていたのに、ウィンドウズフォームアプリケーションではインデントしてくれなかったり
this->と打っても反応がなかったりするのは64bitに非対応ということなのでしょうか?
ちなみにVBのVSでは正常に動いていたように思います。
一応再インストールはしてみたのですが効果なし、他の64bit使いの方のお話をお聞かせ下さい
this->と入力すると、ステータスバーにIntelliSense: 'C++/CLIで使用できません'と出るのですが64bitでは使えないのでしょうか
連投ごめんなさい2010ではまだ使えないのですね
このスレで言うことじゃないけど。 C++/CLI を使うんなら、ネイティブな C への橋渡しとかを考えている場合以外は C# でやった方がいいよ。
また一人犠牲者が出てしまったか
C++/CLIは半ば放置されてるからな…
1つのソリューションの中に2つのプロジェクトがあって、 Solution Project1 Project2 Project1で定義されているクラスを、Project2で使用する方法を教えていただけないでしょうか? 依存関係を設定すれば使えると思ってたんですが、ハマってしまって。。。 ヘッダーをインクルードして、クラスを実体化しようとするとエラー「LNK2019: 未解決の外部シンボル」が出てしまいます。 環境はVC2002です。よろしくお願いします。
.lib
素早いw 両プロジェクトともexeの場合ってダメなんでしたっけ? 良く考えればダメですよね。。。 もうちょっと具体的に言うと、Project1が開発アプリで、Project2がテストアプリで Project1のクラスをProject2で実体化してテストしたいんです。 良いやり方があればご教授いただきたいです。
ん、単純にProject2にソースコード追加すればいいだけですねorz すみません、お騒がせしました でもここに書き込んだら考えが整理された気がしますw もっと良いやり方ってありましたっけ?有るようでしたら教えて頂ければと思います。 どうもありがとうございました。
ん? ふつうに出来たんだが。w VisualStudio2010 の C++/CLI で以下の通り。 1. 同じソリューション内に form アプリケーション(Project:A)と クラスライブラリ(Project:B)を作成 2. Project:A で参照の追加を設定し、Project:B をプロジェクトごと参照設定する 3. Project:B に適当にクラス(ClassB)とそのメソッド(ClassB::test)を作る 4. Project:A の適当なところで、 B::Class のインスタンスを作成する 5. そのクラスのインスタンスからメソッドを呼び出す (gcnew B::Class())->test() うん。ふつーに出来た。 名前空間はちゃんと設定した? 上の例だと A とか B のことだけど。 ちなみにヘッダファイルのインクルードはやってない。 上は exe & dll だけど、マネージの実行ファイルなら exe & exe でも同じように出来る。
exeをサービスに登録して動かしているんですが、 サービスより起動しようとするとすぐに停止になってしまいます。 イベントビューアからログを見るとイベントID7034でした。 これまでは普通に起動していたんですが、 exeの中で使用しているメッセージ出力に使うファイルを、 配置してやったとたんになってしまいました。 特にこれが問題になってるとは思ってなくて、 (Visual Studio 2005でコンパイルしたexeでは問題なかったため) Visual Studio のバージョンを変えてコンパイルしたので、 何かあるのかなと思ってます。 Visual Studio 2008でサービスを起動するコーディングをする際に、 2005と違う点は何かあるんでしょうか?
>>169 アプリケーションのイベントログにエラーが出てないか?
その情報でどうしろと。w
>>170 それが7034ですね。
>>171 ですよねー。w
コーディングを載せるわけにもいかなくて、
何を載せるべきかと。。。w
わかってんじゃねーか。w それ、「プログラムは予期せず終了した」だよな。 169 だとどうとでも読めるけど、もとはサービスじゃなくて普通の exe として起動してたの? サービスとして起動したんだとしても、やることは変わらないだろ。 ・元の状態に戻して動作確認 ・元の状態で VS2010 でビルドして動作確認 ・いろんなところを削って、とにかくただ起動するだけの状態にして動作確認 ・少しずつ元の状態に戻していきつつ、どこで異常終了するようになるかを確認 最後のが確認できれば解決したも同然だろ。 もう忘れちゃってるけど、マネージならサービスプログラムとして作ってても他の実行ファイルから 簡単に中身を参照することができるから、普通のプログラムとして起動した後にすぐに そのサービスプログラムを参照する試験用プログラムを組めばデバッグも楽そうだよな。 まあ触りのない部分だけでもソースを晒してくれたら協力してやるよ。w
>>173 いえ、最初からサービスとして起動するためのexeですよ。
んで、ちゃんと起動するんですよ。
ただ。
その処理の中で、ログを吐く処理があるんですね。
そのログは設定ファイルを読み込んで、そのファイルの中の文言を吐いてるんですけど、
設定ファイルを指定のディレクトリに置いたとたん。
起動しなくなってw
そのファイルを置いてなければ動くんですが、置いたら動かない。。。
よーわからん状態w
ただ、サービスが停止するまでのログはちゃんと吐いてるんで読み込まれてないとか、
読み込みでエラーになってるわけではなさそう。。。
いや、だから。 ・単純に起動するだけ ・単純に起動するだけ & その設定ファイルを読み込むだけ の状態にしてどうなるかを確認。 これで設定ファイルを読み込むようにして不正終了するのを確認できたら犯人が確定だろ。 現状ではそう思い込んでるだけかもしれんだろーが。まずは実証確認をするべきだ。 で、ログ出力機能があるなら、最悪、全ステップの前後にログをはさんで、場所を確定。 それで解決できないならそもそもおまえじゃどうしようもないってことじゃないのか。 どういう構造かは知らんけど、素人が動くだけのプログラムを作ったのなら、 エラー時のフォローなんて入れてないんだろうから、たとえば設定ファイルが xml 形式なら 参照先のノードがなかったり、名前空間が違ってたり、文字コードが違ってたりして パーサが出してる例外を捕捉してないだけなんて事例はくさるほどある。 171 を自覚しててまだ続けるなら、ほんとうに触りのないレベルに削ったコードを晒せ。 以降はそしたら手伝ってやるよ。
>>172 7034がアプリケーションログに出てるの?
システムログじゃなくて?
まあどっちでもいいや
見るべきところがはっきりしてるのにグダグダやってるようじゃ
「お前には無理」としかいいよがない
177 :
デフォルトの名無しさん :2012/01/31(火) 18:56:00.30
Visual C++ の std::copy 関数を POD型の std::vector なんかで使うと バイナリコードでは最適化されて REP MOVSQ 命令になってくれたりしますか?
浅学でよく知らんのだが、それって関係あるのか?
179 :
177 :2012/01/31(火) 23:51:38.39
巨大な行列を扱うライブラリを書いているんですが コピー処理はアセンブラ使った方が速いのかな・・・と。
Visual Studio 2008 Pro って案外不安定。 20行程度の参考書のIF文のサンプルコードを書き込み、 デバッグで実行しただけで固まりそうになる。 VS 2010を買うべきか、VS11まで待つべきか。
買うべき VS11が出たらまた買えばいい
質問です。空のWin32プロジェクトを作成し、次のコードを入力します。 #include <Windows.h> static const CHAR str[] = "いやんばか〜ん"; static CHAR func(int x) { return str[x]; } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { return 0; } ご覧の通り、strはfunc()から参照されていますが、 func()はどこからも参照されていない状態です。 これのReleaseビルドを行うと、不要なはずの"いやんばか〜ん"が なぜかexeファイルの中に埋め込まれてしまうのですが、 これが埋め込まれないようにする方法があれば教えてください。 Visual C++の2005でも、2010 Expressでも結果は同じでした。 いずれもプロパティはデフォルトのまま使っているので、 "/OPT:REF"は有効になっているはずなのですが・・・。
#ifdef _DEBUG static const CHAR str[] = "いやんばか〜ん"; #endif
str変数は削除されてもリテラル文字列が消えるわけない どこで使われてるかわかったもんじゃないし、実行時の速度に影響するわけでもなし。
・/OPT:REF がデフォルトで設定されているって記述は見つからなかった ・「はず」じゃなくて、自分で設定して試してみた? ・VC2010 の Win32 コンソールプログラムで試した - "return str[x];" の行をそのまま -> 実行ファイルに文字列あり - "return str[x];" の行を retuen NULL; に -> 実行ファイルに文字列なし 結論 /OPT:REF を付けても実行ファイルに出力されない関数内とかを含めてどこかで参照してると 実行ファイルにその参照してるデータも出力されるっぽい。 対策案 しかたないので、使わない部分を #ifdef で囲って切り替えられるようにするとか?
お返事をいただき、ありがとうございます。
>>183 #ifdefはどうしてもという場合の最終手段ですねw
>>184 そういうものなんですかねぇ・・・。
static宣言をしていますし、少なくともそのファイル内で
参照されていなければ不要なのは明らかだと思ったのですが・・・。
ちなみにリテラル文字列ではなく配列要素を直接指定しても同じでした。
>>185 すみません、言い方が悪かったです。プロジェクト作成直後の
Releaseビルドの設定は/OPT:REFになっているので、
参照されない関数やデータは削除される「はず」という意味でした。
その後、いろいろ試してみたところ次のことが分かりました。(いずれも2010 Express)
・exeに埋め込まれているのはデータのみで、関数本体は削除されている。
・constを外してもやはりデータは残る(セクションの位置は移動する)。
・データを関数の外ではなく、関数内で直接定義すればデータも削除される。
・複数の関数から同じデータを参照する場合でも、それぞれの関数内で定義すれば
不要であればデータは削除されるし、必要な場合でも1つにまとめられる。
というわけで、たとえ同じデータであっても関数の外には出さずに、
各関数内で定義することでこちらが望む動作になるようです。
とりあえずこれで何とかなりそうです。どうもありがとうございました。
visual studio c++ 上でlibjpegを使ってBMPからJPEG画像として保存 しようと頑張っているのですが、どうしてもjpeg_create_compressで落ちてしまいます。 struct jpeg_compress_struct comp; struct jpeg_error_mgr jerr; comp.err = jpeg_std_error(&jerr); jpeg_create_compress(&comp); ←ここでおちます;;
GDI+でも使えば?
gdiplusを使ってできました。ありがとうございます。
Visual C++ 2008 Express Editionを使っています。 hとかcppファイルは関連付けられていてvisualstudioで開くでのですが、 これらを他のツールから開くときにコマンドラインパラメータ等で行数を指定したりできますか? 開いた瞬間に指定行に移動するようにしたいのですが。
>>190 そのツールにそういう機能があるかどうか、による。
>>191 すいません、書き方が悪かったです。
他のツールからVCExpress.exeを指定してVCExpress.exeで開くという意味です。
どうもググってみましたがそういうスイッチは見当たらないようですね。
UWSCから起動&操作するとか
Lや_T()マクロを使わずに文字列をそのままUnicodeのものとして扱いたいのですが、方法はありますか?
VC++2008で、「デバッグ開始」でコンソールプログラムを実行すると、 最後まで処理した後、勝手にコンソール画面を閉じて終了してしまいますが、 「デバッグなしで開始」で実行すると、コンソール画面を表示したままにしてくれます。 このような違いはなぜ起こるのでしょうか? 「デバッグ開始」のこの仕様は不便に思うのですが、 そのようにしてまで大事なことが他にあるのでしょうか?
それはマイクロソフトの技術者に聞いてくれとしか。 似たような疑問はたくさんあるみたいだから、ぐーぐる先生に質問してみるとか。 if ( ::IsDebuggerPresent() ) system("pause"); みたいなコードを勝手に付けてるんじゃない?
>>196 デバッグしてるのに、終了まで流すのは普通ありえないから
199 :
196 :2012/02/19(日) 15:10:27.22
>>197 調べてみたんですが、最後止まらずに終わってしまう理由については分かりませんでした。
>>198 なるほど、そういう前提での仕組みですね。
ありがとうございました
三日前にVisual C++2010をDLした超初心者です。 1.ラベルと変数を3つずつ(時間、分、秒)用意 2.ボタンを押すとタイマー(intervalは1000=1秒)が起動 3.イベントが発生する度に「秒」の変数を+1する 4.「秒」の変数が59以上になったら「秒」の変数に0を代入して「分」の変数を+1する。分→時間も同様 Windowsフォームアプリケーションのテンプレートから、上のようなタイマーをつくろうとして、 自分が他のタイマーツールと比較した時はズレはなかったのですが、 他の人が試したところ、1分経つ毎に1秒ズレているようなんです。 これはSystem.Windows.Forms::Timer(?)が何かに依存していてダメなんでしょうか? それともそんなことはなく、文に問題があるのでしょうか?
>>200 現在時間をタイマーに依存するのがダメ、そこまでの精度はない
タイマーイベントの中で現在の時刻を都度取得すればいい
現在時刻とか取得できるんですね・・・ つまり 1.変数:時間、分、秒、基準時刻を用意 2.タイマーを起動するボタンを押した時の現在時刻を取得、変数:基準時刻に代入 3.タイマーイベント内で現在時刻を取得、基準時刻と現在時刻の相対時刻を取得。変数:時間、分、秒に代入 4.現在時刻を変数:基準時刻に代入 こんな感じにすれば一時停止にも対応出来るって感じですかね なんとなくつかめました、ありがとうございます
>>203 宿題スレに行くべきだね
完全力技でなく、map などを使って
1. 一旦素因数分解して、素因数分解の結果から解を求める
2. 素因数への分解仮定で、すでに計算結果の出てるものは再利用する
とかやればいくらか早くなりそうな感じはするけど
205 :
204 :2012/02/26(日) 02:13:52.34
>>203 失礼、見直したら宿題というわけではないのか
Visual C++でもない気がするけどどのスレなのか分からないから答えておくと
以下の2点だけでそれなりに改善できそうな気がする (
>>204 は考えてみたら面倒な割にコストが微妙そうだった)
1. 除算するとき、除数と商は対になるはずなので、計算は半分で良い
20の約数(1,2,4,5,10,20)なら
20/4が割り切れた時点で、4と5の両方が求められる
2. sqrt(sum)で除数と商が等しい状態になる、それ以上は計算しなくてよい
具体的には
sum2 = sum >> 1;
for(int idx = 3; idx < sum2; idx++){
を
int sum2 = int(sqrt((double)sum));
for(int idx = 3; idx < sum2; idx++){
として、
if (!(sum % idx)) {count++;}
を
if (!(sum % idx)) {
count++;
int div = sum / idx;
if (div != idx) {count++;} //除数と商が等しい場合を除き、対としてカウントする
}
とする
あと、数値が連続なら特定以上の約数を持つ最小の数値が2で割り切れるのは確実と思うけど、
対象が連続でないので、偶数であることは保証されないと考えるほうが安全と思う
>>205 なるほど!
約数を根本的に考えればそうなりますね!
そんなことにも気づかないなんてばかでした・・・。
それと、
if (!(sum % idx)) {count++;}
を
if (!(sum % idx)) {
count++;
int div = sum / idx;
if (div != idx) {count++;} //除数と商が等しい場合を除き、対としてカウントする
}
とする
のところは、
for(int idx = 3; idx < sum2; idx++){
if(!(sum % idx)){
count += 2;
}
}
if(idx == sum2){
count--;
}
とした方が若干速いと思います。
ありがとうございました!
207 :
デフォルトの名無しさん :2012/03/10(土) 21:55:24.62
練習としてフォームに線を引くプログラムを書いています フォーム上にあるButtunを押すとフォーム上に線が出てくるようにしたいです。 んでそれは完成しました。 以下、質問です。 クラスウィザードを使って描画クラス(Draw.hとDraw.cpp)を作り、 描画オブジェクトを分離しようとしました。 しかし、Draw.hからFormに線を引くオブジェクトを作成する方法が分かりません。 フォーム上のボタンに書き込んだ Graphics^ gr2 = this->CreateGraphics(); のthisの部分を System::Windows::Formsに書き換えるだけじゃ駄目なんですか? ちょっと分かりにくい質問ですがどなたか回答いただけると幸いです
ageてしまいましたすみません
駄目
これってアセンブリコード吐けるの?
そりゃはける
ゲロゲロ
>>207 そのレベルでC++/CLIは無駄な気がする。
FormやりたきゃC#、C++やりたきゃCLIじゃないほう
両方同時にやってもC++/CLIやるよりまし。
>>207 基本的に上に同じなんだが。
やり方の方ね。
そりゃダメだろ。コンパイルも通らないんじゃないの?
是非はともかく、一番簡単な方法は form のクラスに this->CreateGraphics(); を返すメソッドなりを作って、
Draw.cpp の方でそれを受け取って描けばいいんじゃね?
質問なのですが、出力タブに特定の警告を出さないようにすることはできないでしょうか? 具体的には、 「'BOOL' : ブール値を 'true' または 'false' に強制的に設定します」という 警告が大量に出てきて本当にエラーが出ているところが分からなくなるので、 なるべくソースコードは変更せず警告を消す方法が無いかを探しています。 何とかならないでしょうか
すいません。 VisualC++2008ExpressEditionを使用しています。
#pragma disable でなんとかなるか、、、 typedefで定義しちゃうとか
#pragma warning(disable:xxxx) だったな。
上手くいきました! 先生方あざ〜す。
てーか、それ最後の手段だと思うんだが。 BOOL a = TRUE; bool b = a; とかやってんだろ? だったら、 bool c = ( a != FALSE ); とかって書き直してやれば済むじゃん。
配列の中身が重複してるかどうか調べるには #include<string>を使えばいいんですかね? 具体的に言えば、 array[0] = 1 array[1] = 2 array[2] = 3 array[3] = 1 array[4] = 2 array[5] = 3 となっているときに、 array[0]~array[2]までを連結させた数字(123)と、 array[3]~array[5]までを連結させた数字とが等しいですね って出力してくれる関数を探してます。 find()とか使うといいのかなと考えてたんですが、 文字列にしか使えないって書いてあるので、 配列自体に簡単に使える関数はありますか?
ないよ 自分で作るしかない
>>223 わかりました。
ありがとうございます。
C言語の配列ならメモリ的にも連続だから、比べる配列サイズが等しいなら、 memcmp(&array[0], &array[3], sizeof(array[0])*3) とかで代用できそう
VC2008が最近頻繁にバグります。 命令には全く書いていない変数を勝手にインクリメントするのでマジうざいです。 そのプロジェクトを削除してソースコードだけ新規プロジェクトに移植すると直ります。 これはどうしてなんでしょうか?
vc2010を入れる
コード書いてないのにグローバル変数の内容が勝手に変わるのはなぜなんですか? 内容が変わる位置は特定してるんですが、手の出しようがありません。
デバッグ->ブレークポイントの作成->データブレークポイント で値が変更されたときに止まるから調べてみ
>>229 ある配列の値が変更された際に、変更した分だけグローバル変数の値が変わるようです。
もちろん配列にセットしているわけじゃありません。
変数名で全文検索しましたが、明示的に指示してはいませんでした。
スコープを考えてもそれは考えにいです。
アドレスかぶってんだろ、自分でいれたバグかと
ポインタを理解していない人のコードって怖いよね
理解してても実際管理しようと思ったら死ぬる
GUI付きのプログラム作るときって GUIから作るのかデータ構造から作るのかどっちなの?
どっちから先に作ってもいいがな(´・ω・`) 経験的には顧客に見せるためにGUIが先に出来上がるケースが多いが しかし作ること自体は同時進行(´・ω・`)
M作って V作りながらVM作る
BOOL CStudioView::PreCreateWindow(CREATESTRUCT& cs) { if (!CWnd::PreCreateWindow(cs)) return FALSE; cs.lpszClass = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS, ::LoadCursor(NULL, IDC_ARROW), (HBRUSH)::GetStockObject(LTGRAY_BRUSH), NULL); return TRUE; }
BOOL CStudioView::PreCreateWindow(CREATESTRUCT& cs) { BOOL bool1 = CWnd::PreCreateWindow(cs); if (!bool1) return FALSE; UINT nClassStyle = (UINT)(CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS); /* WINUSERAPI */ HCURSOR /* WINAPI */ hCursor = ::LoadCursor(NULL, IDC_ARROW); /* WINGDIAPI */ HGDIOBJ /* WINAPI */ hGDIObj = ::GetStockObject(LTGRAY_BRUSH); HBRUSH hbrBackground = (HBRUSH)hGDIObj; cs.lpszClass = AfxRegisterWndClass(nClassStyle, hCursor, hbrBackground, NULL); return TRUE; }
普通の人は
>>237 のようにコード書く人が多数のようだが、
>>238 のようにコードを書くのは異常かいな。
そんなことないと思うけど。 自分も程度の差はあるけど 237 ダイレクトな書き方はあんまりしない。
だって、bool1にしてもnClassStyleにしてもhbrBackgroundにしてもたった一回しか使ってないじゃない 変数の準備と書き込みと破棄の3つの動作がまるまる無駄になってる この関数が1秒間に何回も呼び出されるようなシロモノだとパフォーマンスにクリティカルなダメージが出る といっても、コンパイラが潰してくれるかな^^
PODの生成破壊なんてダメージほぼないだろ。
VCで自作DLLを勉強しています。
Test.dllでCTestClsクラスを __declspecエクスポートし、これを同じくVC側のEXEで使用すると、
実行時に「プロシージャエントリポイント ??1CTestCls@@UAE@XZがダイナミックリンクライブラリTest.dllから見つかりませんでした」
というエラーが出て終了します。DLL、EXEともにビルドは通っています。
ttp://www.kab-studio.biz/Programing/Codian/DLL_Hook_SClass/05.html を完全に再現する手順を踏んでいます。
EXEのコードはMFC Appウィザードから作ったスケルトンにCTestClsを宣言を追加し
BOOL CWindowtestApp::InitInstance()
{
:
CTestCls test;
}
のみ。CTestClsはメソッド、メンバ変数のない空クラスにしています。
ちなみに、Test.dllで同様にエクスポートした関数は正常に動作します。
原因と対処法を教えてください。
環境
OS:Windows Vista Home
IDE:Visual Studio 6.0 SP2
test.dllが他にもあるんじゃないか
245 :
243 :2012/04/30(月) 21:05:36.55
>>244 ありがとうございます。
書き忘れましたので追加します。
ビルド構成はdebugでプロジェクトからF5実行してテストしています。
レスを頂く前に、プロジェクトフォルダに置いたtest.dllをdebugフォルダにコピーして
deubgフォルダのexeを起動したら正常動作し、
何の気なしに再度プロジェクトを走らせたらエラーは消えました。
なので、原因は同名DLLが複数あることではなかったと想像します。
次に、動作の異なるtest.dllを作ってそれぞれに配置するとdeubgフォルダの方が動くようですが、
debugフォルダのDLLを削除したり名前を変更するとプロジェクトフォルダのDLLが適用されます。
逆にプロジェクトフォルダのDLLを削除したらdebugフォルダのtest.dllが動きます。
現状がこのように変わりましたので、エラーの原因が未だ不明ですし、
VSがdebug→プロジェクトフォルダと上位に向かってDLL検索してるのも気持ち悪いです。
デフォでプロジェクトフォルダが作業フォルダになるから当たり前だろ
247 :
243 :2012/04/30(月) 21:27:03.02
>>246 それなら同名DLLが両方にあった場合にdebugフォルダの方が動くのはおかしいですよね。
とりあえず優先順位についてはこっちでどうこう言ってもしょうがないのでそれと憶えれば解決しますが、
エラーメッセージの原因が知りたいです。
要するにtest.dllが複数バージョンあったことが原因だろ
249 :
243 :2012/04/30(月) 22:16:02.72
>>248 >>245 で書いたように、現在は複数あってもエラーが出ないから原因はそれではないだろうと考えているのです。
昔は複数あったことでエラーになったと仮定して、今は複数あって正常ならその差はなんですか、ということです。
プロジェクトやIDEの設定は変更していません。
バージョンを分けたのは、どっちのフォルダに置いても動くので優先順位を確認するためにしたという
手順によるもので、エラーが出ていた時に複数バージョンあったわけではありません。
>>247 エラーメッセージの原因って
>??1CTestCls@@UAE@XZがダイナミックリンクライブラリTest.dllから見つかりませんでした
って、いってるんだから、原因はそれでしょ
あとはどう調査するかで、Test.dllで公開してる名前の一覧を
> dumpbin /exports test.dll
で確認してみるとか
仮にdllが正しかったとしても、ビルド時の.libファイルが古かった可能性もあるかもしれん
その場合はexe側のimport情報も出力して付き合わせてみるとか
あと、dllの検索順は
1. 実行ファイル(exe)が存在するディレクトリ
2. windowsシステムディレクトリとか
3. カレントディレクトリ
4. 環境変数 PATH に設定されてたディレクトリ
みたいになるので、debugフォルダ=>プロジェクトフォルダは別に上位に向かってdll検索するわけではなく、フォルダ検索の優先順位があるだけの話
よくわからなくて質問してるはずなのに246のアドバイスをおかしいとか断言するのはどうかと思う
>昔は複数あったことでエラーになったと仮定して、今は複数あって正常ならその差はなんですか、ということです。 うわがきしてるじゃねーか
252 :
243 :2012/04/30(月) 23:13:21.01
>>250 「エントリポイントが見つからない」というメッセージから、
直接の原因がそれだという程度の想像はつきます。見つからない原因が分らないという意味でした。
>よくわからなくて質問してるはずなのに246のアドバイスをおかしいとか断言するのはどうかと思う
>>246 さんの言うとおりプロジェクトフォルダがデフォルトなら、
他のものが優先されるのが「当たり前」というのは筋が通らないと思いませんか?
デフォルトに優先するものがあるなら、優先順位を決定する設定値があるか、
そもそもデフォルトがプロジェクトフォルダではないと考えるのが正当ではないかと思った次第です。
検索順については副次的な疑問だったのですが、丁寧にありがとうございます。
もう一度最初から作り直してエラーを再現させてから、教えて頂いた方法で探ってみます。
ありがとうございました。
253 :
デフォルトの名無しさん :2012/04/30(月) 23:21:16.52
元々古いバージョンがロードされたままだったんじゃね?
254 :
243 :2012/04/30(月) 23:38:02.45
>>251 二つのフォルダに完全に同一のDLLファイルがあり、その片方にさらに同一のものをコピーして
ファイルに差分は無くとも「上書きした」という情報を得てエラーを解消するということがあるということですか?
単にオペレーションの差という点でのご指摘であれば、そもそもdebugフォルダに
test.dllがあったかどうかは憶えていないので、上書きかどうかは不明です。
255 :
243 :2012/04/30(月) 23:54:14.06
>>253 エラーが出なくなった時点ではバージョンはひとつでした。
時系列では以下のようになります。
0.DLLビルド(debug構成の出力のみ。以下同様)、EXEプロジェクト作成(libファイルのフォルダ指定はDLLプロジェクトのdebugフォルダ)
1.EXEプロジェクト実行→エラー(エントリポイントが見つかりません)
2.EXEプロジェクトフォルダのdllをdebugフォルダにコピーしてdeubgフォルダのexe起動→正常
3.EXEプロジェクト実行→正常
4.なぜEXEプロジェクトが正常動作するようになったのか不明なため、片方のフォルダからdllを削除したり
バージョンを分けて両方のフォルダにバージョン違いのdllを配置して優先順位の検証
そんなこと有り得ないというのであれば、私の記憶違いがあると思います。
アドバイスを下さった皆様ありがとうございます。
これらを元に0からチェック項目を作ってやり直してみます。
>>252 優先順位はちゃんとドキュメントに書かれてるだろ
あたりまえなの
プロジェクトフォルダ(カレント)がデフォだと言ってる奴が間違ってるんだろ。
258 :
デフォルトの名無しさん :2012/05/01(火) 14:07:46.60
Windows95/98に対応しているVC環境教えてください。2003.NETあたりまでなら使用できそうですか?
>>246 がおかしいな。
実行モジュールがある場所がデフォだからdebugフォルダが優先されるのは当たり前、
と書くべきなのに、
「プロジェクトフォルダがデフォだからdebugフォルダが優先されるのは当たり前」
というのが滅茶苦茶。
2010 でも可能
261 :
デフォルトの名無しさん :2012/05/01(火) 14:15:01.04
>>260 マジか? Win95/98でも2010使えるのか(めっちゃ重そうだけど)。
ということはexpressが使えるわけか。正直インストールできるか不安だけど。
>>259 作業フォルダのデフォルトがプロジェクトフォルダだって書いてるだけだろ
別に言ってることはおかしくない
それに優先に関しては言及してない
>>262 優先順位について言及してなければ
>>246 の主語・主節はなんだ?
何が当たり前なんだ? それは文章としておかしいぞ。
つーか、デフォルトの作業フォルダはexeの出力先だろ。
>>263 >debugフォルダのDLLを削除したり名前を変更するとプロジェクトフォルダのDLLが適用されます。
ここだろ
>つーか、デフォルトの作業フォルダはexeの出力先だろ。
違うよ
〜.vcxprojがあるフォルダが作業フォルダになる
>>264 お前頭おかしいんじゃないの?
>debugフォルダのDLLを削除したり名前を変更するとプロジェクトフォルダのDLLが適用されます。
「当たり前」の主語が↑ということは間接的に優先順位に言及してるんだけど。
しかもなんで書いた本人にしか分らない主語を省略してるんだよwww
配列の添え字に負の数や、制限を超えた時に 動作時、VBのようにエラーでとめるような手法はありますか? int a[10]; int b ; // OK b = 5; a[b] = 3; // NG b = -1; a[b] = 3; // NG b = 15; a[b] = 3; Cの場合普通に動いてしまい、 メモリリークした値をそのまま使い続け とまるときととまらないときがあって困っています。
std::vectorを使う
ASSERT( sizeof( a ) / sizeof( aの型 ) > b ); とか出来なかったっけ。
std::vectorもいいが、std::arrayも使える。 // #include <array> std::array<int, 10> a; // VC++ 2008だとstd::tr1::arrayだったはず。 int b; b = 15; a.at(b) = 3; a[b] = 3;とも書ける。ただし、この場合、チェックされるのはデバッグビルドのときだけ。
古い環境には<array>はないようだな。
後者
なるほど、ありがとうございます
VC++でGUIの作り方がさっぱりわかりません。 コントロールがVC#やVB.NETと比べると段ちだし・・・ やりたいことは、listとtreeを結合したようなVS2010のウォッチウィンドウを 作りたい
codepadあたりにそんなのあった気がする
馬鹿には無理
WindowsでWindowsっぽいGUIやりたいならC#使えば? どうせアマチュアでしょ?
アマチュアって? 仕事以外でそんなことするほど、暇じゃないし。 ヲタでもありません。
作りたいんじゃないのか
>>281 好き好んで作りたいわけでない
作らざるを得ない
仕事なら自分でやれ アマチュアなら教えてやったんだがな
なんでそんなにエラそうなんだよ。w 揚げ足取りをすると、自分で「作りたい」って書いてるし。 で、そんなこたどうでもいいんだが、結局どうして欲しいんだよ。 技術者の端くれなら、その程度の説明くらいはちゃんとしろ。
287 :
デフォルトの名無しさん :2012/05/19(土) 15:59:31.16
>>274 リソーススクリプトを覚えれば自由自在にGUIを作れるよ
MSDNの英語版に詳しく載ってるから勉強してみたら
------ ビルド開始: プロジェクト: testtttt, 構成: Release Win32 ------ printf.c printf.c(1): fatal error C1083: include ファイルを開けません。'stdio.h': No such file or directory ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== このエラーにはどうすればいいのでしょうか サンプルを使っている為ソースコードには問題ないのでしょうが・・・ WinXP
289 :
288 :2012/05/20(日) 05:26:59.12
すいません 途中送信してしまいした WinXP SP3 VC2010です よろしくお願いします
プロジェクトを作り直してプリコンパイル済みヘッダを使用しないにチェック入れろ
2010のEEですけどインテリセンスと自動構文チェック無いんですか? C#から手を広げてみたらIDEまで扱い辛い・・・
c#は馬鹿でも使える、っていうか、馬鹿に使ってもらおうとしてるものだから仕方ないよ ネイティブが生成できないから、c#で作ってもなんの役にも立たんがw
C#アプリの起動があまりにも遅いんで、VC+++MFCに乗り換えようと思ってるのですが ものすごく壁が高い・・・ まったくGUIが作成できないんですが、VC+++MFCってGUIを作成するものじゃなくて、 ビジネスロジックだけを記述するものとしての扱いなのでしょうか?
リソースエディタ使えよ
VC++はぜんぜんVisualじゃないからなー。 っていうかリソースエディタなんてまどろ☆コシイもの使わないで 自前でCreateWindowしようず
馬鹿には無理
>>293 .NETFrameworkの中にFormアプリのパーツが入ってんでしょ
VC が Visual じゃないとか、幸せな世代だよな。。。 おっさん言われることを承知で書いてみる。 自分の場合は、敢えてテキストエディタで GUI 部分書いたり、Windows API だけで書いたりして遊んでたんだがな。
簡単なものなら、そうだろうな 3DSMAXのようなGUIを作ろうとすると、かなり苦労するよ
むしろおっさんこそ、VCは全然Visualじゃなかったって想い出すねぇ。 単にリソースを手書きしないですむだけだったVC++4に対して、 ポトペタのDelphiやVisual Cafe(ただし不安定w)やVB4が全盛だったから。 なつかしす。
2.0までは全然Visualじゃなかったなw
302 :
片山博文MZボット ◆0lBZNi.Q7evd :2012/05/30(水) 11:17:09.67
>>293 アプリを常時起動しておいて、PCを使わないときはアプリを起動したまま、
休止状態にする。休止状態にするには、終了オプションでHを押す。
GUIの話題が出てたので一言 「男は黙ってリソーススクリプト」
アニメといえば米国製が主流だったインドで、日本アニメのファンが急増している。さまざまな作品が衛星テレビで放送され、
日本政府による積極的なPRも奏功。若者の心をとらえ、西部ムンバイでは愛好会の活動も本格化している。
「ストーリーが奥深く、登場人物に感情移入しやすい。シリアスな展開の中に笑いがあるなど、飽きが来ない構成も魅力」
アニメファンが集う「ムンバイ・アニメ・クラブ」会長のラチタ・サハさん(23)が日本アニメの魅力を説く。
同クラブは2010年に約10人で発足し、今では会員数が1000人を超える。月1回の会合では、
アニメソングのカラオケや、アニメの登場人物に似せた衣装を着用する「コスプレ」も楽しむ。
インドでは今秋から、国民的球技クリケット版「巨人の星」の放送が決まっているが、関心はまだ低く、
視聴可能な「クレヨンしんちゃん」などのほか、日本でも話題の「ONE PIECE(ワンピース)」が人気だ。
「作品からあふれ出る日本文化に興味がある」(サハさん)。他国のアニメに比べて緻密に表現された日本の街並みなどの描写や、高度な映像技法などへの評価も高い。
日本の経済産業省が3月にムンバイで開いた日本アニメなどを紹介する見本市は好評だった。
アニメソングを熱唱したメンバーのミニスカートのコスプレ姿は、全身を包む女性の伝統衣装サリーが一般的な同国の観衆の目をくぎ付けにした。
ファン層は確実に広がりつつあるが、インドでは新作DVDなどの入手が難しいのも現実だ。
「もっと手軽にアニメ関連商品が手に入るようになれば」とサハさんは期待している。
http://www.sankeibiz.jp/macro/news/120530/mcb1205300502005-n1.htm
なんでこのレベルの奴がこの板にいんだよ年々レベル下がってるじゃねーか死ね
305 :デフォルトの名無しさん:2012/05/31(木) 15:24:53.13 305 :デフォルトの名無しさん:2012/05/31(木) 15:24:53.13 305 :デフォルトの名無しさん:2012/05/31(木) 15:24:53.13 305 :デフォルトの名無しさん:2012/05/31(木) 15:24:53.13 305 :デフォルトの名無しさん:2012/05/31(木) 15:24:53.13
307 :
デフォルトの名無しさん :2012/06/01(金) 21:36:04.50
どいつもこいつも遠い目をしやがって。 お前たちの時代は終わった
>>303 真の男は黙ってCreateWindow
VC++ってダイアログじゃなきゃ、コントロールを貼り付けたりできないの?
はい
どんなコントロールを貼り付けるつもりなんだ。 ウィンドウの一種としてのコントロールなら、やりようはあったんじゃなかったっけ。
貼るだけなら出きる イベントとかデータ受け渡しとか面倒なだけ
プログラミングWindowsを読むんだ。 コントロールもWindowであり もちろんダイアログもWindowsなので 結果として、コントロールはありとあらゆる場所に描画できる。
誤:もちろんダイアログもWindowsなので 正:もちろんダイアログもWindowなので
>>313 しょぼいコントロールしかCreateWindowできないようですが?
C#にあるような、グリッドコントール(チェック、コンボ等あるやつ)を貼り付けたいです。
コモンコントロールにそんな高度な機能を期待するもんじゃない codepadあたりから探してくるか自分で作るしかない
リッチなコントロールをポトペタしたいなら、VC++という選択肢自体がありえんよ… C#にあるようなリッチなコントロールの一部はMFCにもないからな。
VC++MFCは、本格的なアプリの作成には向かないのでしょうか?
「本格的」がせいぜいパンツレスリング程度のいみならMFCは向いているよ。
なんでも出来るよ。ある意味最強。 ただし作る人の腕による。
日本のサイトは大抵おんなじことばっかですよね listctrlやtreectrlの使い方とかばっか、そんなのMSDN見れば誰でもわかるっての listctrlを改造して、セルにコンボボックスやプログレスバーやスライダやツリーを合体させた コントロールの作り方なんて全くない・・・ 英語が苦手じゃなかったらな〜
リストコントロールのセルにプログレスバーとかスライダとかツリーとか合体させんの? イメージ出来んが。w 真面目に。 リストコントロールや Microsoft FlexGrid Control とかにコンボボックス貼り付けて入力可能にしたり、の 複数コントロールをまとめてひとつのコントロールに見せるな程度のことなら昔作ってたぜ。 その「大抵おんなじことばっか」の日本語サイトを参考にしつつ。 おまえって 309 ? だったら足りないのはサイトじゃなくておまえの情報収集能力だよ。 つまんない言い訳してないでとっととやれよ。
>>321 そんなコントロールの使い道があるのか?w
まぁ、大抵おんなじことばっかですよね ってのは当たらずとも遠からず どのHPも、本にのってるサンプルプログラムを書いているだけのが多い VC++で最初に躓くところだろうな。 通り一辺倒のアプリはすぐ作れるようになるけど、ちょっと変わった要求がきたら とたんに、どこをどういじればいいかわからなくなる。
それは素振りもせずにいきなり試合をするような入門書ばっかり読んでるからじゃないか? プログラミングWindowsみたいに、基礎からしっかり教えてくれる本なら、 どんな要求にも答えられる実力がつく。
プログラミングWindows を読んだことがあるのか? 当たり前のことしか書いてないぞ 何が名著なのかさっぱり???
WindowsnのしくみとC++の仕様とVCの環境の知識は別だからなー 最近だと.NET FrameworkとC#とかもごっちゃになってるね
VC プログラミングでもっとも参考になったのは MFC の中身だったな。結局。 初心者には敷居が高すぎる気もするが。
当たり前のことすら理解しないで、いきなりポトペタやろうとするから躓くんだよ。 プログラミンWindowsはその当たり前を懇切丁寧に教えてくれる。 世界が認める名著なんだから、それが名著でないと思えるなら、 おまえはよっぽどの天才か、よっぽどのアホか、どっちかだw
>>329 Windowsでプログラムを作ってる人なら誰でも知ってることばっかだぞ
まぁ、VBやC#みたいな似非なら目からうろこだろうな
だから俺は最初から「プログラミングWindowsみたいに、基礎からしっかり教えてくれる本」と書いてるじゃないか。 基礎なんだから、「Windowsでプログラムを作ってる人なら誰でも知ってることばっか」 に決まってるだろ。何をいいたいんだ、おまえはw
だったら、「Windowsでプログラムを作ってる人なら誰でも知ってることばっか」 と指摘されて なにを、顔真っ赤にしてんの? 何をいいたいんだ、おまえはw
>プログラミングWindows >を読んだことがあるのか? >当たり前のことしか書いてないぞ >何が名著なのかさっぱり??? だめだ、こいつはw アホだったよ。
↑ キチガイ?
なんでオマエらって質問そっちのけでケンカ始めるんだよ。 コミュ障を自慢して嬉しいのか。
PGスレは他に取り得の無いニートが多いからね
http://news.searchina.ne.jp/disp.cgi?y=2012&d=0605&f=national_0605_024.shtml 韓国テレビの番組で日本海表記の地図を使用し、非難殺到=韓国
韓国MBC放送の日曜番組『出発! ビデオ旅行』の3日の放送で、「日本海」と表記
した地図を使用していたとして、韓国世論から非難が巻き起こった。多数の韓国メディアが4日、大きく取り上げた。
『出発! ビデオ旅行』は新作映画の紹介から名作など、さまざまなジャンルの映画を
紹介する番組。3日の放送で日本海が「SEA OF JAPAN」と表記された世界地図を
使用したという。
番組放送後に視聴者掲示板には、抗議や非難の書き込みが殺到した。番組の制作陣は
世論の非難を受けた当日、公式サイトに謝罪文を掲載し「今後はこのようなミスを絶対に
しないように最善を尽くす」との立場を表明した。しかし、同番組の5月6日の放送分で
も日本海と表記された地図を使用したことが発覚し、番組やテレビ局への非難はしばらく続く見通しだ。
韓国メディアは「目を疑う場面が電波に乗った」「東海ではなく日本海と表記した地図
を使用して視聴者の怒りを買った」などと伝えた。現在MBC放送は2月から突入した
ストライキがまた続いており番組に支障をもたらしていることも「ミス」の原因とみるメディアもある。
他人をキチガイ認定する奴もキチガイ
矛盾
自己表現ではあるが矛盾ではないだろう
char* word[] と char *word[] でポインタの位置が違うのですが、これには違いがあるんですか?
馬鹿には無理
>>341 とりあえず他人様に理解していただけるように書き直せ。
>>341 *の前後のスペースはあってもなくても良い
つまりどっちも一緒
>>344 理解してやれよ
char * word[] でもいいし
ありがとうございましたm()m
1000 :uy ◆xVOGOO9ev6 :2012/06/23(土) 12:35:29.68 俺は動的言語の問題点をいくつあげてもwwwww 静的言語よりはマシだと確信してるわwwwwwwwwwwwwwwwww 静的言語の問題点をなぜ挙げないかって?? 見放してるから、問題点を指摘さえしないってことだよwwwwwwwwwww 気づけバカwwwwwwwwwwwwwww
余計なモンを引き込むなよ。
351 :
デフォルトの名無しさん :2012/06/27(水) 23:35:49.89
Visual C++ 2010ExpressとResEditでプログラムを作成しています。 OSはWindows7 homeです。 ResEditでのボタンのグラフィックは グラデーションのかかったVB2010で作った時と同じ形のボタンなのですが Visual C++からCreateDialogParamでこのリソースを呼び出すと 四角いXPのときのようなグラフィックのボタンになってしまいます。 他のコントローラもXPのようなかくばった感じのグラフィックになってしまいます。 機能は問題ないのですが、VB2010でつくったボタンのようにみせたいのですが 原因わかりましたら教えてください。
.manifest作れ
x XPのような o 2000のような でした すみません
プラプラ
Expressを2008と2010の両方入れて見たんだけど メンバに対してじゃなく、1文字目から自動的にインテリセンスがポップする"IntelliSense Everywhere" って機能は体験版には付いていないでしょうか? 一応ctrl+スペースで強制的に起動はできるけど、オプションに自動で起動しそうな項目はなかったし ヤフーでしらべると怪しげなパッチばかりヒットする・・・
VC初心者です(MFCダイアログでちょこっと遊んだ程度) 既存のC言語で書かれているプログラムを、Windows上で実行しようとしています。 C言語で書かれているプログラムはGUIで、大きく分けて、実際に処理が書かれているファイル(ソース)と、 線や枠などの図形の(視覚的な)情報が書かれているファイルの2種類です。 質問:既存のファイルを使って作成したいのですが、新規プロジェクト作成で、プロジェクトの種類は何で作り始めれば良いでしょうか? いろいろネットで調べてみたところ、最終的に作りたい形はSDIで複数ビューがある感じが一番近いと思いました。 環境 Visual C++ 6.0 Windows XP(そのうちWindows7予定)
つ CreateViewsByUsingOldFileOnNewProject
359 :
デフォルトの名無しさん :2012/07/07(土) 21:05:50.46
CString c(_T("あ")); TRACE(_T("%s\n"), c); _CrtDbgReport: String too long or IO Error_CrtDbgReport とエラーが出力されます 「あ」と表示をを期待しているのですが、どうすればいいの?
OutputDebugString(c); じゃダメかしらん?
ロケール設定しろ
ロケール設定のやり方がわかりません
::setlocale(LC_ALL, ""); じゃダメかしらん? あるいは Japanese_Japan.932
OKでした、ありがとうございます。
>>360 さんのやりかたでもOKでした。
ここで質問するのが適切なのか分かりませんが、質問させて貰います。 昔のプログラムなんですけど、 int86(0x5,&inregs,&outregs); //←(0x5の他にも「0x11」「0x14」「0x17」「0x21」「0x5f」もありました。) このような関数が出てきました。 調べたところによると、<dos.h>で宣言されているようで、DOSファンクションコールみたいです(?)。 上記0x5(また、他5つ)の処理は具体的にどのような処理を行っていて、それをVisual C++内で記述(C言語化orC++言語化)するには どうすれば良いでしょうか? 環境は windows 7 VC6
基本今のOSでは使わないほうがいい。 アセンブラの知識無いと理解困難。 ほとんどの機能は標準関数で使える。 それでも興味あるならDOS ファンクションコールで検索してみて。
まあ同じことやるAPIや関数に置き換えることだな
cmd.exe では int 21h とか使えないんだろうか
先日、C言語の学習のためにMicrosoft Visual C++ 2010 Expressをインストールしました 参考書に載ってるサンプルプログラムをどんどん手打ちして実行したいのですが、 同じプロジェクトの中にプログラムを複数置いてビルドすると、 「main()関数が複数定義されてます!」というような内容のメッセージが出て怒られてしまいます これを回避するには、サンプルプログラムごとに新しいプロジェクトを作成するしかないのでしょうか?
適当に以前のmainをmain1とかにしちゃえよ
いまさらC言語なんて学習してなにになるの? osでも書くつもりか?
空のプロジェクトの ソースファイルのフォルダに →main.cpp , sub.cpp ヘッダファイルのフォルダに →main.h , sub.h を作り main.cpp内で、"main.h"をインクルード main.h内で、<iostream> と "sub.h"をインクルード sub.cpp内で、"sub.h"をインクルード sub.hでは何もインクルードしない (sub.hでサンプルクラスなどを宣言をして、sub.cppでそのメンバ関数などの処理を記述しています) という風にしているのですが main.cpp内でsubで定義したクラスを使おうとすると、コンパイラに「そんなものないよ」って言われてしまいます。 (VCは同プロジェクト内に突っ込んでいれば勝手に分割コンパイルしてくれるんですよね?) 試しにmain.h内のインクルードを"sub.h"から"sub.cpp"にしたらコンパイル通って希望通りに動くのですが cppファイルをインクルードすると分割してる意味がないんですよね?(コンパイルの速度など
>372 お前が生きててなんになるの? 人体実験サンプル?
>>373 main で参照してる sub のメンバ関数や変数なりの宣言を本当にすべて sub.h でやってる?
もしやってるならよくわかんないな。ソースをどっかにあげてくれたらみれるかも。
ちなみに自分なら、sub.h のインクルードは main.cpp でやる。
ヘッダファイルにインクルードがあると後で面倒なことになることもあるから。
VC++でのWinodwsフォームアプリーションを選択してプロジェクトを作成すると .net のアプリになるんですか? vc++でのネイティブアプリは作成できなくなったんですか?
フォームじゃなければネイティブで作れる
プロジェクトを新規作成すると、 VC++ + CLR + Win32 みたいなツリーが出てこない? これの Win32 以下のを選ぶとネイティブなのになるよ。 ※ Express の場合
IDがありません とエラーがでます。 解決方法を教えてください!
馬鹿には無理
>>376 フォームアプリ==.NETだから
これは昔からそうだろ
>>375 コード晒してなくてすみません、色々試したり調べたりした結果、
どうもテンプレートを使っていたのが問題だったみたいです。
質問する上で重要なことじゃないと思ったのに犯人だったとは・・・。初心者で申し訳ないです
BUTTONにグラデーションをかけたいのですが、できますか?
385 :
デフォルトの名無しさん :2012/07/11(水) 22:28:47.17
オーナードロー
そのBUTTONのオーナーはステータスバーなのでオーナードローできなくて困っています。
BUTTONのオーナーはステータスバー??? イミフ
388 :
片山博文MZボット ◆0lBZNi.Q7evd :2012/07/12(木) 00:26:28.17
Visual C++ 6.0 のWin32API でプログラム(C言語)を作成しています。
Win32APIでのプログラムは始めてで、いろいろと調べながら少しずつやっています。
描画について分からないことがあるので教えてください。
ttp://www.geocities.jp/ky_webid/win32c/009.html などを参考に描画を学んでいますが、描画の記述は全てウィンドウプロシージャ内のWM_PAINTに書かないといけないのでしょうか?
自分が今作ろうとしているのは、
1.複数のページ(?)からなる。
2.各ページのウィンドウのクライアント領域内に、多くの線や図形、文字を描画する。
3.図形の領域内を左クリックするとページ移動
このような作品を構想中です。
イメージとしては、まずメインとなる目次のページ(親ページ)を描画(線、図形、文字)。
親ページには、各章(子ページ)に飛ぶための図形が複数用意されている。
図形の領域内で左クリックが起こったら、目次のページの描画を消して、子ページの描画を行う(子ページへ飛ぶ)
子ページには、親ページに戻る図形や、孫ページに進む図形が用意されている。
孫ページには、親ページにまで戻る図形や、子ページに戻る図形(場合によってはひ孫に進む図形)がある。
まとめますと、ウィンドウのクライアント領域のある範囲(図形内)をクリックすると、元の描画とは違った新しい描画を行いたいのです。
サンプルプログラムみたいに、WM_PAINT内に描画処理を全て書くとなると、すごく長くなってしまう気がします。
1ページに少なくても20個の描画処理は作るつもりです。(それが複数ページ)
何か良い方法はないでしょうか?
関数に分けろよ
ダブルバッファリング(だっけ?)をググると良いかも。 一般的(だと思ってる)な考え方として、Windows のイベントを処理する関数には 0.1 秒ルールってのがあったと思う。 時間(手間)の掛かる処理は別のところでやっておいて、それ系の関数はすぐに処理を終える(呼び出し元に返す)っての。 この場合は、描画は別のところでやっておいて OnPaint(仮) ではあらかじめ描いておいた絵をコピーして終わりにする。
MemoryDCに描画する
HDC dc=GetDC(hwnd);
HDC memdc=CreateCompatibleDC(dc);
あとは
>>391 さんの言う通り
.net全盛のこのご時世にc+win32 ごくろうなこってw
そりゃvcなんだからwin32使うだろ
Win32APIスレのひとよりまし
オフスクリーン用のDDBを作成する際のサイズってどうやって決めるんですか? CADみたいなアプリを作成していまして ユーザからの入力は1234.567mmのオーダーでテキストボックスより入力されてきます。
1234567×1234567のサイズで作成すればいいだけじゃん アフォですか?
pixel <-> 人間が認識する長さの単位 の変換ってのはググればいくらでも出てきそうなんだけれど。 質問をするならなにが分からないのか具体的に聞くようにしようよ。 CAD みたいなアプリを作ってるってことは素人さんじゃないんだよね?
検索しましたが、どこも同じことばっかりしか書いてなくて・・・ やりたいことは、 1234.567mmのオーダーでユーザが入力する その際のオフスクリーン用のDDBを作成する際のサイズの決定の仕方がわからない
400 :
デフォルトの名無しさん :2012/07/16(月) 07:22:24.50
1234567×1234567のサイズで作成すればいいだけじゃん アフォですか?
ほんと、レベル低いな
゙'. '.;`i i、 ノ .、″ ゙'. ,ト `i、 `i、 .、″ | .,.:/"" ゙‐,. ` / ` .,-''ヽ"` ヽ,,,、 ! 、,、‐'゙l‐、 .丿 : ':、 、/ヽヽ‐ヽ、;,,,,,,,,,-.ッ:''` .,"-、 ,r"ツぃ丶 `````` ../ `i、 ,.イ:、ヽ/ー`-、-ヽヽヽ、−´ .l゙`-、 _,,l゙-:ヽ,;、、 、、丶 ゙i、,,、 ,<_ l_ヽ冫`'`-、;,,,、、、、.............,,,,、.-`": │ `i、 、、::|、、、ヽ,、、. ```: : : ``` 、.、'` .|丶、 .l","ヽ、,"、,"'、ぃ、、,、、、、.、、、.、、、_、.,,.ヽ´ l゙ ゙).._ ,、':゙l:、、`:ヽ、`:、 : `"```¬――'''"`゙^` : ..、丶 .l゙ `ヽ ,i´.、ヽ".、".、"'ヽヽ;,:、........、 、、...,,,、−‘` 、‐ |゙゙:‐, ,.-l,i´.、".`ヽ,,,.".` `゙゙'"`'-ー"``"``r-ー`'": _.‐′ 丿 ,! j".、'ヽ,".、".、"`''`ー、._、、、 、._,、..-‐:'''′ .、,:" 丿 ゙l,"`"`''ヽヽ"`"` ```゙'''"ヽ∠、、、、ぃ-`''''": ` 、._./` ._/` `'i`ヽヽヽ`''ーi、、、: : 、.,-‐'` 、/` ``ヽン'`"` : `~``―ヽ::,,,,,,,,,,.....................,,,,.ー'``^ ,、‐'"` `"'゙―-、,,,,..、、 : ..,、ー'"'` : `‘"`―---------‐ヽ``"''''''""
>>399 いや、だから。
「同じようなことしか書いてない」記事のどこが分からないのか具体的に書いてみそ。
この質問はさ、おまえがなにをどの程度理解してるかを判断する物差しにもなるんだよ。
こんなのを一から書いてやれるほど人が良くないモン。自分は。
で、その上で。
「画面に描画する」だけなら、実際の長さなんてどうでもいい。
ユーザが見た目で「自分が入力した値が反映されている」と思えばいいわけでさ。
要するに(たとえば)画面に表示してる「白紙の大きさが」ユーザが入力した縦横比になってればそう感じるだろ?
これはたとえば拡大縮小表示をするときのことを考えてみれば理解しやすいと思う。
ほんとうに pixel <-> ユーザの指定したサイズ の変換を考えなければならないのは印刷のときくらいじゃねぇかな。
と、起き抜けの寝ぼけた頭で書いてみた。
あと、同じような分野の質問だと思うから書くけど、違ってたらごめんな。
おまえさんが 389 なら、前の質問への対応をちゃんとしてから次のことを書くようにした方がいいよ。
>>404 389ではありません。
CClientDC cdc(this);
bitmap.CreateCompatibleBitmap(&cdc,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN));
memDC.CreateCompatibleDC(&cdc)
memDC.SelectObject(&bitmap);
memDC.SetMapMode(MM_ANISOTROPIC);
memDC.SetWindowExt(1,-1);
memDC.SetViewportExt(1,1);
このメモリデバイスコンテキストに
(0,0)から(1234567,1234567)までLineTo して
デバイスコンテキストにBitBltしたいです。 (ディスプレイ上に実際の長さではなくていいです)
ようするに、AutoCadみたいに、大きな構造物でもディスプレイ上に表示できるようにしたい
>>405 経緯見てないけど
データは独自に持っていて
必要に応じて描画時にスケールすればいいだろ
で、「(0,0)から(1234567,1234567)までLineTo して」の部分の調査結果は? 上のを見るとデバイスコンテキストを作成してるだけだよね。 それぞれの行の処理の意味は分かってるのかな。 あと、前の自分のレスの真ん中辺りを読んでる? たとえば WindowsAPI かなにかで pixel <-> ユーザの指定したサイズ の変換をするようなのはないと思う。 プログラムを作る上で、「1mm を * ドットで表現するね」って規則を自分で作っちゃっていいんだよ。 おまえさんの例なら、「スクリーン1画面分を A4 横の大きさとして表示する」とか。(※あくまで例) そこまで決めちゃえば簡単だろ。 A4 の長い辺の長さがスクリーンの横方向の解像度ってことになるんだから、変換式は自動的に出る。 自分ならその辺りの変換を勝手にやってくれる中間クラスを間にはさむ。 で、その上で、なんだが。 印刷するときにはプリンタの性能を考えてあげなくちゃならない。 印刷 vc dpi とかでググればヒントは沢山あると思うが。( dpi = dot per inch )
>で、「(0,0)から(1234567,1234567)までLineTo して」の部分の調査結果は? ??? GetSystemMetrics(SM_CXSCREEN) ⇒1920 GetSystemMetrics(SM_CYSCREEN): ⇒1080 なので、1920×1080のビットマップを作成しているのに、(1234567,1234567)までLineToなんてできますか? だから、サイズの決定の仕方がわからない といっているのですが・・・みなまでいわないとわからないかな・・・
1234567x1234567のビットマップ作成すればいいじゃん
もろちん韓国ネタもくそうざくて視聴率低下の要因ではあるんだろうけど ソレ以外の番組も吉本芸人とかがクチャクチャくだらねえことやってるだけだし そっちも問題視しろよwww いやなら見るなとかホザいてたのも吉本芸人だっけ?ざまあねえなwww
レスをちゃんと読んでる? 求める答えしか目に入れる気がないのかね。
ロッテ製品不買運動 韓国200万人の自営業者が
飲食店など韓国の自営業者が全国規模で、流通大手ロッテグループ製品の不買運動に乗り出した。
大型スーパーの進出で商圏を奪われ生き残りの危機に立たされているとし、コルモク(路地)商圏
生存消費者連盟と有権者市民運動が、酒類を扱う飲食店や宿泊業など小規模商工業者団体の
会員らとともに16日、不買運動を開始した。
これら団体は先月末、韓国チェーンストア協会に対し、大型スーパーの義務休業の順守やクレジット
カード手数料体系の改編受け入れなどを要求した。しかし成果が得られなかったことから、今月13日、
ロッテグループに闘争の意志を書面で伝えた。要求が受け入れられるまで無期限で不買運動を続ける。
ロッテグループのウイスキー「スコッチブルー」は国産ウイスキー市場で現在3位、焼酎「チョウムチョロム」
は「チャミスル」と激戦を繰り広げている。飲食店やカラオケ店でこれら酒類やミネラルウォーター、
清涼飲料が販売されなくなれば、ロッテは大きな打撃を受ける。
また、小規模商工業者側とその家族、市民団体を合わせた約600万人は、ロッテ百貨店やロッテマート、
ロッテスーパーなどの小売店を利用しないことにした。菓子類や氷菓、ハンバーガーなども不買運動の
対象とする。
さらに、外食分野などの小規模商工業者団体や市民団体にも、不買運動への協力を呼びかけている。
http://m.yna.co.kr/mob2/jp/contents_jp.jsp?cid=AJP20120716001400882&domain=6&ctype=A&site=0100000000&mobile 関連記事
韓国・ロッテ製菓など製造のアイスクリーム8種から基準値以上の細菌検出
http://news.livedoor.com/article/detail/6723748/
コピペが原因では?
どういった原因なんでしょうか、って言われても。w コピペを理解しないままやってて必要な処理が抜けてるんだろ。でもそんなのこれだけの情報で分かるわけないだろが。 その練習用?のコードをどっかにあげてごらん。暇な人が教えてくれるから。
いまどきGDIのダブルバッファリングって・・・ 12,13年前はよくやったがな
最近はBufferedPaintとか使うんかな
えらそうなことぬかしてたけど、けっきょくこたえれねーのかよw
なんのこと?
おのれのむねにてをあててかんがえてみたら、よろし
ああ。あとは心優しいエスパーさんが相手してくれるよ。
>>414 のWM_CREATEでオフスクリーンのDCを作成する時に、白で塗りつぶす(背景を白にする)ことによって、
初期の真っ白画面→右クリック→描画された画面
となることが確認出来ました。いらないと思って一部省いていた処理を追加することで出来ました。
まだ、ダブルバッファリングの下準備の確認が出来た程度で、本来のプログラムは手付かずですが、調べながら頑張っていきます。
また分からなくて詰まった時に質問するかもしれないので、その時はよろしくお願いします。
ありません ちゃんとそのスレにここに書いた趣旨書いとけよ
>>428 ありがとうございます。趣旨の件、了解です。
ところでないんですか?未実装な処理系って結構多いんでしょうか?
>>429 イエス、ほとんどの処理系で実装されていない。
だから、2011年のC++の標準規格改定でexportの機能は廃止された。
Galaxy S3の画面の”焼付き”を韓国メディアが検証!→24時間連続点灯で焼き付き、しかも戻らない
http://engawa.2ch.net/test/read.cgi/poverty/1342832178/ 画面に残像が残る、いわゆる”焼付き現象”は今に始まったことではありませんが、Galaxy S IIIのマニュアルに記載されている「画
面劣化によるムラが発生した場合、サムスンは責任を負いません。」という一文(韓国版のみ?)が原因で、議論がいつもより激し
くなっているようです。サムスンはこの記述に対し謝罪し、内容の修正を行うとコメントしたそうです。
そうした中、Galaxy S IIIの焼付き現象について、韓国メディアのetnewsが検証を行いました。
検証に用いたのは、韓国版Galaxy S III LTEと、IPS液晶を搭載する「Optimus LTE II」。それぞれに白と黒のチェック柄を24時間連
続で表示させ続け、表示を元に戻した時の残像の様子を確認しました。
http://www.youtube.com/watch?v=OIqqnnb1LBw 結果、Galaxy S IIIでは、ホーム画面に戻った後にも、テスト用のチェック柄が画面に残りました。背景を青色にすると顕著です。一
方、液晶を採用するOptimus LTE IIでは画面の異常は確認できませんでした。
そしてその後12時間電源をOFFにし、再度確認してみても、残像は表示され続けたままでした。
焼き付きの原因は、AMOLEDで使われる赤、緑、青の発行体のそれぞれで寿命が異なることにあります。寿命が異なることで、同
じ時間発光させ続けることで、一部分だけが暗くなり、画面にムラが生じるというわけです。特に青は寿命が極端に短いとされてい
ます。
AMOLEDは高いコントラスト、応答性、構造的に薄くできるなど、液晶と比べて多くの利点もあります。しかし”寿命が短い”という欠
点も抱えているようです。今のところ根本的な解決は不可能で、寿命を延ばすことが最善策であるとされています。
しかし24時間でこうも簡単に焼き付くものなのですね。ここまで顕著な結果を望まなければ、あるいは数時間で焼付きを体験できる
かもしれません。しかも一度焼き付くと、元に戻すことはできません。
http://www.datacider.com/28903.php http://www.datacider.com/wp-content/uploads/2012/07/galaxys3_barn.jpg
プロジェクト名の変更の仕方を教えてください。 プロジェクト名にAbcとすると、 CAbcApp,CAbcView,CAbcDocクラスが作成されますが、 これのプロジェクト名をDefに変えたいのですがどうすればいいですか?
こんな感じでやったことがあったようななかったような。 ・事前に中間ファイルなど、なくてもいいファイルをすべて削除する ・ファイルやフォルダの名称を変更する ・grep置換が出来るテキストエディタで、プロジェクトフォルダ以下のすべてのファイルを全置換する
CLSIDが重複するんですねわかります
visualC++について質問です。 データグリッドビューを使ったプログラムなんですが、 入力したパラメータの大小でそのパラメータの入力されている セルの背景色を変えるようなプログラムを組みたいのですが、どうしたらいいでしょうか?
オーナードロー
データグリッドビューって .net の? だったら vc++ DataGridView セル 背景色 あたりでグーグル先生に聞いてくれ。(そっちの方が早い) もし、アンマネージのグリッドのことでも、Microsft なんとかって最初から付いてたやつのことなら、普通に変えてたような気がするんだけど。 どっちか分からんのに調べるのもな。。。 環境はちゃんと書くようにしてくれ。
あ。パラメータの値で背景色を自動的に変える方法を聞いてるのかな。 それは、、一から教えるのは勘弁。 自分なら入力値の変更イベントで勝手に色を変えるラッパークラスなりを作るだろうけど。
ん? C++/CLI ってのもあるんだけれども。
>>441 スレタイの 「を」 以降を声に出して読んでみて
すみません、「を」までしか読んでいませんでした。
馬鹿には無理
朝鮮猿っていつまで経っても、結局日本の後追い猿真似しか出来ない寄生虫民族なんだよね
属国の歴史しか無くて、ずっと独自文化がゼロなのはなぜなのか本当に良く判るわw
< #`Д´> <うぎゃああああ!!フランス人までネトウヨの嫌韓厨だったニダーーー!!!ネトウヨ!ネトウヨ!ネトウヨ!!
■フランスメディア「KPOPに独自性は感じられない」「日本や米国の模倣」「商業主義」「つまらない」
パリで韓流コンサート「日本文化から韓国を知った」
2011/06/14(火) 09:45
一方、コンサートが終了した現在、当日の模様について報道しているフランスのメディアは
比較的少ない。この状況下、コンサートの模様を報じているのは、フランスのニュースサイト「Rue89」だ。
中でも目立つのが、K−POPは特に独自性が感じられないという意見だ。これまでフランスでファン層を
増やしてきたJ−POP、ひいては米国のポップスを踏襲しており、商業主義的な音作りだという意見や、
演奏がコンピューター管理されているためか野性味に欠けるといった意見が寄せられている。
http://news.searchina.ne.jp/disp.cgi?y=2011&d=0614&f=national_0614_016.shtml
shtmlまで読んだ
win32apiでキーボード入力を使ったプログラムを作っています。(C言語) 使用するキーは、「0」〜「9」の数字キー、プラスマイナスを判定する「-」キー、少数点の「.」キー、決定の「Enter」キーです。 WndProc(ウィンドウプロシージャ)内のWM_KEYDOWNメッセージで押されたキーを認識してるのですが、 case WM_KEYDOWN: if( wp == VK_RETURN ){ エンターキー処理; } else if( wp == '0'){ 「0」キー処理; } こんな感じで数字とエンターキーは認識出来たのですが、「 - 」「 . 」この2つが認識できませんでした。 「 - 」「 . 」この2つが押されたことを認識する方法を教えてください。 XP VC++6
WM_CHAR じゃね
これって解説したの? うちとこでは WM_KEYDOWN の、 switch( wp ) { case VK_SUBTRACT: // '-' case VK_DECIMAL: // '.' break; } で普通に行けたけど。 エンターキーとかが拾えてるなら、そこにブレークポイントを置いてキーを押してみればどんな値が来るか分かるじゃん。 分かったら例示にある VK_RETURN の「定義で移動」で定義元に飛んで、上で確認した値に該当する define 定義を見つけられるよ。
上。 x 解説 o 解決
自演乙としか
そっか、自演をしちゃったのか自分は。w
Visual C++で .Net Frameworkを使いたいのですが下記のようになってしまいます どうやって使うのですか? using namespace System; int main() { return 0; } エラー 'System' : この名前を指定された名前空間は存在しません。
デバッグのやり方を教えてください。 C言語でシリアル通信を行ってデータの送受信を行おうと思っています。(Visual c++ 6のwin32api) CreateFileやReadFile、WriteFileなどの関数を使って送受信をしようと思っています。 しかし、自分側のプログラムは(多分)出来たのですが、(通信)相手側がまだ完成していないので、 自分側のプログラムだけでも正しく動作してるのか確認(デバッグ)したいのです。 そこでPC2台を繋げて、自分のプログラムが通信(送信・受信)したいタイミングで、もう1台のPCからデータを送ったり、 受信した内容を確認したいのですが、どのように行えば良いでしょうか? 教授の助言では、teratermを使って・・・とのことですが。。。 teratermの使い方をいろいろ調べた結果、両方のPCでteratermを起動させ、A側で「a」を押すと、B側のteratermにaが表示される(その逆も) くらいは出来たのですが、この方法を用いてVC6で作ったwin32apiの動作を確認する方法が分かりません。
両方のPCでteratermを動かしてどうする 相手側のアプリの替わりにteratermを使うんだよ
宿題は宿題スレって約束忘れちゃったのかおまえら
てか、自分の側のプログラムは(一応)完成してるんだろ? それをちっと弄って相手側の役割をするように変えてやればいいんじゃねーか?
460 :
デフォルトの名無しさん :2012/08/15(水) 01:15:26.56
Visual C++ Express 2010で質問があります。
Windowsフォームアプリケーションを使用して、フォルダ作成プログラムを作ろうとしているのですが、
どうもうまくいきません。
フォームはテキストボックス、ボタンからなり、テキストボックスに文字列を入力し、ボタンを押すと
入力した文字列名でフォルダが作成されるというプログラムです。
書いたコードを以下のサイトに張り付けたので、どうすればうまくいくかご教示お願いします。
http://ideone.com/TWwHO
>>460 using namespace System::Runtime::InteropServices;
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
System::String ^ str = this->textBox1->Text;
char* str1 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
_mkdir(str1);
}
また、いばらの道に初心者が迷い込んだか
なぜ初心者はC++/CLIなんて変態言語に手を出してしまうのだろう
フォームアプリが選択肢に並んでるせいだな
C/C++ -> MFC って来て、net に行こうとしたら C++/CLI に行きたくなるだろ、ふつう。 どんなトラップなんだと。w
hash_map > 超えられない壁 > map
VC++での開発初心者です。質問なのですが、 XMLファイルを読み込んで、配列かArrayListに格納するコードを書こうと思っています。 上記のようなことを行うにはどのような方法が簡単かつ適切でしょうか? また、C#のようにXMLスキーマを用いて、データセットにXMLの値を格納する方法はC++でも可能でしょうか? ぐぐっても半端な情報が散見するばかりで、少し途方に暮れています。
>>468 ありがとうございます。
ただ、Boost導入は難しい環境にて作成しております。(情報不足で申し訳ありません
Boostを使わずに実現する方法はないでしょうか?
xmllite
_CrtSetDbgFlagを使用すれば動的に確保されたメモリが解放されていない場合教えてくれるのですが ・DeleteObject ・DeleteDC ・ReleaceDC ・DestroyMenu ・FreeLibrary ・DragFinish ・FreeConsole ・GlobalUnlock ・ReleaseMutex ・CloseHandle ・etc なども処理されて無い場合確認できるものが存在するのですか?
しない
そうだったんですね ありがとうございました
同じ実行ファイルを実行した時に XP以前ならクラシックスタイル XPならXPスタイル VistaならVistaスタイル 7なら7スタイル で表示するようにするにはどうすればいいですか? それぞれ別の設定でビルドするしかないですか?
GetVersionExでOSごとに描画を変える
動的に確認できるんですね ありがとうございました
マニフェストファイルの以下の部分に指定した文字列は実行ファイルをメモ帳とかで開いた時しか見えませんか? <assemblyIdentity ・・・ name="この部分" ・・・ /> <description>この部分</description> タスクマネージャのプロセスタブにある「説明」の欄に表示されたり プロパティでは表示されないみたいですが また別物なんですか?
リソースのバージョンインフォじゃね
ありがとうございます 内部で使用されるだけなんですね
ビジュアルスタイルを適用するマニフェストファイルのprocessorArchitectureの値(x86)は ソース上だと#defineで分岐するとビルド時のシステムに搭載されているCPUを気にしなくてもいいのですが .xml上で自動で搭載されているCPUに合った値を使用する方法はありますか? <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly> またOSによってビジュアルスタイルが変わると思うのですが dllを読み込むのだからOSが使用できるビジュアルスタイルが自動的に描画される という認識であってますか?
質問です。VC++6.0でダイアログを作成しています。 ダイアログにはリストボックスがあり、スレッドの中でリストボックスにアイテムを追加したいと考えています。 MFCを使用しています。スレッドは_beginThreadで呼び出しています。 リストボックスのオブジェクトを取得するために以下のようにして取得をしたいと考えています。 CListBox* List = (CListBox*)GetDlgItem(リストボックスのID); この処理はダイアログ::OnInitDialog()のような継承を行った部分の中では問題なく使用できるのを確認したのですが、 これを使ってスレッド内でオブジェクトを取得するにはどうしたらいいか悩んでいます。 スレッドは以下のような関数を呼び出しています。 void Thread(void* p){ //処理 } スレッドの中でリストボックスのオブジェクトを取得してリストボックスにアイテムを追加する方法の知恵を授けては頂けませんでしょうか
スレッドにListを渡してやればいい
>>482 なるほど
先にCListBox* List = (CListBox*)GetDlgItem(リストボックスのID);として
_beginThread(Thread,0,List);のように引数にListを渡すということでしょうか?
この考え方が間違ってたら申し訳ありません。
はい
スレッドの中でオブジェクトが取れなければ外で取ればいいじゃないということですね。 それだと複数引数で渡したい場合は構造体にでも入れて渡せば問題なさそうです。 回答ありがとうございます。非常に助かりました。
もう解決したみたいだけど。 そもそもワーカースレッドの中で画面アイテムの更新て出来たっけ? そう言う場合、リストボックスに入れるデータを格納したバッファなりを作って、スレッドではそこにデータを格納。 続けてウィンドウメッセージかなにかでウィンドウにメッセージを送ってメインスレッド(て言うんだっけ)でリストを更新、 て流れでいつも作ってた。
内部ではSendMessageしてるから大丈夫
488 :
デフォルトの名無しさん :2012/09/05(水) 11:30:23.73
教えて下さい!
Photoshop CS5のプラグインを作りたくて
Visual Studio 2010 Express (C++)をインストールして
次に、
PhotoshopCS5 SDK(forWindows)
ttp://www.adobe.com/devnet/photoshop/sdk.html をダウンロード
試しにサンプルでもと思い。
「\adobe_photoshop_cs5_sdk_win\pluginsdk\samplecode\selection\selectoramashape\win」内の
「SelectoramaShape.vcproj」をダブルクリック!!
VS「変換ウィザードへようこそ」???→なんか知らんが、完了!
VS「変換中にエラーがあったよ」→閉じる。。。
ソリューションファイルからならイケる!(ってどっかのサイトに書いてあった)
VS「変換ウィザード。。。。
みたいな事になってます。
環境はWindows7で
変換レポートの中のエラーは
「Converting project file '***\SelectoramaShape.vcproj'Failed to upgrade platform 'x64'. Please make sure you have it installed under '%vctargetspath%\platforms\x64'
VCWebServiceProxyGeneratorTool is no longer supported. The tool has been removed from your project settings.
Attribute 'Detect64BitPortabilityProblems' of 'VCCLCompilerTool' is not supported in this version and has been removed during conversion.
Failed to upgrade 'Debug|x64'. Please make sure you have the corresponding platform installed under '%vctargetspath%\platforms\x64'
The project configuration dimension name/value "(Platform, Win32)" was not found in the project manifest.
プロジェクトはアップグレードに失敗しました。
」です。
お願いします。助けて下さい。
>>488 環境は64bit?
そのVC++はSDK追加して64bitコンパイルできるようにしてる?
あとちょっと見てみたけど、変換が入るのはこれがViisualStudio2008用だからだな。 2010用に書き換えるか、とりあえず2008で試してみては
491 :
sage :2012/09/05(水) 12:07:50.84
>>489 >>490 なるほど。そういうことだったんですね。
ちょっと2008インスコしてきます。
2008も64bitコンパイルできるように設定しないとだめっすか?
他のサンプルにx64入ってないやつあるからそれ試せばいいんじゃないか? あとx64使えるようにするのは2008は面倒だよ。 そのエラーが出てプロジェクト開けないの? 開けてるならWin32のみ使えばいいんで問題ないと思うけど。
>>492 あやうく2010消すとこでした。^^;
エラーが出てプロジェクトが開けないんです。
左のソリューションエクスプローラーに
・SelectoramaShape(利用不可)
プロジェクト ファイルはアンロードされました。
みたいな感じで表示されてます。
x64は最新のSDK入れれば使えるんじゃないか? ググって試してみりゃいい。 あとvcprojをテキストエディタで開いてx64のブロック消すとか
>>493 VC++2008で64bitでビルド実行できるようになって、その後2010で使いたいなら
2008を残したまま2010インストール
→2010で64bitビルド実行できるようにする(テストプログラムでも作って確認)
→2010でSelectoramaShape?のソリューションを開く
→ウィザード変換
→プロジェクトのプロパティ->構成プロパティ->全般->プラットフォーム ツールセットv90でリビルド
→エラー無し確認後v90をv100にしてリビルド
→エラー無し確認
これで以降はVC++2010のみで管理可能になると思う
struct FOO{ int a; int *b; long c; char *d; }; __declspec(noinline) void __stdcall foo1(FOO h){ printf("%d %x %d %s", h.a, h.b, h.c, h.d); } __declspec(noinline) void __stdcall foo2(int a, int *b, long c, char *d){ printf("%d %x %d %s", a, b, c, d); } typedef void (__stdcall *FOO1)(FOO); typedef void (__stdcall *FOO2)(int, void *, long, char *); int _tmain(int argc, _TCHAR* argv[]){ FOO h = { 6, &h.a, 8, "abc", }; foo1(h); ((FOO1)foo2)(h); foo2(h.a, h.b, h.c, h.d); ((FOO2)foo1)(h.a, h.b, h.c, h.d); return 0; } 最適化するとfoo2はfoo1と同じと見なされ、消えてしまいました。 しかし、呼び出し方は全く異なります。 foo2はpushで引数を入れていますが、 foo1はスタックポインタを進めて、全部movしていました。 するとfoo1は呼び出しコストが高くなるので FOO2にキャストしてから呼んでみたところ foo2と同じようにpushで引数を入れてくれました。 このような、引数と構造体の置き換えは、 アライメントが違ったり、浮動小数が入っていると できない場合もあると思いますが、他にできないパターンが あったら教えてください。
>するとfoo1は呼び出しコストが高くなるので え? 逆じゃないの? プッシュはmuvより複雑で面倒な命令だから、実行時間が長くなるんじゃない? 試しに何回も呼び出しを繰り返させて実行時間を計ってみ?
>>するとfoo1は呼び出しコストが高くなるので
>え? 逆じゃないの?
>プッシュはmuvより複雑で面倒な命令だから、実行時間が長くなるんじゃない?
すみません、おっしゃる通りでした。
以下のようにベンチしたところ、若干foo1呼び出しの方が速かったです。
http://ideone.com/2rTrd コードが明らかに長くなるので、それだけ見て勘違いしておりました。
となると、サイズより速度を優先する最適化で、pushをmovに置き換える
コードが生成されないのはなぜですか?
また、((FOO1)foo2)(h);の行が入っていない場合、
foo2はfoo1に統合されませんでした。
しかも、関数自体はfoo1より、統合されないfoo2の方が速かったです。
謎だらけです。
499 :
デフォルトの名無しさん :2012/09/06(木) 14:08:24.61
>>494 >>495 ありがとうございます。
なんとかできました。
できたはできたんですが、
自分が作りたかったプラグインはすでに存在してました orz
500 :
デフォルトの名無しさん :2012/09/06(木) 15:42:04.15
構造体へのアクセスが単純変数へのアクセスよりも遅いって事だろ。 呼び出し時に構造体から変数に置き換えるか、関数内で置き換えるかの違いかと。
えっ!?
まあコンパイルは遅くなるかもなw
構造体の変数を引数として渡して 関数内では構造体使わない方が速い グローバル構造体宣言して使いまわすとか無しな
質問ですが、VC++6.0にて time_t time = time(NULL); struct tm *ptime = localtime(&time); として、YYYYMMやMM:DDのような書式にあわせた日付を取得する方法としてどのような方法があるのでしょうか? YYYYと書式を設定したら2012、YYYY/MMと設定したら2012/09のようになるイメージです。
どんな構成でプロジェクト作ってる? フィルタの振り分けとか Main ->main.cpp ->main.h ProjectName ->ProjectName.cpp ->ProjectName.h 自作外部ファイル用 ->FileName1.cpp ->FileName1.h ->etc こんな感じ?
そう
遅れて申し訳ありません。規制に巻き込まれてしまいました。
>>505 >>506 こんな関数があったんですね。わざわざURLまで貼っていただいてありがとうございます。
すいません。 UDP通信の簡単なアプリケーションを作成中なのですが、 recvfrom()を実行するとデータを受信するまで終了できませんです。
終了するまで自分にパケット送りつける事にすればいいでしょうか?
ref クラスのプロパティに構造体の配列を持ちたいのですが、 混合型はサポートされていませんと出ます。 どうすればいいですか?
C++/CLIを使う->間違い C#を使う->正解
MC Vsual C++6.0 をつかっています ソフトがクラッシュすると、デッバッグが起動するんですけど これを解除するにはどうすればいい?
>>514 標準デバッガの設定だな。
XP以前だったらDrワトソンを標準デバッガに設定し直せば良い。
drwtsn32.exe -i
だったかな。いま7だから試せんわ。
もしOSがVISTA以降だったら、そもそもDrワトソンが無いので、レジストリの
HKEY_LOCALMACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug
を弄れは良い。
見て想像は付くと思うが、解らんかったらググれ。
質問です。 VC++6.0を使用してtry catchで例外処理をしているのですが、VC++6.0ではVBのようにexceptionのような色々なエラーをキャッチできて、 詳細なエラーメッセージを取得することができる手段はないのでしょうか?
例外を投げる時に詳細なエラーメッセージも一緒に投げればいいんじゃないかな
いまざっとググってみたけど、その exception ってのが、VC で言うところの System::Exception なんじゃねぇの?
ref Class なにこれ??使いにくいぃぃぃいいいいい!! 皆さん使ってますか??
C++CLIで下記のよなプログラムを書いてます。で下のエラーメッセージが出ました。 error C4368: cannot define '_test_main' as a member of managed 'NAMAI::Form1': mixed types are not supported error C2678: binary '=' : no operator found which takes a left-hand operand of type 'NAMAI::TEST_main' (or there is no acceptable conversion) could be 'NAMAI::TEST_main &NAMAI::TEST_main::operator =(const NAMAI::TEST_main &)' while trying to match the argument list '(NAMAI::TEST_main, NAMAI::TEST_main *)' 別ファイルのTEST_mainをフォーム1で生成したいのですが、エラーの解決方法を教えていただけないでしょうか。 よろしくお願いします。 >>HOGE.h namespace NAMAI { class TEST_main { public: void TEST(void); }; } >>Form1.h #pragma once #include "HOGE.h" namespace NAMAI { public ref class Form1 : public System::Windows::Forms::Form { public: TEST_main _test_main; Form1(void){ InitializeComponent(); InitializeTEST(); } void InitializeTEST() { _test_main = new TEST_main; } }; }
C++/CLIはC++じゃありません
>>521 じゃあなんあのさぁああああああああああああ!!!!!
C++/CLIはC++/CLIだな、うん
自前で_CrtSetDbgFlagの機能を実装するのってどんな考え方したらいいかな? malloc/freeでfree忘れを検知するだけでいい それができたらそこにGetDC/ReleaseDCとかも判定できるようにしようと思ってんだけど
VC6の質問です 彼女が出来ません、どうしたら良いですか
526 :
デフォルトの名無しさん :2012/09/24(月) 18:17:35.73
コードをかきまくります
527 :
片山博文MZボット ◆0lBZNi.Q7evd :2012/09/24(月) 18:59:17.08
>>524 プリプロセッサーでフック。
#define malloc mymalloc
...
atexit関数かstaticオブジェクトのデストラクタでチェック。
528 :
デフォルトの名無しさん :2012/09/24(月) 19:10:38.89
__FILE__ __LINE__
クラス定義でメソッドをインラインで書くとき {} の後ろに ; が要らないのはなぜですか? たとえば class Hoge { int a; public: Hoge() : a(0) {}; ~Hoge() {}; void Hage(void); void Fuga(void) {a=1;}; }; みたいなとき class Hoge { int a; public: Hoge() : a(0) {} ~Hoge() {} void Hage(void); void Fuga(void) {a=1;} }; で良いんですよね? だとすると逆に void Hage(void) で怒られるのも謎
530 :
デフォルトの名無しさん :2012/09/24(月) 20:02:56.43
関数の宣言と定義の違い
>>529 関数書くときもいらないだろ
いつもわざわざ
void func() { };って書いてたのか?
class は定義なのか宣言なのか } の後ろに ; が必要ですね。
構造体には付けてただろ
あれは宣言と同時にインスタンスを作れるようになってるから必要
C++初心者の人はまず何から始めたほうがいいですかね?
まず禊をして身を清め 断食で煩悩を断ってください
>>535 興味のあるライブラリをさわってみる
サンプルをうごかしてみる
ちょっと変更してうごかしてみる
>>537 やっぱり普通に言語の勉強するよりも動かしたほうがいいんですね
if(hoge){huga;}; って書き方してるソースも見たことあるわ
ある例外(型はポインタ)が投げられた(受け取った)とき、 そのポインタの値がNULLかどうかチェックする必要はありますか? 具体的には、 try{ do something; } catch(char *hoge){ printf("received exception: %s", hoge); } としたい場合、 catch(char *hoge){ if(hoge){ printf("received exception: %s", hoge); } } と書くべきかどうかです。 この場合は throw してる側で hoge が動的か静的かで違うと思いますが、 動的に hoge が生成されるような場合についてです。
誤 received exception 正 caught exception
必要ない
仮にそこに渡されるポインタがNULLだとすると 既に別の例外が発生しているか 強制終了されている状況じゃないかな
>>540 それよりお前
delete hoge;
し忘れてるぞ
いや、それはこの際どうでもいいだろ。w
>>540 それって状況によるかも知れないから、どうしても心配ならこんな風に書いたりすることもある。
まあこれもどうでもいいかもしれんが。
printf("received exception: %s", hoge == NULL ? "NULL" : hoge );
64bitのバイナリになってないんでしょう
構成マネージャーでx64作成
ちょっと質問です。 VisualStudio 2010 で C++ を使い、Win32 アプリを作っています。 アプリ実行時に、IDE 上に任意のログを出力する機能ってありますでしょうか? やりたいのは、Eclipse / Android 開発で、Log.e を Logcat で捕まえるようなものです。 リアルタイムで実行状況を確認したいときに使いたいです。
OutputDebugString
553 :
551 :2012/09/29(土) 10:47:50.91
いけました!ありがとうございます!
SDKプログラムで、ボタンをオーナードローを使って描画しているのですが Vistaや7のAeroのGUIで、ボタンにカーソルを合わせると徐々に青っぽくなって カーソルをはずすと、また元に戻っていくようなアニメーションっぽいのを やりたいんですが、この処理は自分でタイマー使ってやる以外に方法はありますか?
自分でタイマー使ってやる
printf の "%.*s" ってどういう意味ですか?
>>556 引数で最大表示文字数を指定する。
printf("%.*s\n", 4, "TESTTEST"); // TESTと表示。
thx!
fgets() はどうして取得出来た文字数を返さないのでしょう?
while(fgets(buffer, sizeof(buffer), fp) != NULL){ hogehoge; } これだとバグ出るよね
bufferの型によるな sizeof(buffer) / sizeof(buffer[0])かポインタでなければ_countof(buffer)がいい
> sizeof(buffer) / sizeof(buffer[0]) これって buffer が配列じゃなくてポインタのときは駄目じゃない?
_countofなら大丈夫
char *buffer = (char *)malloc(sizeof(char) * N); printf("%d", _countof(buffer));
>>565 ちゃんとコンパイルエラーになるから大丈夫
char buffer[N]; ○ sizeof(buffer) / sizeof(buffer[0]) ○ _countof(buffer) char *buffer = (char*)malloc(sizeof(char) * N); × sizeof(buffer) / sizeof(buffer[0]) × _countof(buffer) ○ int size = sizeof(char) * N;
ああ コンパイルエラー出すための仕組みなんか 誤解してたわ
char *buffer = (char*)malloc(sizeof(char) * N); × sizeof(buffer) / sizeof(buffer[0]) // コンパイルエラーにならなくて実行時誤動作 × _countof(buffer) // コンパイルエラーになるから大丈夫
visual studioの仕様に慣れない初心者です・・・ 次のエラーが解決できず、かなり苦労しています LINK : fatal error LNK1104: ファイル 'glut32.lib' を開くことができません。 調べてでてきた ・glut32.dllを"C:\Windows\System32"に入れる ・glut32.dllを"〜〜.vcproj"と同じフォルダに入れる ・プロジェクト→既存項目を追加→glut32.dllを選択 をすべて試してみたのですが、エラーが消えません・・・ 環境はVisual C++ 2008、Windows7の64bit、プロジェクト自体は"Win32"です。 どうかよろしくお願いします・・・
glut32.lib
glut.libの指定してる所はどう書いてる?
573 :
デフォルトの名無しさん :2012/10/07(日) 02:05:55.88
// / / バカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ 馬鹿には無理 / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
>>571 >>572 glut32.libがあるディレクトリを含めていませんでした!!
ありがとうございます、無事にコンパイルが通りました!!
本当に初心者スレっぽくてなごんだ。
「ごめん」って言うと 「遊ぼう」って言う。 「もう遊ばない」って言うと 「ごめんね」って言う。 そうして、あとでかわいそうになって 「遊ぼう」って言うと 「もう遊ばない」って言う。 こだまでしょうか? いいえ、馬鹿には無理です。
AH アーホー
同じことをするプログラム(ソース)で Cでコンパイルしたときと C++でコンパイルしたときとでは 出来上がるプログラムのサイズは変わりますか?
ありますん
全く同じソースで? リンケージの名前のつけかた違うからちょっとは違うだろうけど、、
exe になったら一緒じゃないか
その同じことをするための機械語プログラムのアルゴリズムは無数にあるだろ。
最適化がどうかかるかとかあるだろ
OSが同じとは書いてないな
何でその疑問が沸いたのか、から書いてくれないと何と言っていいかわからんな
すみません。 いくつかのサイトを見ても解決しなかった疑問があるので教えてください。 配列として new したポインタの delete について、 あるサイトでは、 >重要なのはdelete演算子の使い方です。 >new演算子を使って配列を確保した場合、delete演算子にも[]を付けなけ ればなりません。 >これを付けないと、正しく解放できません >(恐らく、配列の先頭の要素についてだけ解放されるが、 それすらも保証されている訳ではない)。 >この[]の付け忘れは非常によくある間違いです。コンパイルは普通に成功 してしまうので気をつけて下さい。 と書かれていました。 一応言われている意味は判るのですが、なぜ [] を付けると「正しく解放できる」のかが判りません。 たとえば、内部で int *p = new int[n]; した int *p を返す関数 Hoge があるとします。 int *Hoge(size_t n){ int *p = new int[n]; return p; } これを main 側で受け取って delete[] するケースですが、 int *q = Hoge(N); delete [] q; と書くのが正常である。ということになると思いますが、 delete q; だと先頭の 1 要素だけ削除され(るかもしれない)、 delete [] q; だと N 個の要素が削除されるという意味になると思うのですが、 そもそもここで q のサイズを把握することはコンパイラには可能なのでしょうか? 実行時にしか決まらないと思います。 delete [N] q; と書くべきですよね?(書けないけど)
逆に、 int *q = Hoge(N); delete [] q; で、正しく N 個の要素を削除出来る仕組みが(確保されたオブジェクトの方とかに)あるのなら、 そもそも、 delete q; と書いても大丈夫のような気がするのです。
588 :
デフォルトの名無しさん :2012/10/10(水) 13:47:13.04
age 忘れました。 よろしくお願いします。
[] つけないとデストラクタが最初のやつしか呼ばれない 試して味噌
アセンブラ吐いてみたら?
>>589 それは判るんです。
疑問点は [] があるときは要素数がなぜ判るのか?って所です。
そんなもんわかる様に作ってあるからだろ。 ほんとの疑問点は、配列だとわかってるくせに なぜ [] を指定しないとちゃんと呼んでくれないの? じゃないのか?
int *p = new int[n]; するとp[-3]あたりに確保した要素数が入ってあったり
>>590 やってみます。
>>593 それが出来るなら、delete p; でも良いような気がしてるんです。
実行時に配列かどうか確かめなきゃならんのは無駄だろう
>>592 >>593 あと、sizeof(p) とかは動的な場合は取れない(コンパイルエラー?)ですが、
「本当は判る。」ってことになりますよね?
>594 じゃあ一個だけ消したいときはどうすんの?
>>593 >>595 ああ、
free だと p[-3] を使って常に全部解放されるけど、
delete だと p[-3] は見なくて、
delete [] のときだけ、p[-3] を見るってことですか。
>>597 それはもちろん、
delete p[0];
とかで可能ではないですか?
delete は C++ の仕様のバグ。 それに気付いた禿が delete [] を追加した。
>>590 VC++ 2008 Express でアセンブラ出力してみましたが、
delete q; も delete [] q; も同じコードが吐かれてますね。・・・ orz
ソース変えたら違いが出ました。 さっきのは最適化されてたのだろうか。・・・ orz
デストラクタが無ければ同じになるだろうな
>>589 確かにそうなってますね。
そもそも、 delete で配列全部のデストラクタ呼べば良いのに、
(個別の要素を消したければ、 delete p[] で可能。)
なんでわざわざこんな変な仕様にしたんだろ。
間違いコード誘発しまくりですよね。
>>593 *(size_t *)((unsigned char *)&p[0] - 4)
で参照したら確保した要素数と同じ数が取れました。
本当にありがとうございました。
>>604 禿も言ってるようにvector使え
そもそもdelete &p[n]で個別の要素が消せるとして何が嬉しいんだ
配列の要素を消したら最後forで処理できなくなるだろうに
>そもそもdelete &p[n]で個別の要素が消せるとして何が嬉しいんだ それはどうでもいいんです。 delete と delete [] の使い分けがどうして必要なのかなと思ったので。
>589 見たいな仕様にして禿は何が嬉しかったんだろう
そもそも配列に対してdeleteした結果は未定義動作だろ
_countof() みたいにコンパイルエラーに出来ないのが問題なんだね
>612 >607
p[-3]はなんなんだ?
でもベクトルはお遅いんでしょう?
617 :
デフォルトの名無しさん :2012/10/11(木) 05:52:17.82
int *p = new int[N] や char *p = new char[N] のときは delete p; で桶なんだな
プリミティブ型の配列とクラスオブジェクトの配列で扱いが違うということ?
619 :
デフォルトの名無しさん :2012/10/28(日) 21:46:47.23
>>591 コンパイラの実装にもよるが、確かポインタpが指す先頭byteの前の
4byte領域にnewで確保した領域のサイズ(バイト数)が記憶されていた
ような。
delete [] p;
した時はこのサイズを読みに行って正しく解放している。
>619 >605
621 :
デフォルトの名無しさん :2012/10/31(水) 17:10:08.11
Visual C++ で、どのプロジェクトを実行しようとしても同じプロジェクトが実行されてしまういます。 ソリューションプロジェクトの中にいくつかプロジェクトを用意しているのですが、どのプロジェクトを実行しようとしても、必ず一番上にあるプロジェクトが実行されてしまいます。 手順としては 1.ソリューションエクスプローラーから特定のプロジェクトを右クリックしてリビルド 2.デバッグなしで開始 です。 別のソリューションプロジェクトを作成すれば別のプロジェクトを一つだけ実行できるようになるのですが、大変面倒なため一つのソリューションプロジェクト内で個々のプロジェクトを実行できるようにしたいです Visual C++2010 , WIndows 7 64ビット
まあ確実なのはその右クリックでスタートアッププロジェクトに設定、 してやればいけるけど、デバッグなしで開始を右クリックメニューに入れちゃうとか
>>621 その一番上のプロジェクトが太字になってたら
>>622 の言う通りスタートアッププロジェクトに指定されてる
624 :
デフォルトの名無しさん :2012/10/31(水) 17:51:31.75
おお、なるほど。ありがとうございます ちなみにスタートアッププロジェクトをどのプロジェクトにも設定しない方法はありますか? 難しいプログラムは作らないためにひとまとめでデバッグするような機会はないので、可能であれば外したいです
そんなの実行しなきゃいいだけだろ
>>624 どのプロジェクトにも設定しないと言う事は実行しない事になる
つまりビルドだけすれば望みの動作になる
エラーの内容をコピペしろよ
Win32APIへ帰れ
あっちに答え書いてあったな
VC++2008のプロジェクトの設定で文字セットを選択できます。 「マルチバイト文字」と「Unicode」は分かるのですが、 「設定なし」とは具体的にどういう扱いになるのでしょうか?? 「マルチバイト文字」としたときの記述法でコンパイルできるので、 「マルチバイト文字」になっているのでしょうか??
632 :
デフォルトの名無しさん :2012/11/03(土) 17:48:58.88
そういう処理系依存の記述は互換性をそこなうので避けるべき VC2005デコンパイルすると誤動作するとか、もしくは2010や2012で誤動作するとかが起きかねないから。 逆に、他の処理系から移植しようとして(つまり手元にあるのが2008じゃない)の質問ならしかたないが...
1、リストボックスにflvのドラッグドロップしたファイル名を表示 2、ボタンを押したらファイルを一つずつ指定のアプリで開く 3、開いたアプリにキー操作を送る 4、CPU使用率で2の動作を連続してできるようにする これがやりたいことなんだけど1の段階で躓いてます。 ヒントお願いします。
DragAcceptFiles
635 :
631 :2012/11/03(土) 22:24:51.72
>>632 >そういう処理系依存の記述は互換性をそこなうので避けるべき
処理系依存とはどの設定のときのことを指すのでしょうか?
Unicodeの場合、w付きのAPIやリテラル文字列の前にLを付けたりと、
気持ち悪いので使いたくないです。
Unicode、マルチバイト文字のいずれでもコンパイルできるようにする
t付きのマクロも同様です。
これらを付けなくてもよい「設定なし」あるいは「マルチバイト文字」が
良いのですが、デメリットは何でしょうか?
多言語対応が難しいかもしれませんが、日本語だけでよいです。
636 :
デフォルトの名無しさん :2012/11/03(土) 23:22:40.63
コンパイラのバージョンが変わったりWindowsバージョンが違ったりすると挙動が変わる危険があり、 予期せぬ誤動作でデバッグ作業が長引く恐れがある。 >Unicodeの場合、w付きのAPIやリテラル文字列の前にLを付けたりと、気持ち悪いので とか、 >Unicode、マルチバイト文字のいずれでもコンパイルできるようにする、t付きのマクロも とかが、まさに、その危険を避けるための手順。 Windowsバージョンが変わると動作しなかったり動作異常を引き起こしたりしてユーザが苦労するソフトを作る茨の道へまっしぐらだぞ、それ。
637 :
631 :2012/11/03(土) 23:32:07.17
>>636 分かりました。
w付きAPIやL付きリテラル文字のほうがまだマシなので、
Unicodeが書くことにします。
ありがとうございました。
638 :
デフォルトの名無しさん :2012/11/03(土) 23:43:01.63
まあ、長く使う可能性がなくて今だけ動けば充分、 今後の再利用の可能性も無い。 という条件だったら、移植性とか互換性を考える必要は無い。
初歩の第一歩な質問で恐縮ですが、お助け下さい。 メッセージボックスが出ません・・・ MessageBox(NULL,"Hello,world!","Foo", MB_OK); とすると、NULLとMB_OKが「定義されていない識別子」でコンパイルエラーとなります。 どうすれば解決できますか。 C++でコンソールアプリケーションはゴリゴリ書けますが Windowsフォームアプリケーションは今日始めたばかりです。 環境はVisualC++ 2010 Express、Windows7 64bitです
C++/CLIに手を出すのはやめろ
641 :
639 :2012/11/04(日) 00:13:08.19
>>640 Windowsアプリを作りたいだけなので、他に良い手段あればそれにしようと思います。
おすすめあればご教示頂けませんか。
C++しか知りませんが、必要とあれば他の言語も覚えます。
スレチでしたら誘導頂けると有り難く・・・
win32apiゴリゴリしてもいいけど フォーム使おうとしてC++/CLIはありえん C#覚えて使った方がよっぽどいい
643 :
デフォルトの名無しさん :2012/11/04(日) 08:15:00.90
C++/CLIってそんなにいけないものなの? C++/CLIでフォーム作って処理は全部C++&APIで書いているけど 画面周りだけならそんなに使い勝手悪くないよ
まあそれしか知らないならそれでもいいよ
>画面周りだけならそんなに使い勝手悪くないよ
C# で同じ処理を書いた後に同じことを言えるかというと。。。
言語として悪くはないと思うけど、C# と同じことを出来るようにするためにメンドくさくなってるなら、
初めから C# で書いた方が色々と素直なので、自分は C# で書くことの方が多い。
自分は C++ 好きだから、最初は C++/CLI で書いてたんだけどね。
で、後学のために、いろいろなことを知ってる
>>644 さんに問題点をご教示いただきたいなぁ。
646 :
デフォルトの名無しさん :2012/11/04(日) 17:49:20.04
DLLで異種言語結合しなければならないならC++/CLIもあるかもしれないけど。 しかし、GUI部分はC#、カーネル部分はC++、でファイルを通してデータの 受け渡しができるならGUIにはC#を使う。
1、リストボックスにflvのドラッグドロップしたファイル名を表示 クリアー 2、ボタンを押したらファイルを一つずつ指定のアプリで開く 3、開いたアプリにキー操作を送る 4、CPU使用率で2の動作を連続してできるようにする 何とか1はクリアーしました。2のリストボックスに表示された拡張子がflvの ファイルを開くというので止まってます。 理想は、リストボックスに表示されてる複数のファイルを関連付けされてる アプリで開きキー操作を送ることです。ヒントください。
>リストボックスに表示されてる複数のファイルを関連付けされてる アプリで開きキー操作を送ること 複数選択した項目を取りだす方法はわかってるの? 関連付けされたアプリを起動する方法がわからないの? 開いたアプリにキー操作を送る方法がわからないの? どれよ
>>648 全部わかりません。
そもそもなんだけどリストボックスにファイル名を表示することもあってるかどうか・・・
リストボックスに表示されてるflvファイルを順に開きキー操作を送るというプログラムなんだけど
1、ボタンを押しリストボックスのファイル開きキー操作送る
2、CPU使用率を確認し1の動作をする
3、リストボックス表示のファイル全てを1、2の動作で終了させる
>>649 Win32APIの範囲になってしまってるよ
とりあえずShellExecuteで関連付けを使用したオープンができる
後はあっちで聞いた方がいい
一個ずつ解決した方がよさげ。 答える方も個別なら回答しやすい部分もあるだろうし。
wstring で a = L"3A5f"; みたいな文字列を uint とか ulong に変換する関数はありますか?
unsigned long h; wistringstream w(a); w >> hex >> h;
655 :
デフォルトの名無しさん :2012/11/07(水) 22:53:54.01
656 :
デフォルトの名無しさん :2012/11/07(水) 23:39:43.50
古いC++本のサンプルプログラムなんですが、 #include <stdio.h> int main() { int x; printf("%d\n", x); /* xの値は不明*/ printf("%d\n", x=4); /*代入式 x = 4の値を表示:*/ printf("%d\n", x); /* x に4が代入されたかを確認*/ x = 6; /*xに別の値を代入*/ printf("%d\n", x); /* xに6が代入されたかを確認*/ x = x + 4; /*x の値を 4 大きくする*/ printf("%d\n", x); /*それを確認*/ return 0; } をVisualStudio2010で実行すると、必ず 4行目 x; のところでコンパイルエラーになります。 本の通り書いてるのですが、本当なら、表示が 750 4 4 6 10 と、なるそうなんですが、何がおかしいのでしょうか? 教えて下さい。
>>656 でコンパイルエラーになったときのメッセージを含めてそのまま貼って
>>658 Run-Time Check Failure #3 - The variable'x' is being used
Without being initialised.
(Press Retry to debug the application)
とでます
そのまんまの意味だろ…
>初期化されていないローカル変数 'x' が使用されます printf("%d\n", x); /* xの値は不明*/ 意図してやっているんだから、それで良いんじゃない? それでコンパイルが通らないなら、nt x=750; とかする
コンパイルエラーじゃなくてランタイムエラーだと思うの
どうして750になるんだ? どういう値になるか不明なんじゃないの?
その古い本とやらには不定値になるって書いてるんじゃないか? ただ例として出しただけで
その本に載せるためにテストした結果が750になっただけで どの環境でも750になるわけではない
666 :
デフォルトの名無しさん :2012/11/08(木) 20:55:53.60
環境:Windows XP(32bit)、VC++ 2005 ある与えられた文字列をバイナリに変換して16バイトのバイト配列に入れる 与えられる文字列は、バイナリ変換した時に128bitまでに収まる数値の文字列とする という問題で困ってます 例: "1234" →1234(4D2h) →00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,00h,04h,D2h で、QWORD以上は整数値にできずに困っています。 "18446744073709551616" →10000000000000000h →00h,00h,00h,00h,00h,00h,00h,01h,00h,00h,00h,00h,00h,00h,00h,00h, どのように処理すればいいのでしょうか?
宿題は宿題スレに
668 :
666 :2012/11/08(木) 21:05:41.81
番号がオーメンに・・・
>>667 学生ではないのですが、通信仕様を渡されてやっといてという事なので、一応宿題になるのですかね?
授業単元とかないので迷ったのですが、向こうで聞いてみます。
ありがとうございました。
ShellExecute(NULL, "open", "
http://www11.plala.or.jp/studyhall/ ", NULL, NULL, SW_SHOW);
この文を消すもしくはコメントアウトすると
エラー1error LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています。
というエラーがでます。なんで文を消すだけでエラーになるのかがわからない。
今確認したらまったくなにも書いてない状態でのデバックでも 同じエラーでる・・・ファイルがひらけないってやつが
失敗して終了してるつもりが ウィンドウの見えない ゾンビプロセスが残ってるんだろ タスクマネージャで心当たりのあるexeを終了させてみれば桶
1>------ ビルド開始: プロジェクト: 999, 構成: Debug Win32 ------ 1> stdafx.cpp 1> 999.cpp 1> AssemblyInfo.cpp 1> コードを生成中... 1> .NETFramework,Version=v4.0.AssemblyAttributes.cpp 1>LINK : fatal error LNK1104: ファイル 'OLDNAMES.lib' を開くことができません。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== こんなエラーがでる。まったくプログラムとか記載する前の状態です。
path
駄目だ・・・全てにおいてビルドできない
再インストールしても駄目ってなんだよ・・・ 俺のc++人生終わったかw まだ入門レベルなのに('A`)
1つ質問。 VC++って、1文字目が数値のプロジェクトって作れるんですか?
vc2008をコマンドラインで使ってるんですがc1074 idbはpdbファイルには無効な拡張子です とでるんですがmain(){}だけのファイルをコンパイルしてもでます。 解決方法ありましたらおねがいします
CString が含まれる定義体でメモリ確保したい場合はどうすればいいですか? typedef struct _HOGE { CString str1; CString str2; CString str3; } HOGE; HOGE *hoge = (HOGE*)HeapAlloc(GetProcessHeap(), 0, sizeof(HOGE));
HOGE *hoge = new HOGE;
構造体には実体じゃなくてスマポ突っ込めば?
CString str[3];
2010アカデミックってとっくのとうに販売終わってたんだな……
686 :
デフォルトの名無しさん :2012/12/02(日) 14:07:19.69
VC++でフォームアプリケーションを作ろうと思い、プロジェクトを新規で作ったのですが コードをそのまま(変更せず)にビルドしようとするとエラーが出ます どうしたらいいですか?
please show us error messages
This problem not an error. It's my wife. hahaha
リソースダイアログを使わずに、IEの表示部分(IEコンポーネント?)を特定のウィンドウの子コントロールとして追加したいです。 が、検索してみるとリソースダイアログ上で張り付けたコントロールの取得方法ばかり見つかり、結局方法が分かりませんでした…。 コモンコントロール(EditとかTreeViewとか)と同じような感じで使用したいだけなのですが、 どのようにすると可能でしょうか。 Doc/Viewの分離はしておらず、CHtmlViewは利用できませんでした。 comでIWebBrowser2をCoCreateInstanceしてみた所、成功してはいたようだったのですが HWNDの値の取得もCreateWindowもしておらず、どのようにサイズ変更すればよいのかなど分かりませんでした。 技術的な面では、Vista以降あたりで動作してくれればよいと考えております。 ご助力お願いいたします。
self.ie = iewin.IEHtmlWindow(self, -1, style = wx.NO_FULL_REPAINT_ON_RESIZE) self.ie.LoadUrl(self.current) self.ie.Navigate(URL)
691 :
デフォルトの名無しさん :2012/12/11(火) 16:06:33.83
C言語のみ経験があるプログラミング初心者です。
>>66 の人と全く同じことをしたいと考えています。
ヘッドマウントディスプレイのセンサー値を取得して、
別プログラムの中での視点移動に連動できるようにしたいです。
公式のサンプルは問題なく実行できました。
ウィンドウに表示したりといったGUIの部分は不要で、
数値だけ取得して、ソケット通信で別プログラムに渡せば実現可能だと
考えていますが、サンプルを眺めてもどこをどういじればいいのか分からない状態です。
サンプル見てもわかりませんの人に ちょちょいっと教えてどうにかなるとはとてもじゃないが思えないんだが なのでこんな場所ではなく、まともな人に対価を支払って教えてもらうのが一番正しい選択だと思いました。
コンストラクタでエラーをNULLで返したいのですが 戻り値を指定出来ません 例外をださずにNULLを返すにはどうすればいいのでしょう?
失敗するような処理は、別のメンバ関数などに外だし?する。
中だし派だけどどうしたらよいですか
ゴムでも付ければ?
俺は昆布だしだな
かつお風味の
GetComm○○、SetComm○○系の関数が1つも成功しないです。
OSはXPSP3、開発はVS2010を使用、
プログラムの内容は下記と大体同じで、違うのはCOM1ではなくてパイプを使っている点。
http://msdn.microsoft.com/en-us/library/aa363201.aspx 書いているプログラム(クライアント側)
HANDLE hpipe = CreateFile(L"\\\\.\\pipe\\test", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if(hpipe == INVALID_HANDLE_VALUE) return;
BOOL ret;
COMMPROP prop;
DCB dcb;
COMMTIMEOUTS timeout;
ret = GetCommProperties(hpipe, &prop); // ステップ実行で確認→1つも成功しない。 @err=1
ret = GetCommState(hpipe, &dcb);
ret = GetCommTimeouts( hpipe, &timeout); // SetCommTimeoutsもできない。
// ReadFile, WriteFile は成功する。
CloseHandle( hpipe );
よろしくおねがいします
普通にパイプには使えないだけなんでしょう
701 :
699 :2012/12/20(木) 13:03:23.31
>>700 パイプはタイムアウト設定できないんですか?
702 :
699 :2012/12/20(木) 13:47:31.72
Win32APIのGetOpenFileNameをコールするとVC++2008EEで 「Win32スレッド」というスレッドが3つ立ち上がり、 ダイアログを閉じた後でもそのまま居残り続けます。 何なんすかこれ?
適当にコールスタック見ればわかるのでは?
706 :
703 :2012/12/22(土) 21:37:31.37
>>704 オープンダイアログが開くところでブレークかけてコールスタック見てみましたが、
GetOpenFileNameをコールしている自分の関数より上のものは見られませんでした。
>>705 了解です!
.hと.hppの違いは何でしょうか
h->cのヘッダファイル hpp->cppのヘッダファイル
確かにそうなんですけども、拡張子の表記以上の違いはないのでしょうか .hでも.hppでも動作に違いが無いように思います 単にコンパイラがC++だから両方ともC++としてコンパイルされているということでしょうか
hpp は C++ のテンプレートとかを使用していてコードをヘッダファイルに書かなければならない場合に 「使われることもある」拡張子じゃなかった? C++ でも普通のヘッダファイルは .h だろ。
C++は #include <cstdio> とか #include <strstream> とか .h 無いのが普通
別に拡張子なんてただの決めごとで、動作に違いなんて出るわけない
トップウィンドウに対して SetWindowSubclass や SetWindowLongPtr でサブクラス化する場合に多重にサブクラス化するとエラーになってしまうので、既にサブクラス化済みかを判定するにはどうしたら良いですか?
トップウィンドウに対して SetWindowSubclass や SetWindowLongPtr でサブクラス化する場合に多重にサブクラス化するとエラーになってしまうので、既にサブクラス化済みかを判定するにはどうしたら良いですか?
GetWindowLongPtrでDefaultProcじゃなければでいいんちゃう?
>>715 すみません、説明が抜けていました...別プロセスのウィンドウがサブクラス化されているか判定したいのです。
>712 そう思い、VC++でソースファイル名をxxx.cで書いてコンパイルエラーがorz
includeなら変わらん。 コンパイルオプション付けるくらいなら拡張子替えるけどな。
>>716 多重にサブクラス化して
(そのサブクラス化をやめようとする以外の状況で)
どういうエラーになるのか分からないけど、
GetClassInfoExで元々のウィンドウプロシージャが取得できるかもしれない。
別プロセスのウィンドウに対してGetClassInfoExでそれが取得できるのか知らないけど。
Visual Studio 2010 で windws form にて chart control でグラフ表示をしています そこでchart controlの使い方で質問なんですが たとえばタイマーなどで以下のようなプログラムをループさせていて for(int i= 0; i>100; i++){ chart1->Series[0]->Points->Add(i); } コンパイルしてグラフをみていくとX軸が1づつ増えて自動でX軸のMAXを延長してくれますが このときにX軸を0からMAXまでではなく最新の20だけ(iが80ならminが60、max80)みたいに X軸の範囲を決めて使うことって可能でしょうか? よろしくお願いします
あるクラスの中でRegisterClassEx関数とCreateWindowEx関数を別個のメソッドの内部で呼び出すとCreateWindowEx関数がエラーを出す GetLastError関数によるとエラーは1407(Cannot find window class)とのこと 一方で、一つのメソッドの中で順に呼び出すとエラーなく実行された MSDNによるとCreateWindowEx関数が失敗する原因は、 ?パラメータに無効な値が指定された。 ?システムクラスを登録したモジュールが別のモジュールである。 ?WH_CBT フックがインストールされており、失敗コードを返した。 ?WM_CREATE または WM_NCCREATE のウィンドウプロシージャが失敗した。 の四つであるそうで、二つ目の「?システムクラスを登録したモジュールが別のモジュールである。」の項にあることが原因であるように思われます つきましては、質問なのですが、この「?システムクラスを登録したモジュールが別のモジュールである。」というのはどういう意味なのか(モジュールとは一体何のことを指して言っているのか)、 二つの関数を別のメソッドで呼び出すことはできないのかについて、どなたかご教示頂けないでしょうか
hInstanceの値が二つの関数で一致してないと言う意味じゃないかな
>>722 ありがとうございます!
このレスで自らの過ちが明確にわかりました。自分がまぬけでした
RegisterClassEx関数を呼び出すメソッドの方に、「this->hInstance = hInstance;」と書き加えたところ正常に動作しました
Web browserで広告クリックすると強制的にIEで開いてしまう のですが、強制的にweb browserの中で開く方法を教えてください VisualBasic2010
template関数の実装はヘッダ内部で書かないとリンクエラーを起こすようなのですがどうしてなのでしょうか googleで検索してみたもののはっきりと説明のされたサイトが見つかりません
ヘッダに全部書いとかないと たとえばstd::vector<int>とかしたときに定義が作成できないから
別にヘッダに書かなくても、関数の具体化の宣言をテンプレート関数のある翻訳単位に まとめておけばいいんだっけ? それが嫌なら全部ヘッダに書け、と
>リンクエラー
ソースファイルを複数に分けて作業するときに変数の宣言や受け渡しを分かりやすく説明してるサイトや書籍はありますか?
ここで聞けばいいよ
何かを作っているってわけではないのですが ソースファイルを一つですることに慣れてしまってコンパイルに掛かる時間だったり公開するときに恥ずかしかったりで分けてできるようになりたいたいと思ったのですが今までと勝手が違ったりで
>>729 C言語入門書の次に読む本
みたいなタイトルの本には、それっぽいのが載ってた
まあ、分割コンパイルでググれば良いと思う
丁度自分の欲しそうな本だったので早速ぽちりました ありがとうございます!
リンカの概念は難しいよな 今でもテンプレートとか使うとわかんなくなる
visual c++ 2008にでopencvを使ってプログラムを組み while文を終了した時にcmd.exeが終了しません。 コマンドプロンプトのアプリケーションの終了でも プロセスの終了でも終了できず、パソコンの電源ボタンを 押すしか対処できません。 ビルドも正常にできて、正常に実行されますが、 終了がうまくいきません、どうしたらいいのでしょうか?
atexit()すればいいんじゃないかな
CPUは正常に暴走しています
propertyキーワードって何をしているんでしょうか? また使う意味は?
>>739 つまり
propertyキーワードの中にgetとsetの定義がされてあって
入力のときはset,出力のときはgetが自動で使われるということ?
まあそんな感じ C#の機能の一つだったものを、VC++独自の拡張として導入したもの 「C# property」で検索すれば出てくる
cURLとlibcurlのライブラリを使うにはプロジェクトのプロパティにどう設定すればいいのでしょうか? ファイルはlibcurl-7.19.3-win32-ssl-msvc.zipとcurl-7.28.1.zipをDLしました。 環境はwindows7 64bit、Visual C++ 2010 Expressで、WIN32コンソールアプリです。
>>743 普通にincludeとlibの設定すれば行けると思うけど。
プロパティで言えば
VC++ディレクトリのライブラリティレクトリ、
C/C++の追加のインクルードディレクトリ、
リンカー 入力 の追加の依存ファイル、
の3つかな。
DLL使うならそれなりの設定やコピーもね。
745 :
743 :2013/02/03(日) 15:27:59.79
>>744 リンカー 入力 の追加の依存ファイルを設定したら動きました。
ありがとうございました。
746 :
デフォルトの名無しさん :2013/02/04(月) 21:50:40.98
VC++を使ってマウスショートカット的なアプリケーションを作りたいのですが、 特定のアプリケーションごとに動作を切り替えるような処理を作るのに 参考になるようなページはありますか? もしくはこういうワードで調べると出てくる、といったものでも結構です。 ご存知のかたお願いします。
GetForgroundWindow
A.hファイルで構造体を宣言し、B.cppで実体宣言してるはずなんだけど C.cppでメンバに値を代入すると波線が引かれ定義されていないと言われる でもそこで右クリックから宣言へ移動や定義へ移動をするとB.cppの実体宣言したところに飛ばされる いろいろ試行錯誤したけどついに意味がわからなくなりました どういうことなんでしょうか VC++です
C.cppでA.hをincludeしてないんだろう
B.cppの実体はC.cpp上、もしくはincludeファイル上でextern宣言されてる?
ただのインクルードしわすれだろ
ちなみに、ビルドしてエラーになる? インテリセンスでそういうのなら、正常な状態でもたまになったような。
試しにファイル名変えたら開けませんって返ってくるから インクルードは大丈夫なはず ファイル分割前は typedef struct tagABC { typedef struct tagXYZ { inti; doublej; }XYZ; XYZ xyz[10]; }ABC; ABC abc[5]; abc[0].xyz[0].i=1; みたいに書いてたんだけど (すいませんレス分けます)
これを分割しようとして A.hに typedef struct tagABC { typedef struct tagXYZ { inti; doublej; }XYZ; XYZ xyz[10]; }ABC; B.cppに ABC abc[5]; で、C.cppで abc[0].xyz[0].i=1;//識別子abcが定義されていません (abcに波線) で、ビルドしたら C.cpp(○○): error C2065: 'abc' : 定義されていない識別子です。 っていう状況 多分B.cppの実体宣言がちゃんと出来てないんだと思う あとXYZはこのままでいいのか疑問 でもB.cppでABCと同じようにしようとしたらエラー吐かれる
>>754 A.h内でextern ABC abc[5];
A.hをB.cpp C.cppでインクルード
使用したい.cppではextern無しでABC abc[5];
すみませんでした なんか焦ってて飛んでました わざわざtodoまで書いて下さってありがとうございます
みんな優しくてよかったね
759 :
デフォルトの名無しさん :2013/02/06(水) 17:07:25.80
同名関数の引数の型違いのつもりで bool Hoge(bool); int Hoge(int); を定義したのですが コンパイルしようとすると 区別出来ないと言われてるみたいです どうすれば回避できますか?
間違った int Hoge(bool); int Hoge(int); です
関数名を違うものにする
BOOLはダメだよ、BOOLそのものはintのtypedef
bool と BOOL まちがえてたのか
>>747 ありがとうございました。
Express使おうと思ってますのでWTLでも入れてみようかと思ってるんですが
MFCじゃなくてもこの関数って使えますか
こんないいスレだったのか
どうせ自演なんだし マスゴミのやらせや印象操作と同じで 捏造やりたい放題
自演、自演ってうるさい。おまえこそ常習犯だろ。 ふつうは、自演なんていう発想をしない
ブラウザ
最近 急に大量のpdbを開くようになっちゃったんだけど そのせいでデバッグが始まるのに10秒くらいかかる ntdllのpdbなんていらないよー どうしたらいいの
オプション→デバッグ→シンボルのリストのチェックを外す
ソースの総行数知りたいです
VS のcl で定義済みマクロ一覧を表示するにはどうしたら良いでしょうか? gcc -E -dM -x c++ -std=c++11 /dev/null | sort みたいなのと同じことができればOKです cl /E までは同じようなオプションがあるんだけど、 -dM 相当のオプションってどれなんでしょうか? cl /? 見てる限りだとわからないです・・
ヘルプ。 途方もないコードのデバック途中で寝たくなったときってどうしてる? 今、言ったん寝て昼から同じ所スタートでデバックし直したいんだけど…
>>775 状況が許されるなら寝ればいい。頭が硬くなってるならそれ以上のものはない。
許されないなら、エナジードリンク系でものみながらしなない程度に頑張れ。
起きる手段があるなら20分くらいの仮眠が効く
チームでやってるなら、リーダーに要請して順に1時間くらいずつ仮眠を取るのが最善なんだけどね。 疲れてるときに単純にひとりで寝た日には起きたときにはすべてが終わってたりするから怖いよな。。
1時間だと脳が睡眠体勢に入ってしまうので、、、寝るための準備時間というのなら そんなもんかなあ。
今まで初期状態でメインプロシージャまでやってくれる形でやってたけど 自分の型みたいなのが出来たから空のプロジェクトで作るようになった 今までに作ったソースを全て自分の型Verに書き換えないと なんか仕事やり残した感があって気持ち悪い 他の人はこういう経験ある? あるけど書き換えずに新しいのだけ自分の型Verにしてる?
気になったやつだけやってる
プロとしてなら、完成品に対しては出来ない。品質以前に必要な手順がありすぎだし。 趣味としてなら、次に必要になったときに最初から作り直す。
>>781 分かる分かるw
自分の場合は、新しく作るときに適用するようにして、
過去のは基本的にいじらないなぁ。
でも、新しく作る度に洗練されていく感があって楽しいよ。
他の人も経験あるんですねありがとうございました
サブクラス化されたプロシージャ外の変数へアクセスする方法は ユーザー定義のメッセージを使用してアドレスを渡すくらいしかないですか? サブクラス化する時に一緒に渡せると楽なのですが
グローバル変数
788 :
デフォルトの名無しさん :2013/03/03(日) 21:35:51.87
いっぱいありすぎて困る メッセージの方法知ってるならそれ使えばいい。どんな方法でも渡せればいいんだから多少効率悪くても気にするなって データ量や用途によって使い分けるものだから、それでも気になるならマルチしてないでぐぐって解決しとけ
SetWindowSubclass(hWnd, Proc, id, data); RemoveWindowSubclass(hWnd, Proc, id); DefSubclassProc(hWnd, Msg, wParam, lParam); でいいんじゃね
マルチ見当たらないぞ レス付きにくくさせるために言ってるのか?
VIPでやってたんだよ
URL無しって事は後はわかるな
>>789 ありがとうございます
dataとして一緒に渡せました
794 :
デフォルトの名無しさん :2013/03/10(日) 16:49:11.64
プログラミング初めて間もない者です 2010のCLRのWindowsフォームアプリで 一問一答形式の問題を作ってるんですが 回答を入力した後、正解かどうか判別して結果表示するプログラムはどうすれば作れますか? 問題文のLabelに文を入れ、回答欄と結果表示用のTextBoxとLabelを置くところまではできたんですが
C#じゃいかんの?
VC++のスレで何言ってんの?
だからいかんのか聞いておる
>>795 >>797 VisualC#最適ってことはよく聞くけど、実感としてにどれくらい便利か分からない(理解できる知識もない)から
C#を独自に学ぶべきか判断できない感じです
>2010のCLRのWindowsフォームアプリ これをそのレベルから始めるなら、C#で同じことやるやり方覚えてから C++に戻った方が進みが早い気はする・・・ 回答したらボタンかなんか押して、そのタイミングで判定するんじゃないの? ボタン並べてダブルクリックすれば、メソッドできるからそこでやればいいと思うよ。
たとえば、カンマ区切りのテキストファイルかなにか用意しといて(こんなの) 1,質問1,選択肢a,選択肢b,選択肢c,答えb<CR+LF> 2,質問2,選択肢d,選択肢e,選択肢f,答えd<CR+LF> 3,質問3,選択肢g,選択肢h,選択肢i,答えi<CR+LF> テーブルに突っ込んで、順次それ表示して「答え合わせ」ボタン押したら答えと比較して合否表示 する感じでいいんじゃねーの?まずは
ラベルに文字列を表示する方法 TextBoxに文字列を表示する方法 フォームに答えを選ぶボタンをおいて、そのボタンが押されたかどうかを判別する方法 まずはこの3つができるようにならないと。
>>798 言語問わないならどれで書いてもいい、むしろ求める方向(言語学習したいのか、ものが出来上がればいいのか)
にしたがえばいいのだよ
http://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2010express.html これやってるんだけど最後のデパックでエラーになってしまう
1>------ ビルド開始: プロジェクト: test, 構成: Debug Win32 ------
1> DrawPixel.cpp
1>c:\users\www\documents\visual studio 2010\projects\test\test\drawpixel.cpp(1): fatal error C1083: include ファイルを開けません。'DxLib.h': No such file or directory
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
てでるんだけどどこが悪いんですか?
VisualC++ 2010 Express Edition のWin32です
4.DXライブラリを使用するためのプロジェクトの設定を行う を全部行ってないから
>>803 サイト見てみたけど、そのエラーは
↓がうまくできてない
E 『追加のインクルードディレクトリ』の項目にDXライブラリのパッケージ内に入っている
『プロジェクトに追加すべきファイル_VC用』フォルダのパスを入力してから、
再度ダイアログ右下にある『適用』ボタンを押します。
( パスの例→ c:\DxLib_VC\プロジェクトに追加すべきファイル_VC用
なお、DXライブラリをマイドキュメントフォルダに入れるとこれらのパス指定が面倒になりますので
DXライブラリはなるべく浅いフォルダに入れておくことをお勧めします )
HelloWorldできた!!!
おめでとう!!
ありがとう!!!!!
セキュアな関数について質問なのですが strcpy_s(buf1, n, buf2) strncpy_s(buf1, n, buf2, m) memcpy_s(buf1, n, buf2, m) memmove_s(buf1, n, buf2, m) のn > mが明らかな時は strcpy_s(buf1, m + 1, buf2) strncpy_s(buf1, m + 1, buf2, m) memcpy_s(buf1, m, buf2, m) memmove_s(buf1, m, buf2, m) としても問題ない・・・ですよね? またn > 100, m < 10の時 memcpy_s(buf1, 50, buf2, m) みたいに適当な値を入れるのはあまりよくないのでしょうか? これならいっそのこと警告を無視して「_s」の無い関数を使ったほうがいいのでしょうか?
nはbuf1のサイズを指定する。 それ以下でも動くけど使い方としては間違っている。
代入先のバッファーサイズ指定だから、質問的に根本的に理解できてないと思う 中途半端に_sを使うぐらいなら、警告無視して従来のでやってた方がいいと思うよ
812 :
809 :2013/03/12(火) 02:03:10.05
すいません、例えば char buf[100] = "aaabbbcccdddeee"; char *buf1 = strchr(buf, 'd'); char buf2[] = "CCCDDD"; memcpy_s(buf1 - 3, sizeof(buf) - (buf1 - 3 - buf), buf2, 3); みたいな時 memcpy_s(buf1 - 3, 3, buf2, 3); としても期待した結果(buf:aaabbbCCCdddeee)が得られたので計算するのが何だか無駄に思えて・・・ 上の第2引数の計算式もあってるか不安になりますし。 でもやっぱり下では何か問題があるのでしょうか?
ふええ…変数こわいよぉ…
無駄に思えるも何も、_sを使う意味合いを根本的に間違えてるから、_sを使わなくていいと思うよ
>>812 >すいません、例えば
>char buf[100] = "aaabbbcccdddeee";
>char *buf1 = strchr(buf, 'd');
>char buf2[] = "CCCDDD";
>memcpy_s(buf1 - 3, sizeof(buf) - (buf1 - 3 - buf), buf2, 3);
strchr(buf,'d')で得られるポインタの3文字前が有効なんて仮定の話はしたくない。
>memcpy_s(buf1, sizeof(buf) - (buf1 - buf), buf2, 3);
これなら正しい
charが1byteかどうか分からないから、つかうならsizeof(char)で割っておくべき
charは1byteだと規格で決まっています
そういう思い込みはドツボることがあるからやめたほうがいいと思うよ
charは1バイトだろ 1バイトの幅が8ビットとは限らないけど。
BYTE型はいつでも1バイトだと思ってたことがありました…
821 :
809 :2013/03/12(火) 12:12:41.81
>>814 少し調べ直しました。意図しない領域への書き込みを防ぐためですよね。
書き込み先のサイズが書き込むサイズより大きいのが明らかなら
この問題は起こりえないので_s無しの関数を使った"方がいい"、と解釈してもいいですか?
警告を消すためだけに_s付きの関数を使ってその上書き込み先のサイズの計算を大着するのはやっぱ言語道断なんでしょうか・・・
>>815 それは考えてなかったです。
確かに計算したアドレスが有効と断定するのは良くないですよね。
ただ実際有効で無いと困るので3行目と4行目の間に
if (buf1 - buf < 3 ) return 0;
を挿入しようと思います。これなら問題無い・・・ですよね?
適当なことやるくらいなら _CRT_SECURE_NO_WARNINGS 定義した方がまだまし。
823 :
809 :2013/03/12(火) 12:53:07.25
>>822 そういう風に警告を消せる事は知りませんでした。
これを定義して書き込み先のサイズが大きいところは_s無しの関数を使うことにします。
みなさんありがとうございました。
>>822 だな。仕事なら中途半端に使われると逆に困る。趣味なら_sは要らないと思う
>>812 の例なら
strchrでNULLが返ったときのチェック
buf[-1]やbuf[100]に書き込まないようにチェック
この2つのエラー処理をしておけばいいというか、_sを使うよりそうしといた方がいいし、
もっと言えばstrcpyやstrcpy_sなんて捨ててCStringA::Replace使った方がいいでしょ
825 :
809 :2013/03/13(水) 14:37:13.19
>>824 趣味です。
ありがとうございます、大変参考になります。
CreateWindowExのdwStyleパラメータに、既存のウィンドウからGetWindowLongで取得した値を使うとエラーが出ます(87, パラメータが違います) そもそもCreateWindowExで新しいウィンドウを作った直後にGetWindowLongでdwStyleを取得すると、最初に指定した値とは全然関係のない値が帰ってきていました どうすればいいのでしょう
827 :
デフォルトの名無しさん :2013/03/13(水) 22:23:30.13
>>826 ウィンドウのクラス名とスタイルの値をさらせ
http://codepad.org/wt2IZYYA 明解C言語入門編では このコードに12と入力すると0 1 2 3・・・
と数字の間に間隔が空くはずなのですがコードを打ってデバッグしてみると間隔があきません。
01234・・・ という感じになってしまいます。
環境はVisual C++2010 Expressです。
何回も見なおしたのでコードの打ち間違いではありません。
どうすれば間隔が空くのでしょうか?
%d が
printf("%d ",i++);
832 :
830 :2013/03/14(木) 01:10:31.16
すみません、間違えて送信してしまいました。
>>828 %d が数字部分だから
" %d"または "%d "のように前か後ろに空白を入れればよい
>>832 ありがとうございます。
よーく見てみたら本には空白空いてました・・・
putcharが原因かと思ってたのにここだったとは
本も読めないヴァカ
何故急に煽ったしww
>何回も見なおしたのでコードの打ち間違いではありません。
理由がわからないのに、自分の間違いではないと確信する雑魚は死んだ方がいい。
初心者スレで煽ってるヤツこそ。
その本がどういう書き方してるのか知らないが 内容的にループと文字出力の極初期の基本的なサンプルなんだから動作内容の説明があるだろうに 全く理解せずただ漫然と入力して結果だけ確認しようとしてる姿勢には眉を顰めるな
おまえらプログラム1つ書けない初心者のくせして厳しいな
初心者が文法などより先に覚えなければいけない鉄則 ・自分が間違っている可能性が一番高い ・自分は間違っていないという判断が間違っている可能性が一番高い ・自分は間違っていないという判断は間違っていないという判断が間違っている可能性が一番高い
思い込みが一番危険 自分のコードを読み返すときは書いたことを忘れて 一旦頭を真っ白にしてから読むこと
ここはごく数人のヘタレどもがチンシコする糞スレです うまく答えられないときはエラそうになんだかんだいちゃもんつけてきます 看板に偽りスレなので素人が質問しても時間の無駄です わかったら相手にせず黙って去りましょう
846 :
デフォルトの名無しさん :2013/03/15(金) 22:07:33.54
このスレわかりやすいです。ありがとうございます。
初心者が初心者に嘘を教えるスレです
848 :
デフォルトの名無しさん :2013/03/16(土) 09:54:42.90
良く読み返してみると、「教える側も、勘違いしている部分」も、 ないとはいえないわな。
それはある意味あって当たり前だろ。 意図してウソ教えるのとは違う。
850 :
デフォルトの名無しさん :2013/03/16(土) 11:20:21.58
初心者が初心者に上級者のフリして教えてたら それはうそと言って良い
851 :
デフォルトの名無しさん :2013/03/16(土) 12:09:50.18
姉は精神障害者
俺は統合失調症
弟は知的障害者
854 :
デフォルトの名無しさん :2013/03/16(土) 20:54:35.81
兄は松崎しげる
妹はヤンキー
父は腎不全
御前等歯1級精神障害者 マジで何のつもり?
#include <stdio.h> #include <time.h> int main(int ac, char **av) { time_t time; struct tm t, *l; t.tm_year = 2013 - 1900; t.tm_mon = 3 - 1; t.tm_mday = 18; t.tm_hour = 8; t.tm_min = 0; t.tm_sec = 0; time = mktime(&t); printf("%ld\n", time); l = localtime(&time); printf("%d-%02d-%02d %02d:%02d:%02d\n", l->tm_year + 1900, l->tm_mon + 1, l->tm_mday, l->tm_hour, l->tm_min, l->tm_sec); return 0; } これで 1363557600 2013-03-18 07:00:00 という結果になるのですが、 なぜ一時間ずれるのでしょう?
普通はずれないと思うけどそれは謎だな
サマータイムある場所?
tm_isdstがクリアされてない。
862 :
デフォルトの名無しさん :2013/03/18(月) 21:50:58.55
>>858 t.tm_mon を 7 とかにするとずれないね
>7 とか じゃなくて1から12までやってどれがずれてどれがずれないのよ。 って本人だよね?他にもずれる人いるの? ずれてる人、PCの時刻設定でタイムゾーンどうなってる?
>>861 で解決でしょ。解決後にのこのこ出てきてボケる芸風?
865 :
デフォルトの名無しさん :2013/03/19(火) 13:54:58.72
>>864 >>862 はどうなんだ?
あと自分の環境でtm_isdstに何かセットして試してないだろ?
時差9時\
>>866 ずれる環境を用意できないゴミは参加資格なし。
どうしてこう場外乱闘が好きなんだ。おまえら。
870 :
デフォルトの名無しさん :2013/03/19(火) 21:51:38.82
>>858 Lと1の区別が付かないな。
大文字で書け。
どんなフォント使ってんだw
872 :
デフォルトの名無しさん :2013/03/20(水) 00:03:40.36
アイコンをシステムトレイに格納する 方法をどなたかご教授いただけないでしょ うか? 使用環境はWindows7 HomePremium VC++2010 Express です。 d.hatena.ne.jp/peryaudo/20100512/1273671808 を参考にして書いてみましたが、 NOTIFYICONDATAが宣言されていな いと言われ、コンパイルが通りません でした。
windows.hをincludeする前に、 #define WINVER 0x0501 とか入れるんじゃなかったっけ
馬鹿には無理
すげぇ・・・
878 :
877 :2013/03/20(水) 18:46:54.36
いや、自己解決だから違う理由かw
基底クラスと派生クラス両方のコピーコンストラクタ、代入演算子を呼び出すにはどのようにすれば良いのでしょうか
はよ
881 :
デフォルトの名無しさん :2013/03/27(水) 22:31:38.82
ちょっと待て 何がやりたいんだ?
>>881 やはりそうするしかないのでしょうか
コンストラクタやデストラクタは派生クラスの側で明示的に書かなくとも良い
誤って書き込んでしまいました
コンストラクタやデストラクタは明示的に書かなくとも良いのにという思いです
>>883 今回やりたかったのは、参照カウントを持った基底クラスを継承することでコピーを管理するというものです
例えばLast()という関数で参照カウントが1であることを確認してからリソースを開放するなど
もちろん継承を使わなければ実装できないものではありませんが、クラス名の横にごにょごにょ書くだけで済むなら便利かなと考えたわけです
derived_class::derived_class(const derived_class& d) : base_class(...) {...} base_class::operator=(value);
>>884 派生クラスのコピーコンストラクタから、基底クラスのコピーコンストラクタを呼び出したいと言うこと?
はよ
>>886 そういうことです
勝手に呼ばれるものだと思っていたのですが、どうもそういう訳ではないようですね
>>885 これでうまくいきました
コピーコンストラクタでもこの書き方が出来たのは知りませんでした
レスありがとうございました
コンストラクタは何も書かなくとも自動的に呼ばれるのに対し、コピーコンストラクタは派生クラス側で明示的に呼び出してやる必要があるということのようです
やや不思議ではあります
>>884 に書いたことはコピーや代入は使わずに適当にAddRef関数でも作っときます
はよ
なんかとんちんかんなこと書いてるな… 参照カウントの値だかポインタだかを渡さないといけないのでコピーやらはしなければなりません まあ何でもいいですね、質問の本旨でもないですし
はよ
最高の頭脳はこんなところで油を売ってる暇はないし 暇があったとしてもとっくに他のコミュニティに移動してる こんな匿名の叩き煽りが日常茶飯事で自分にメリットが薄いようなところは 最高の頭脳でなくともまともな人間でもさっさと去るよ 他にコミュニティがない10年前なら最高の頭脳もいたかも知れないが、 いつの間にかいなくなって今ではその幻想だけが残ってる 最高の頭脳持ってる奴は他のコミュニティに行っても入っていけるから困らなかっただろう そしてそういったコミュニティで相手にされない奴が集まってるのが2ch
>>888 コンストラクタで自動で呼ばれるのは、デフォルトコンストラクタのみだけどね。
デストラクタは自動で呼ばれるけど、これは唯一にしか存在しないからだね。
c++は基本的に、全て明示するのが基本で、例外的にいくつかの自動があると思った方が良いよ。
894 :
デフォルトの名無しさん :2013/03/28(木) 15:34:23.65
なんかとんちんかんなこと書いてるな…
おい一つ上のスレッド開こうとしたらマウスがずれてこの開いただろうが糞スレ上げんな氏ねキチガイ
VC++2010をVistaで使用しています 空のプロジェクトを作成した時に ソース ファイル リソース ファイル ヘッダー ファイル この3つのフィルタがデフォルトで作成されるのですが デフォルトで作成されるフィルタが Main ProjectName みたいにカスタマイズした状態で作成されるようにしたいです デフォルトで作成されるフィルタを変更するにはどうすればいいですか?
wizardの生成用jsファイルを自分の好みに応じて編集すればいい
カスタムウィザードのキーにたどり着いたのでやってみます ありがとうございました!
Express Editionで
>>897 をやる事ってできる?
カスタムウィザード項目が無い
検索能力が皆無のお前には無理
>>901 ウィザードではなくて
default.js
Templates.inf
.vsdir
.vsz
これらを直接変更加えて追加したら出来ました
ありがとうございました
構成プロパティにある作業ディレクトリをDefault.jsで指定するにはどうすればいいですか?
Main.exeからA.dllを呼んでA.dllからB.dllを呼んだ場合 A.dllのエディットコントロールではキー入力が処理されるのに B.dllでは処理されません どうすればB.dllのエディットコントロールでもキー入力が処理されるようになりますか?
TranslateMessageとDispatchMessageをちゃんと呼んでるか確認
>>903 var config = proj.Object.Configurations('Debug');
config.WorkingDirectory = Path;
でいけるはずだがエラーになるな
Default.vcxprojに
<LocalDebuggerWorkingDirectory>Path</LocalDebuggerWorkingDirectory>
追加したらいい
>>905 MainでTranslateMessageとDispatchMessageを呼んだら実現できました
さらにリターンキーでデフォルトボタンが押された動作にしたかったので
メッセージループ内でDLLダイアログハンドルを保持させるstatic変数を宣言
→DLL内でFindWindowを使用してMainウィンドウハンドルを取得
→ユーザーメッセージを使用してDLLからMainへダイアログハンドルを送信
→IsDialogMessageで通常通りの分岐
最終的にはこのような感じに落ち着きました
ありがとうございました
VisualC++2008Expressです。 1つのソリューション内に2つのプロジェクト、A(exeプロジェクト)、B(DLLプロジェクト)を作ったとします。 AとBは同じモジュール(C++コード)を共有しており、Aでコンパイルした結果の.objをBのコンパイルでリンクさせたいとします。 このとき、対象となる共有モジュールをBでリンクさせるためには以下の方法があります。 方法1: ・プロジェクトAに共有モジュールをソリューションエクスプローラに登録 ・プロジェクトBに共有モジュールをソリューションエクスプローラ上でプロジェクトAからコピーしてやる 方法2: ・プロジェクトAに共有モジュールをソリューションエクスプローラに登録 ・プロジェクトBのプロジェクトのプロパティのリンカ設定で追加の入力から共有モジュールの.objファイルを指定する なお、共有モジュールは複数あり、以後追加されていきますし、DLL化対象は都度変更します。 上記いずれの方法にしても、いちいちコピーやプロパティの変更が面倒です。 もし、プロジェクトAで生成された.objファイルを自動でリンクしてくれたら楽チンです。 ソリューションエクスプローラ上で複数のプロジェクトに共有(リンク)されるようにできる登録方法はないでしょうか?? プロジェクトの依存関係を設定(BがAに依存)するだけではダメでした。
>>910 既にあるプロジェクトにリンク指定したいのか
新たに作成されるプロジェクトに初期値としてリンク指定したいのか
どっち?
プロジェクトC(LIBプロジェクト)を作成し、そこに共有モジュールを登録する。 それが必要なプロジェクトにCへの依存関係を設定する。
912 :
909 :2013/04/04(木) 22:53:29.64
>>910 前者のほう、既にあるプロジェクト間でのリンクです。
>>911 なるほど、その手がありますね。
明日会社でやってみます。
その手がってより、王道だけどな。
dllプロジェクトを作成してビルドする時に.expファイルとかのdll以外のファイルもdllと同じ場所に出力されるのが嫌なので 全般->出力ディレクトリ-> リンカー->全般->出力ファイル-> この2箇所を変更したのですが warning MSB8012: TargetPath() が Linker の OutputFile プロパティ値 () と一致しません。 このため、プロジェクトが正常にビルドされない可能性があります。 この問題を解決するには、$(OutDir)、$(TargetName)、および $(TargetExt) の各プロパティ値が、%(Link.OutputFile) で指定されている値と一致することを確認してください。 と警告が出てしまいます dllファイルとexpの出力場所を変更してさらにこの警告が出ないようにするにはどうすればいいですか? #pragmaの警告無視以外の方法があれば教えてください
ビルド後イベントに必要なファイルだけをどっか適当なところにコピーするバッチファイルでも仕込む。
そういう手段しかないのですね ありがとうございました!
917 :
909 :2013/04/05(金) 20:19:11.56
918 :
デフォルトの名無しさん :2013/04/17(水) 20:31:53.57
等高線グラフを表示させたいのですが、 手段が見つかりません。 3D点(x,y,z)の点(データ)×数万個を線で結びつけて、色付けしたものです。 チャートコントロール(mschar)では等高線をサポートしておらず、実現できません。 System::Windows::Forms::DataVisualization::Charting::Chart どなたかご教授くださいませ! [環境] visual c++ 2008 express vs2012へ更新検討中
919 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/04/17(水) 21:00:16.72
>>918 自分で描画したいなら、遠近法で(x/(z+α),y/(z+α))みたいにして奥の方から描画。OpenGLの方が簡単で無難。
ピクチャコントロールのウィンドウハンドルを取得。 自前で描画する場合はウィンドウのDCを取得。 OpenGLで描画する場合はウィンドウにピクセルフォーマットを設定。
921 :
デフォルトの名無しさん :2013/04/17(水) 23:17:56.11
>>919 >>920 書き込みありがとうございます。
遠近法、自前で描写、…難しそうです
変数->ADD(xの値,yの値,zの値);
変数->全ての点を線で結ぶ;
変数->zの値を元に色付けする;
っていうレベルで考えてます
OpenGLとかDirectXなら可能でしょうか?
922 :
デフォルトの名無しさん :2013/04/17(水) 23:21:27.31
>>919 >>920 追加で…
ググってみたところ、Microsoft.Office.Tools.Excel.Char でグラフを作成できるのかな、
と思いました。(Excelだと等高線グラフを簡単に作成できるため)
Microsoft.Office.Tools.Excel.Charは何をするためにあるものでしょうか?
望みのことができますか?
できるなら、どのように導入(参照設定やら名前空間やらツールボックスやら)できますか?
マルチ
ヒント:OLE
926 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/04/18(木) 00:24:38.33
本当にVC++でやりたいの? 初心者ならEXCELのVBAでやるのが一番楽
一番楽 キリッ 言い切るならコードを示してみろよ
ここは初心者にURLの貼り方を教えるスレではない
windows上で,読み書きの両方ができる_popen()の拡張を作るにはどうしたらいいだろうか。 _popen()で開いた子プロセスに対して,コマンドを投げて,その結果をもらって,また次のコマンドを投げて・・・ ということをやりたい。 条件として,子プロセスに対して,改変を加えるのはなしの方向で。 Linux上ではできるみたいだが,Windows上ではできるのだろうか。 どなたか教えてください。 [環境] Visual C++ 2010 Windows 7/8
DialogBoxを、リソースファイルなしで、プログラムから動的にデザイン(サイズ、コントロールの追加など)することは 可能でしょうか? その場合、参考となるAPIを1つでいいので教えてください。 (それをもとに検索して他にも色々調べます)
「動的ダイアログ作成 vc」で検索
933 :
931 :2013/05/20(月) 21:32:37.16
934 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/05/20(月) 23:48:16.04
935 :
930 :2013/05/24(金) 08:41:11.60
>>934 大変遅くなりましたが,ありがとうございます。
キーワードを元にがんばってみます。
VC2008で AfxMessageBox()でコンパイル出来ない
Express ってオチか?
938 :
936 :2013/05/24(金) 15:02:37.67
あれ 出来そうな感じね。 久々にVCいじってみたら綺麗に忘れてる。 なんか勘違いしてるのかも。
AfxMessageBoxはMFCの関数。プロジェクトはMFCサポートしてるか?
940 :
936 :2013/05/24(金) 22:10:48.74
>>939 あう チェックしてるみます。 でもそれっぽい ハジー
941 :
デフォルトの名無しさん :2013/05/26(日) 04:59:13.13
2010のExpressについて質問です 1, TODOコメントを入れる時に日付とか名前を自動で入れられるようにできないですか? 要するにTODOコメントのテンプレを作りたいってことです 2, switchとかclass(アクセス指定子)とかのインデントを個別に設定出来ませんか?
942 :
デフォルトの名無しさん :2013/05/28(火) 23:26:59.24
Visual C++ 2010 Express - CRLを使用して、部活動分類ツールを作っているのですが
うまくいきません。
苗字とクラスをコンボボックスから選んで、該当する組み合わせがあれば
コピー専用のテキストボックスに所属している部活動名が表示されるプログラムです。
if文を使って処理をしようと思っているのですが、項目の編集で登録した
苗字、クラス名の要素をどうやって取得していいのかわかりません。
どうすれば、AddRange(gcnew cli:: array< System::Object^ >(数値) {}); から要素を取得し、
仕様通りに動くプログラムを作ることができるのでしょうか?
作りかけのプロジェクトを置いておきます。
http://kie.nu/11at
コード見たけど。 そもそもどうやって、名字とクラスと部活を結びつけようとしてんの? どこにもなさそうなんだが。 簡単な方法としては、上の3つを要素として持つクラスを作成して、その配列に生徒?を登録。 条件を入力されたら、上の配列の名字とクラス名とで照らし合わせて一致してれば その同じ要素にある部活名を表示でいいんじゃね。 検索の方法は、for ループで配列をまわして if でチェックでもいいし、LINQ が使えるならそれ使ってもいいし。 あと、ここで言うのもなんだが。その内容なら C# でやった方が。。。
944 :
デフォルトの名無しさん :2013/05/29(水) 21:16:22.37
C++を始めて間もないのですが教えてください。 _tmainのコンソールアプリのプロジェクトでMFCのクラスを使いたいのですが、 この場合はどのようにするのでしょうか?MFCのアプリだと派生クラスで定義しているのは 参考にしているプロジェクトで分かるのですが、コンソールアプリだとどうしたらよいのでしょうか
プロジェクト作るときにMFCにチェック
946 :
デフォルトの名無しさん :2013/05/29(水) 21:36:39.30
>>945 すみません説明不足でした。
参考にしているMFCアプリのソースがありまして、それは派生クラスを使って、外部のクラスを呼び出しているところまでは分かりました。
コンソールアプリでMFCのチェックを入れれば、とりあえず、同じ外部のクラスを読み込ませることはできたのですが、
読み込ませただけで、どのようにしたら使えるようになるのかがわかりません。
_tmainの場合とMFCの派生させて使う場合の使いわけが、混乱しています。
MFCを利用してるサードパーティ製のクラスの利用方法が聞きたいってことか。 それはエスパーじゃないと答えれないな
948 :
デフォルトの名無しさん :2013/05/30(木) 08:33:58.88
AfxWinInit関係を調べます。
VC++ 2008 の win32 console(マルチバイト文字セットを使用する) にて下記のようにエラーが出力されます。 ---- 0xC0000005: 場所 0xcdcdcdc9 を読み込み中にアクセス違反が発生しました。 0xC0000005: 場所 0xcdcdcdc9 を読み込み中にアクセス違反が発生しました。 プログラム '[15796] test.exe: ネイティブ' はコード -1073741819 (0xc0000005) で終了しました。 ---- ▽▽▽ ソース #include <stdio.h> #include <atlstr.h> int main(int argc, char* argv[]) { CString *pstr; pstr = (CString *)malloc(sizeof(CString) * 2); pstr[0].Format("test0"); pstr[1].Format("test1"); printf("%s\n", (char *)(LPCTSTR)pstr[0]); printf("%s\n", (char *)(LPCTSTR)pstr[1]); free(pstr); return 0; } △△△ CString型配列を動的に確保する方法がありましたら、 ご教示お願いします。
× pstr = (CString *)malloc(sizeof(CString) * 2); ○ pstr = new CString[2]; × pstr[0].Format("test0"); ○ pstr[0].Format(_T("test0")); ×printf("%s\n", (char *)(LPCTSTR)pstr[0]); ○printf("%s\n", (CStringA)pstr[0]); × free(pstr); ○ delete[] pstr;
>>950 丁寧に教えていただきありがとうございます
01: #include <stdio.h> 02: #include <atlstr.h> 03: #include <vector> 04: 05: int main(int argc, char* argv[]) 06: { 07: std::vector<CStringA> vstr; 08: int bk_cnt, cnt = 0; 09: 10: bk_cnt = cnt; 11: vstr.resize(cnt + 1); 12: if( bk_cnt == vstr.size() ) return 0; // メモリ再割り当て失敗の場合は終了する 13: printf("bk_cnt=[%d] size=[%d]\n", bk_cnt, vstr.size()); 14: vstr[ cnt++ ].Format("あああ"); 15: printf("vstr[%d]=[%s]\n", bk_cnt, vstr[bk_cnt]); 16: 17: bk_cnt = cnt; 18: vstr.resize(cnt + 1); 19: if( bk_cnt == vstr.size() ) return 0; // メモリ再割り当て失敗の場合は終了する 20: printf("bk_cnt=[%d] size=[%d]\n", bk_cnt, vstr.size()); 21: vstr[ cnt++ ].Format("いいい"); 22: printf("vstr[%d]=[%s]\n", bk_cnt, vstr[bk_cnt]); 23: 24: return 0; 25: } 26: ----【実行結果】---- 27: bk_cnt=[0] size=[1] 28: vstr[0]=[あああ] 29: bk_cnt=[1] size=[2] 30: vstr[1]=[いいい]
見にくいソースで申し訳ないのですが、
>>952 について教えて欲しいです。
VC++ 2008 の win32 console(マルチバイト文字セットを使用する)環境で実行しました。
std::vector を使い CStringA型の配列のメモリを動的に再割り当てするプログラムです。
vector::resize の成功か失敗かを知りたいのですが、この関数はvoid型なので、
戻り値がありません。
10行目、12行目にて、メモリの再割り当てが成功か失敗か判断しているつもりですが、
「成功(要素数が増加している)、失敗(要素数に変化なし)」という判断方法で、
合っていますでしょうか。
ご存じの方がいらっしゃれば、よろしくお願いします。
例外知らないとかお前なにを勉強してたんだ
>>954 すみません。あまり慣れていない手段(例外)は使いたくなかったので避けていました
>>952 では失敗を検知するのは例外(try , throw , catch)を使う方法しかないのでしょうか
ない
958 :
デフォルトの名無しさん :2013/08/06(火) 00:20:27.85
教えてください
959 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/08/06(火) 00:34:10.55
お断りします
ひどいわ
Visual c++でCを使う方法を教えて下さい。基本情報受けたいです。
ファイル拡張子をCにしたら?
ありがとうございます、普通にフォルダで見るとCのファイルに変わってるんですが、VisualC++ を開いた時、左側のソリューションのところでは画像がC++のファイルのままです。これは変わってるんですか?
よく分からんが変わってるんじゃない? CもC++も同じだから気にするな
ファイルの拡張子を表示する設定にしてないとか
968 :
デフォルトの名無しさん :2013/08/08(木) 22:14:37.79
>基本情報受けたい って意味がよく分からん
試験勉強に使いたいって意味だろ気にすんな
VC使ってのに未だにfreadとか平気使う 私もいますよ。
つうか何でもぶちんで動けばいいやって考えはやばいですか
仕事じゃなきゃそれがいいよ 書かない、動かないのほうがやばい
Cのアパコンパチなんでコンパイル、リンクが出来て テストパスすればいんでしょうけど、 やぱC++のfstreamとかiosとかでやりたいってのはあるよねぇ。
2ヶ月空いてるのに食いつき方きめえな
特におまえは
>>959 シコシココード書いてろ
こいつこそ、5 日も空けてから入れるツッコミじゃないと思うが。
誰が誰だか
まあまあ
野良関数はどこのファイルに書いていいのですか? mainだけ? ほかのクラスの.cppに適当に放り込んでもいいのですか?
どこでもいいけど 後で困らないように分けといたら?
ありがとうございます コードは書いてあっても ファイル分けまで説明してない本が多くて 基礎を読んだ後いざ作ろうとするとよくわからなくなってしまいました >ほかのクラスの.cppに適当に放り込んでもいいのですか? これはクラスのメンバ関数とは別にそのまま呼び出せるのでしょうか
そのまま呼び出せなきゃ困るだろ
はい わかりました
そこからか。 プロトタイプ宣言をヘッダにまとめて、使いたいとこでinclude そのファイルでしか使わないなら、上の方にプロトタイプ宣言書けばいい。 関数定義を上に持っていく、というものぐさはあとで困るかもw
俺は野良関数でも野放しにしないで、野良関数用のclass作っておくな
ためしにでたらめなものでやってみましたが そのプロトタイプ宣言は ヘッダにも書けるし mainにも書けるのですね せっかく別ファイルに書いたのにmainに書いていては意味無いですが
あ