★初心者にVisual C++を教えるスレ★ Part36
4 :
デフォルトの名無しさん :2010/05/17(月) 01:09:30
ぬるぽ
Visual C++ 2010 Express上で「Quick C最初の一歩」という本に書いてある
main()
{
printf("コマノウエノゴマ");
}
というソースコードをビルドするとエラーが起こるのですが
この本で使われているQuick C Ver.2.0のC言語は
Visual C++ 2010 Expressの物とは全くの別物なんですか?
ttp://www.odnir.com/cgi/src/nup47890.jpg
>>005 どんなエラー?それを書かないとわからない。
Visual C++ 2010 上でビルド時に以下のようなエラーが出ています。 1>DXUT.obj : error LNK2019: 未解決の外部シンボル __imp__InitCommonControls@0 が関数 "long __stdcall DXUTInit(bool,bool,wchar_t *,bool)" (?DXUTInit@@YGJ_N0PA_W0@Z) で参照されました。 1>DXUTmisc.obj : error LNK2019: 未解決の外部シンボル _DXTraceW@20 が関数 "long __stdcall DXUTTrace(char const *,unsigned long,long,wchar_t const *,bool)" (?DXUTTrace@@YGJPBDKJPB_W_N@Z) で参照されました。 色々調べてみて以下のようにすることで一応ビルドと実行はできたのですが #pragma comment(lib, "comctl32.lib") #pragma comment(lib, "dxerr.lib") そもそもこのライブラリがあるディレクトリをライブラリ ディレクトリに登録しており、そのディレクトリに該当のlibがあることも確認できました。 ただ、エラー内容からっておそらくライブラリディレクトリの設定が間違っているのではないと予想しているのですが、どこが間違っているでしょうか? 1) ソリューションエクスプローラからプロジェクトを選択 2) 表示メニュー→その他のウィンドウ→プロパティウィンドウを開く 3) プロパティページボタンを押してダイアログを開く 4) 構成プロパティ→VC++ ディレクトリ→ ライブラリディレクトリ で設定してます。
すみません。設定を見直していたら 構成プロパティ→リンカ→入力の”追加の依存ファイルにcomctl32.lib dxerr.libを書き込んだら解決しました。 しかし、これで合っているのでしょうか? ライブラリ一つ一つ指定するのって労力がかかりすぎると思うのですが・・・・・。
初期状態で勝手に呼び込むやつとそうでないやつがあるんだよ。 他のコンパイラでも通るようにするためにはソースに書き込んだ方が良い。
勝手に読み込むのとそうでないものがあるんですね。 危険なオブジェクト知らないうちに使われないようにするためかな・・・。 ちょっと調べてみます。 とりあえず複数人での開発まで考えるとヘッダファイルにでも書いておいた方が何かと便利そうですね。
visual c++ 2010 expressをDLしようと思ってWebインストール押したら Microsoft Searchに飛ばされるんだけどなんでなの?? 一応自己解決しようと努力はしたんだけど yahoo知恵袋で同じ質問あったけど解決方法書いてなかったんだ。 環境はWindousXPです
13 :
12 :2010/05/21(金) 00:48:35
オフラインインストールとやらで解決できそうです お騒がせしました
良かったね
15 :
デフォルトの名無しさん :2010/05/24(月) 15:47:40
まったくの初心者なのですが、質問させてください。 VisualC++でマウスの名称を持って来たいだけなのですが、 何をどう定義する必要があるのかすらわかりません。 出来ましたら、VisualC++にて「Windowsフォームアプリケーション」を サラで作成した状態で何処に何を記述するのか教えてください。
16 :
デフォルトの名無しさん :2010/05/24(月) 21:17:06
どこか有効な、開発者コミニティーかユーザーズフォーラムなど あったら教えてください。
18 :
デフォルトの名無しさん :2010/05/24(月) 21:45:58
>>15 なんか以下でマウスの接続チェックは出来るらしい…。
BOOL GetSystemMetrics( SM_MOUSEPRESENT );
一応、#include "Windows.h" は定義しましたが必要なのかは良く解っていない。
じゃ、以下って何なの??? どうやって使うのでしょうか???
『Mouse クラス』 や 『MouseDevice クラス』
VisualC++ は超初心者で何を定義する必要があるのかまったく解っていません。
あたまが弱いんじゃねえの
20 :
デフォルトの名無しさん :2010/05/25(火) 15:50:35
以下を実行してみると、「From1.h」では動くのですが、「xxx.cpp」では 『グローバル関数にアクセスするための 'this' ポインタがありません』で動きません。 これはなぜ? // Initializes the variables to pass to the MessageBox::Show method. String^ message = "You did not enter a server name. Cancel this operation?"; String^ caption = "No Server Name Specified"; MessageBoxButtons buttons = MessageBoxButtons::YesNo; System::Windows::Forms::DialogResult result; MessageBox::Show( this, message, caption, buttons );
>>20 大雑把に言うと、「その」thisが使えるのは、Form1.hの中にあるclassの中だけ。
22 :
デフォルトの名無しさん :2010/05/26(水) 15:03:53
MFCってどうやって使うんでしょうか? VisualC++2008でテンプレート(Windowsフォームアプリケーション)を使って 新規にプロジェクトを作成した後、 「test000.cpp」内にて【CString str;】と変数を指定してみたのですが、 'CString' : 定義されていない識別子です。 で、エラーになってしまいます。 ヘッダーには「#include "Windows.h"」を指定して見たのですが、 変わりありませんでした。 MFCが何者なのかは、色んなページを参照してなんとなくは解ってきたのですが、 実際はどの様にすれば利用できるのかが良く解りません。 この辺を詳しく紹介している、ページなどありましたら合わせてお教えいただけると ありがたいです。
>>22 ExpressにはMFCついてないから
あきらめた方がいい
24 :
デフォルトの名無しさん :2010/05/26(水) 17:51:48
>>23 Expressでは無いです、
Microsoft Visual Studio 2008 Professional です。
>>24 新規プロジェクト作成時に MFC アプリケーションを選べ。
>>24 にMFCはかなりハードルが高そうに思えるが
そもそもC++言語を少しは使えるのだろうか
27 :
デフォルトの名無しさん :2010/05/26(水) 21:38:22
>>25 MFCにてプロジェクトを作成して、まっさらなダイアログにボタン「Button1」を
作成し以下の様にしてみたのですが、今度は『MessageBox::Show』が使えなくなって
しまいました。
理由がわかりません。
void CtestDlg::OnBnClickedButton1()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
CString str;
// MessageBox::Show("test");
}
「CString」は使える様ですが、結局『Windowsフォームアプリケーション』と
『MFCアプリケーション』の違いがわかりません。
>>27 『Windowsフォームアプリケーション』って CLR だろ?
それは、.NET アプリケーションになる。
MessageBox::Show も .NET だ。
いろんなページを見たら、どこかに MFC での
メッセージボックスの書き方は書いてあると思う。
MessageBox("〜"); とか。
CLR は managed
MFC は ネイティブ
29 :
デフォルトの名無しさん :2010/05/26(水) 22:08:24
>>28 > CLR は managed
> MFC は ネイティブ
と、言う事は…。
別のプラットフォームと捕らえた方が良いってことでいいですか?
ある意味別の言語みたいなんですね。
30 :
デフォルトの名無しさん :2010/05/26(水) 22:15:58
ついで、 もし、お答え頂けるなら。 CLR の『Windowsフォームアプリケーション』でプロジェクトを作成し、 デバイスの情報を取りに行きたい時に、MFCを利用したいときは、 どの様にするのがベストでしょうか?
31 :
デフォルトの名無しさん :2010/05/26(水) 23:59:01
文字列から5文字目以降の文字列をゲットして違う配列に入れたいのですがどうすれば良いですか?
MFCはあくまでC++ソースのクラスライブラリだでよ .NETで使う事は想定されてないと思われ
64bitアプリ作りたいんだけど、製品版じゃないと無理?
35 :
デフォルトの名無しさん :2010/06/08(火) 00:01:27
http://blog.livedoor.jp/unvirus/archives/1224849.html 私はVisual C++はもちろんプログラミングについて何の知識も無いのですが、どうしても上のcppをexeに変換したいのです。
そこでVisual C++ 2010 Expressをインストールし試行錯誤してみましたが、さっぱりダメです。
(新しいプロジェクト→Win32プロジェクト→空のオブジェクト
→ソースファイルに上のcppをぶち込み、デバッグ開始→ビルド失敗)
どうすればexeファイルに変換できるのでしょうか。どなたかご教授願います。
環境はWin XP SP3です。
あんたのレベルじゃ無理 それにチートなんて周りの迷惑になるからやめとけ
37 :
35 :2010/06/08(火) 00:36:02
おkあきらめます
38 :
35 :2010/06/08(火) 00:54:56
あ、出来ました。お騒がせしました
コンパイルしようとしたらデバックなしで開始(デバック開始も)が使えません。なんで?
42 :
デフォルトの名無しさん :2010/06/13(日) 14:12:12
char[50]をSystem::String ^に変換する方法は? error C2664 が出てしまいます。変換すれば良いだけなのでしょうが、 どうすれば良いかお教えください。
>>42 char sz[50] = "hoge";
// VC++ 2008以降
#include <msclr/marshal.h>
using msclr::interop::marshal_as;
System::String^ s = marshal_as<System::String^>(sz);
// VC++ 2005
System::String^ s = gcnew System::String(sz);
44 :
デフォルトの名無しさん :2010/06/13(日) 15:00:21
marshal_asも中でやっていることは結局gcnew System::String。 ただ、marshal_asはchar配列とSystem::String以外の変換にも活用できるので、 せっかくだから取り上げてみた。
教えてください。VC++でhttpクライアントを作っています。 mfcのafxinet.hを使ってページの取得まではできましたが、 ユニコードへの変換の仕方がわかりません。 どうすればいいんですか? プロジェクトはユニコードを使ってます。 CString strBuf; while ( lpHttpFile->ReadString(strBuf) ) { this->m_listbox.AddString((LPCTSTR)str); }
CStringは勝手に変換してくれるからunicodeに変換とか要らないと思うが
>>47 それが、ReadStringの時点で漢字ばかりの文字列に化けてます。
lpHttpFile->Readを使ってchar配列に入れたら日本語はだめだけど
読める文字列にはなりました。
TCHAR *fontName=_T("富士ポップ"); LOGFONT lf = {fontsize, 0, 0, 0, fontWidth, 0, 0, 0, SHIFTJIS_CHARSET, OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH | FF_MODERN,fontName}; をコンパイルすると error C2440: '初期化中' : 'TCHAR *' から 'CHAR' に変換できません。 この変換が可能なコンテキストはありません。 と表示されてコンパイルできません。 fontNameに文字の入った変数を渡すにはどうすればいいんでしょうか。 fontNameに直接_T("富士ポップ")と入れれば実行できます。 環境はvisal studio2008を使用しています。
51 :
50 :2010/06/20(日) 23:35:33
自己解決しました。 構造体の初期化を使わず strcpy(lf.lfFaceName,fontName); にしたら出来ました。
52 :
デフォルトの名無しさん :2010/06/21(月) 16:58:53
Cとかjavaの{これってなぜ最後に{がくるのですか。 わたしは aaa( ){aaaaaaa}となったほうがわかりやすいように 思うのですが。
>>52 慣れの問題です。
ちなみに僕は
aaa()
{
aaaaaa
}
と書いています。
54 :
デフォルトの名無しさん :2010/06/21(月) 17:09:28
教えていただいてありがとうございます。 {aaaaaaaa}のように書いていてはだめということでは ないのですね。
>>54 コンパイルが通れば何でもいいというのであればそれでいいが
大抵はいくつかの主流の書き方に合わせるか、職場のコーディング規約に合わせる
56 :
デフォルトの名無しさん :2010/06/21(月) 17:22:03
私はこの言語を作ったひとがなぜこのような括弧の 書き方を考えたのか解せないのです。 わざわざ見た目を難しくしているような気がします。 私のような初心者だと括弧を{を前に}を後ろに 書き換えたほうがプログラムの流れがよく理解 出来るような気がします。
57 :
デフォルトの名無しさん :2010/06/21(月) 17:26:11
53のかたのアドバイスの意味やっとわかりました。
58 :
デフォルトの名無しさん :2010/06/22(火) 23:43:52
今からMFC覚えても意味ある?
.netやった方がいいと思う しかもC++/CLIよりC#がいい 仕事でMFC使う予定があるなら別だが
60 :
58 :2010/06/23(水) 00:12:34
>>59 ずさー^−^
C#はある程度できます。。VC++スレの人にまでそういわれるなら、やめます。。
1つの言語覚えるのも結構時間かかりますもんね。ありがとう。
C++使うのなら 本当に高速化したい時だけでいいよ
ファイル移動で、移動先に同名があった時上書きの確認するダイアログを出したいのですが あれを表示させるにはどうやったらいいのですかね?
windows限定だけど SHFileOperation
vcのSHFileOperationのなかなかいいサンプルが見つからんっちゃ 構造体ぶっ込んで・・・と
できました!ありがとう
文字コードもわからんやつがネットツール作ろうとか百年早い
そういうお前は人と会話するの千年早い
何事もトライする心が重要なんじゃないかな シュートしなきゃ点は入らない 買わなきゃ宝くじは当たらない
浮動小数点演算をSSEのみ(x87を全く使用しない)で行うように VCを設定することは可能でしょうか? x64ではなくSSE2が使用可能なx86環境での実行を前提にしています。
70 :
デフォルトの名無しさん :2010/07/01(木) 20:19:28
Windowsのイベントをフックしなきゃいけなくなって、CでDll作る事になったんだけど、 SQL Serverとも通信しなければならん。 VCからADO使えるのは分かってるんだけど、C#のが慣れる俺にアドバイスくれまいか。 今どきVCからADOなんて使いたくねー!って言ったら、使ってる人に怒られるよなw DB周りの処理はC#で作ってライブラリにして、Cから呼ぶのって大変かな。
DB周りはWebサービスにすればおk
>>71 VC初心者ですまん。
Webサービス化するのは出来るんだけど、Cから呼び出す方法がさっぱりだわ。
コマンドラインオプションに/MT付けてると/clr付けられんみたいなんだが、マネージドコード使えねって事なんかな。
フックするためには/MTは外せないっぽい。
73 :
デフォルトの名無しさん :2010/07/02(金) 17:50:00
>>72 C#部分はEXEとして作って、フックDLLとはプロセス間通信するのが一番楽だと思う。
あと、フックDLLは/MT必須というのは誤解。
ただ、フックDLLとそこから読み込むDLLでマネージコードを使うのはお勧めしない。
CLR 1.0〜2.0は1プロセス内に共存できない(4で可能になったけど)とか、
DLLのアンロードをどうすんのとか、
Windowsと.NETの暗黒面に次々と出くわすだろうことが明らかなので。
>> 41 むちゃくちゃ遅れましたがありがとうございます。
Windows XP 32bitではBeep関数でパソコンの内部スピーカーからビープ音を 鳴らすことができていましたが、Windows 7 64bitでは外部スピーカー からしか音がしなくなりました。Windows 7 Ultimate 64bitでビープ音を 鳴らすにはどうしたらいいでしょうか? 開発環境は VC++8.0 です。
>>74 レスありがとう。
VB6でCOM作って、import使って呼び出せそうだわ。
プロセス間通信もやったことないんだけど、簡単なんかな?
exe作って引数でデータ渡すのもありだね。
投げっぱなしジャーマンで、成否だけ分かればいい場合だけ
だけど。
VC++6.0でcuda使えますか?
80 :
デフォルトの名無しさん :2010/07/06(火) 18:11:49
Coda kumi?
VC++2008で、IriaやIrvineのようなダウンロード支援ソフトは作ることできますか? こういった通信を行うソフトが作りたいのですが
できる 作れる技術があるかどうかは別だが
できるか、できないかすら分からないレベルなのでそれを聞いて安心しました TCP/UDPとかSocketとか難しそうですけど地道に勉強していきたいと思います
マルチプラットフォーム志向で変態PGならBoost.Asio + OpenSSLでFA.
#pragma comment(lib,"〜.lib")でライブラリをリンクするとき #pragma comment(lib,"debug/〜.lib")のようにディレクトリを指定してリンクすることは出来ないのでしょうか? 実際にやってみると LINK : fatal error LNK1104: ファイル 'debug/〜.lib' を開くことができません。 というエラーをはいてしまいます
>>86 それって、カレントがどこになると思ってるの?
exeと同じ場所に置くのが無難だと思うけど。
絶対パスでもできた希ガス。
>>86 link.exeプロセスのカレントディレクトリと%LIB%から探されるから、そんな指定はやめとけと
そうすると自分用のlibディレクトリにパスを通したあと デバッグ用のlibとリリース用のlibを使い分けたい場合どうしたらいいのでしょうか?
普通プロジェクトの設定
91 :
デフォルトの名無しさん :2010/07/19(月) 21:02:43
フォームに置くコントロールについてなのですが。 プログレスバーみたいな感じで、バーコードみたいな部分部分で色が変っているような表示(デフラグの時に下のほうに表示されるプログレスバーみたいな帯です。) をさせたいんですが、どうやったら実現できますでしょうか。 また.NETにはそれ用のコントロールってありますですか?
線引いて色を塗る
93 :
デフォルトの名無しさん :2010/07/19(月) 22:21:44
挫けそうです。orz
デバッグ情報を埋め込まずに最適化もせずにコンパイルする方法はないでしょうか?
>>95 ありがとうございます。上手く設定することができました。
Visual C++2010を使ってC++を知らなくても1から学べる入門書って今は全くない状態なんですか?
あるよ
教えてプリーズ ググってもマネージコードうんちゃらという本一冊しかかからないんですぅ
C++スレ行けばいい
101 :
デフォルトの名無しさん :2010/07/20(火) 22:36:19
エディットボックスの文字位置を揃えるにはどうすればいいですか? 例 1バイトのiとkをそれぞれ5個ずつ表示させると横幅が小さい iが狭いです。 iiiii kkkkk こんな感じになってしまいます。これを直したいです。願いします。
等幅フォントを指定すればいい
>>102 解決しました。ありがとうございました。
Releaseフォルダに出来た.exeファイルの中に***.pdbファイルのフルパス情報が埋め込まれて しまってるのですが、これを乗せないようにする方法ってないのでしょうか?
書き忘れ Visual Studio .NET 2003 を使ってます
解決しました。ありがとうございました。
108 :
デフォルトの名無しさん :2010/08/02(月) 20:08:28
VC+2010、Win32でプログラムを作っています. 実行ファイルのパス名を取得するために、下記のようにしています (パスとファイル名の分離は省略) TCHAR fName[_MAX_PATH]; GetExeFilePath(NULL, fName, wcslen(fName); ---- これをDEBUGモードでコンパイルしで,デバガのウォッチ式でfNameを 見ると,正しく c:\test\debug\test.exe のように表示されます。 ところがReleaseモードでコンパイルすると fName が c:\ になります. (実際の実行ファイルは c\test\release\test.exeにある)。 なぜこうなるのでしょうか? 解決方法を教えてください.
GetModulePath
>108 の自己レスですが、 //TCHAR fName[_MAX_PATH]; TCHAR fName[500]; GetExeFilePath(NULL, fName, wcslen(fName)); としたら,Release/Debugモード両方で正しく動くようになりました. stdlib.hで_MAX_PATHは260に定義されていますが, TCHAR fName[260];ではうまく動きませんでした。 ドライブ名などを含めて、英文字40字程度のファイル名ですので そんなに長くはないのですが.. 理由は分かりませんが、動いたので良いことにしまう
GetExeFilePath でぐぐってもほとんどヒットしないから ほとんど誰も使ってないだろうし、確かにどうでもいい。
>>110 GetExeFilePath が何なのか知らんが wcslen(fName) は駄目でしょ。
_countof(fName) とかに書き直せよ。
おおおお TCHAR fName[_MAX_PATH]; GetExeFilePath(NULL, fName, _countof(fName)); で出来ました!! UNICODE指定時には、TCHARは _wchar_tと同じになるって 書いてあったので,wcslen(fName)で良いと思ってました
>>113 wcslen() が何をする関数なのかよく調べとけ。
ティーチャー
間違えてC++の方に書いちゃったんですが 4>C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlconv.h(757): warning C4995: 'wcscpy': 名前が避けられた #pragma として記述されています。 こういう警告がでます. 1.wcscpy_s wcscat_s vsprintf_s vswprintf_s を使う 2.可能な限り早く、(たとえば、stdafx.hの先頭で) #define _CRT_SECURE_NO_WARNINGS する 3.可能な限り早く、(たとえば、stdafx.hの先頭で) #pragma warning( disable : 4995 ) する と教わりました.1についてatlconv.hはVisualStudioインストールフォルダのものなんですが変更してもいいんでしょうか?
2 3 はwarningのメッセージを消すだけだからあってもなくてもいい。
1が一番いいのかなと考えているんですがprogram filesのファイルを変更するのに抵抗がありまして・・・
atlmfcが入ってない初心者向けのエディションでも使ってればいいと思うよ
Expressでしょうか? 入れなおしてみます
気になる鼻毛を引っ張って抜いたら2cmくらいあった
ここで質問することじゃないかもしれないですが どこで質問すればいいかわからずググッても解決法が判らないのでここで質問させていただきます 最近パソコンが重いのでプログラムの追加と削除を見てみると、 上位にMicrosoft visual C++ 2008 express edition SP1 という知らないプログラムがありました 調べてみると開発者ツールのようで、消してもいいかなって思ったんですけど 入れた覚えが無い上に大きいので、もしかしたら初めから入っている重要なプログラムなのでは?と思い 削除に踏みきれません。 それとその直下に日本語用の修正プログラムが6つほどありました これらのプログラムは一体なんなのでしょうか? 余談ですが、かなり前からDドライブに意味不明なファイル(何かSQLとかがある)が大量に発生し、 しかもそれが削除できないという問題がありまして もしかしてそれの原因はこれ(C++)なのかな?と思っています
そのPCは中古?新品?いつ買ったの?
8年位前に買って、1年前にリカバリしました 金が無いので買い替えはしません
Visual C++ 2010 Express の新規作成で Win32 プロジェクト を作り、 stdafx.h の #include <windows.h> に続いて #include <mmsystem.h> #pragma comment(lib, "winmm.lib") の2行を足したところ、 c:\program files\microsoft sdks\windows\v7.0a\include\mmsystem.h(802): error C2065: 'int_PTR' : 定義されていない識別子です。 c:\program files\microsoft sdks\windows\v7.0a\include\mmsystem.h(802): error C2146: 構文エラー : ')' が、識別子 'uDeviceID' の前に必要です。 c:\program files\microsoft sdks\windows\v7.0a\include\mmsystem.h(802): warning C4229: 旧形式が使用されています : データの修飾子は無視されます。 c:\program files\microsoft sdks\windows\v7.0a\include\mmsystem.h(802): error C2491: 'waveOutGetDevCapsA' : dllimport データ の定義は許されません。 c:\program files\microsoft sdks\windows\v7.0a\include\mmsystem.h(802): error C2059: 構文エラー : ')' のような5行1組のエラーが14組、mmsystem.h内14箇所の int_PTR に対応して表示されました。 このエラーに回避方法があればお教え下さい。
Expressをやめる
Windows 7でVC++ 2010 Expressを使っています。(文字セットはUnicodeです)
OpenGLで日本語を表示するために、FTGLというライブラリを使っています。
http://sourceforge.net/projects/ftgl/ しかし、日本語を表示させようとすると文字化けしてしまいます。
参考:
http://d.hatena.ne.jp/yukkepc/20090913/1252822373 この問題は、コントロールパネルからシステムロケールを英語にすると、ちゃんとコンパイルできます。
ただ、この状態だと日本語のファイルパスが全部文字化けしちゃうので開発以外の使用に支障が出てしまいます。
システムロケールを日本語にしたまま、ちゃんとコンパイルするにはどうすれば良いでしょう??
ライブラリはソースも手に入れているので、ソース内をいじることも可能です。
setlocaleする等、色々と試みましたが、解決に至りません。
システムロケール変えればコンパイルできるため、
今は開発時にはいつもシステムロケールを英語にして再起動してるのですが・・・・。
ファイルパスに日本語が混ざっていない場所に置けば?
129 :
127 :2010/08/13(金) 19:30:29
>>128 あ、いえファイルパス日本語うんぬんは、開発とは関係ない話です。
もちろん開発用のパスは全部英語で統一してます。
分かりにくくてスマソ。
システムロケールを英語にすると、一部の日本語(パスの日本語とか
メニューバーの中の日本語とか)が文字化けしちゃうんですね。
↓こんな感じ
http://iup.2ch-library.com/i/i0136041-1281693513.jpg なので、開発するときは毎回コンパネでシステムロケールを
英語/日本語で切り替えて再起動させてから始めるんですが、
システムロケール変えずにコンパイル通す方法はないかな、と・・・・。
charをUnicodeに変換するとこが悪いのかと思ってwchar_t使ってみたり、
色々と試してるんですが、ダメぽです・・・・。
JaneStyleがUnicode対応していない糞ソフトだということは良くわかった
リッチエデット(複数行)のカレットから文字インデックスを求めたいとき CRichEditCtrl クラス のCRichEditCtrl::LineIndex を使うと カレットがある行の先頭までの文字インデックスは取得出来ますが、 そこからカレットまではどのように求めればよいのでしょうか?
上の131質問はバイト数をプログラムで求めて解決しますた。
133 :
127 :2010/08/18(水) 14:59:56
Adobeインストールして愕然・・・。 日本版のイラレもUnicode対応じゃないんですね。 (システムロケールを日本語にしてくれと怒られて起動もできない) 何とか解決する方法はないですかねぇ・・・・。 ふつうにVC++あきらめてMinGW + Eclipseに乗り換える方が良いかな・・・・?
MinGW + Eclipseに乗り換えてもシステムロケールの問題は残るだろう そもそもコンパイルできないって言っているが コンパイルが失敗して実行ファイルが作られないのか コンパイルは成功していて実行時に文字化けしてるのか 後者ならソース書き換えれば日本語ロケールでも問題なく動くように出来るだろう
開発はvmwareですればいい
VC++ 2010 Express Editionです わざと失敗させるとnewを呼んだ時点でクラッシュして固まります つまり、どのcoutも通らないのでエラー処理ができません。どうすればいいですか int throwBadAlloc(size_t) { cout << "例外投げ\n" ; throw bad_alloc(); return 0; } int main() { double *p = NULL; unsigned long uil = 999999999UL; _set_new_handler(throwBadAlloc); try { p = new double[uil]; cout << "割り当て成功\n" ; } catch (bad_alloc xa) { cout << "例外発生\n" ; if ( !p )// NULLのままかどうか調べている cout << "p==NULLのまま\n"; } delete[] p; return 0; }
すんません自分で解決しました 数値がでかすぎたみたいです
新しく書くコードでは、<new>をインクルードしてstd::set_new_handlerを使うほうがいいと思う。 標準規格に入っているのはこっちだし。
自作したライブラリtest.libを他のプロジェクトから#pragma commentで追加する場合 #pragma comment(lib, "絶対path/test.lib") //OK #pragma comment(lib, "相対path/test.lib") //OK オプション→プロジェクトおよびソリューション→VC++ディレクトリ よりライブラリファイルの項目に"絶対path"を追加して #pragma comment(lib, "Debug/test.lib") //NG とするとlink1104エラーが発生してしまいます どう解決すればいいのでしょうか?
共有フォルダは無理
すみませんが誘導されたので質問を転記します(少し修正)
http://hibari.2ch.net/test/read.cgi/tech/1274395127/792 >visual c++ 2008 express editionなのですが例えばデバッグ出力で
> ファイル名(行番号) : 内容
>みたいにファイルパスを省いてもジャンプすることができるんですが
>検索結果やエラー表示などでもこんなふうにパスを省くことはできないでしょうか?
>無駄にパス表示が長くて必要な部分を表示するために折り返し・スクロールしないといけません
なにか良い方法はないでしょうか
>>143 すみません、使ってるのがvisual c++なのでこっちに来てみましたが
確かに内容的にもツール寄りですね、向こうに行ってきます
145 :
デフォルトの名無しさん :2010/08/27(金) 13:49:17
VC6 MFC で開発中です。 ファイル選択ダイアログを開いてファイル名を取得する際に、 ファイル名を選択せずに開くことはできないのでしょうか。 CFileDialog を使用していて、 dwFlgには下記を設定してみましたが、 ファイル名未入力を行えませんでした。 OFN_HIDEREADONLY | OFN_PATHMUSTEXIST ファイル選択ダイアログで下記の動作がしたいのです。 存在するファイル名の場合:正常 存在しないファイル名の場合:異常 ファイル名が選択されない場合:正常 よろしくお願いします。
いま電卓を作ってるのですが割り算で躓いてしまいました… 初歩的な質問で申し訳ないのですが、整数と整数の割り算で整数と小数の答えを出す式はどう書くのでしょうか? int n,a,b,c,d,e,f,g,h; double i=g/h; case 4: printf("aを入力してください----"); scanf("%d",&g); printf("bを入力してください----"); scanf("%d",&h); printf("%d÷%dは%f\n",g,h,i); break; }
初期化時に計算すんな double i; scanfのあとで i=g/(double)h; それからdoubleにiを使うのも感心せんな
146です出来ました!ありがとうございます 入門書見直したらキャスト演算子てしっかり載ってましたすいません iだとint型みたいで紛らわしいですねsyousuにしときました
vc6 MFC環境で開発しています。 目的:postmessageで飛ばした処理が終わるのを待ってから 処理を続行したいと考えています。 sendmessageも考えましたが、 処理終了までの間で、postmessage先でpostmessageを使っていて・・・ 下記のような処理を考えたのですが、何かの方法でwaitが浮かびません。 何か方法はないでしょうか。 WaitForSingleObjectで" 待機可能なタイマ"を待機できるとありましたが、 タイマを待つ方法が見つけられませんでした。 =================================== postmessage(); int aa; aa = settimer(NULL,1,100,NULL); 何かの方法でwait(); (100ms*100で抜けたい) 処理続行 =================================== ontimer(nIDEvent) { if(1 == nIDEvent) { if((TRUE == 処理終了フラグ) or (100 == m_timercnt++)){ KillTimer(1); }else{ aa = settimer(NULL,1,100,NULL); } m_timercnt++; }
150 :
nezmeyland :2010/09/02(木) 10:36:33
vc6 -> vc2005(vc8) へコードを移植をしたいのですが, DoModal の返り値の型が INT -> INT_PTR に変わっているのは無視しても良い? つまり, INT nResponse = dlg.DoModal(); から INT_PTR nResponse = dlg.DoModal(); に,いちいち修正しなくても良い?
64ビットにする気が永劫無ければいいんじゃねえの
Visual C++ 2010でソースをCとしてコンパイルする/C++としてコンパイルするみたいな切り替えはできないのでしょうか?
拡張子を替える
設定画面で対象言語を変えるとかアホだよね
質問なのですが 例えば"xyz…"と確保したchar配列(というか配列)ではデバッグで[+]を開いていくと [0] xxx 'x' [1] xxx 'y' … というように見ることができます 配列専用かと思いきやstd::stringでもそのように見ることが出来ています 一方newで配列を作り、その先頭ポインタを確保したとき その時のデバッグ窓では開いていっても実質 p = (アドレス) "xyz…" しか確認できません(それ以上開いても先頭文字しか確認できない) どういう風に作ればstd::stringのようにメモリの動的確保でも配列っぽく確認ができるようになるでしょうか?
メモリのダンプで充分だろ
autoexp.dat でググれ
>>156 メモリのダンプとは>p = (アドレス) "xyz…" のことでしょうか?
確かに実質的にはこれで十分ではあるんですがstd::string(というかクラス)での配列表示が気になって
>>157 正しくドンピシャでした
std::stringもこれで解釈されてたんですね、なんだかとても面白い物の情報ありがとうございました
$(ProjectDir)Main.cpp $(ProjectDir)Hoge.cpp $(ProjectDir)Hoge\Hoge.cpp 以上のようなファイル構成でビルドしたら ひょっとしてHoge.objは上書きされてビルドエラーになっちゃいますか? ビルドすると関数が見つからないと言われてしまいます
名前変えて通るなら名前の問題だろうし、だめならそれ以前の問題 それぐらい試してから質問しろ
>>159 そういうケースは Hoge\* だけで先にライブラリのプロジェクト作るかな
>>159 objの衝突を避けるには、
cppの片方をHoge_0とか書き換える
または、
cppを右クリック→プロパティ
構成プロパティ→C/C++→出力ファイル→オブジェクトファイル名
の項目を編集すればおk
たとえば、$(IntDir)%(Filename)1.obj
とか
>>160 すいません^^;
>>161 さすがにそれはプロジェクトが乱立して大変なことになりそうです
>>162 これなら現実的ですね
ソースフォルダのルートからの相対パスを-で区切ってobj名にすることにしました
皆さんレスどうもでした
$(ProjectDir)Main.cpp $(ProjectDir)Hoge.cpp $(ProjectDir)Hoge-Hoge.cpp $(ProjectDir)Hoge\Hoge.cpp ようなファイル構成でビルドしたら またエラーになるんですねわかります
サブフォルダをなくして Hoge\Hoge.cpp のかわりに Hoge-Hoge.cpp を使えばいいんじゃないかって思った ちょっと見苦しいけど
サンプルビルドする時とか いちいち手で設定直すの面倒な時はスクリプトで片付ける もしかすると正当でスマートなやり方があるのかも知れないけど 調べるより自分でプログラム書いたほうが早い
スレ違いすみません。需要がありそうなんでここに。。 @〔ソフトバンククリエイティブ〕【明快入門 Visual C++ 2005 ビギナー編】/ 林 晴比古 (著) 定価: 3,990 円(税込み) A〔秀和システム〕【VisualC++逆引き大全500の極意】(開封済み・CD付き)/ 住吉乱(著) 定価: 2,520 円(税込み) ↑をセットで、 3000 円+送料で売ります。 (参考までに送料は、最も安いと思われる「ゆうメール」だと、3kg 以下で590円です。) プログラマに憧れてましたが、あまりに難しく、適性がないので、もうこの道は諦めることにしました・・orz なのでほとんど使用感はありません。(笑) 書店でつけてもらったカバーをそのままつけたまま使ってましたので、帯もカバーも折れもシミもありません。 最初は張り切ってたので、@は数ページ、蛍光マーカーが引いてある箇所がありますがw Aなんか、ほとんど開いてもいませんw 「逆引き」の方は、既に絶版重版未定になってるようで、中古の価格相場が分からなかったのですが、 状態の良さにしてはかなり安く設定したつもりです。 これからVC++を始める方、お勉強にどうぞw メールくだされば、画像や、詳細等、晒します。 よろしくお願いします。 スレ汚し、失礼いたしました。
2chではご法度
「逆引き」シリーズは値段のわりにサンプル豊富なイメージがあったから 使えそうと思って買ったら、VCの逆引きは手抜きがひどくて失敗だった。 タイトルに「500の極意」とうたってるから、無理やり500個項目埋めた感じ 例えば 095 オーバーラップウインドウ 096 ポップアップウインドウ 097 レイヤードウインドウ 099 子ウインドウ こんな感じでウインドウスタイルのフラグ変えただけで項目数だけ無意味に消化していく
これはひどい 似たような本はときどき見かける
171 :
デフォルトの名無しさん :2010/09/14(火) 22:40:27
VisualC++のWinフォームアプリケーションでフォルダのアクセスログを収得する ツールを作りたいのですが、フォルダのアクセルログの収得の仕方が分かりません
ぐぐったらそれ見つけたけどserver 2003と書いてあった
で?
よく知らないのにぐぐって教えてるんだろうなと思った
で?
そうか Win95 での方法が知りたかったんだな こりゃ配慮が足りなかった スマソ スマソ
すみません質問です minGWで作ったdllをVC++のソースから利用出来ますか? また逆に VC++で作ったdllをminGWの方で利用出来ますか? 出来たら方法も教えてください。
DLLの依存関係を調べる
それが出来ないんだったらMinGWで作ったバイナリはWindowsで動かないな
どうなんだろ、VC++で作ったdllならlibも一緒に作られるでしょ。 試しにリンクしてみればいいんじゃないかな。
*.libはlib*.aにリネームすれば -l にそのまま使えるという事実はあまり知られていない
質問があります。 Visual C++でstrcpy_sって例外catchできますか? 先輩曰く、Cのランタイムエラーがでるから どうにかすれば例外をcatchできるはずだって言ってました。 ちなみに、以下の文をなんとかcatchしたいと思っています。 const char string2 = NULL; char string[80]; strcpy_s(string,sizeof(string),string2); ご教授ください。よろしくお願いします。
ぬるぽ
相手がthrowしてくれないとcatchできないから、無理じゃないのかな。 試しに catch ( ... ) で例外全部拾ってみれば? これでだめならダメじゃないかと。
>>185 だめでした。
でも、納得してくれないんですよ。
調べが足りないんじゃないの?って
MSDN見ても例外返さないとしか読めないんですが・・・。
人格否定チックな言われ方でちょっと鬱です。
構造化例外じゃないの?try, catchじゃなくて、__try, __exception。 よくは知らないんだけどw
FAQにもろ書いてあった
どなたか詳しくてわかりやすい参考書がありましたら教えてください
//Number of vehicles within the problem VehicleNo = data->getFleetVehicles().size(); //Number of vertices within the problem DemandNo = data->getVertexs().size()-1; //Getting the capacity of the first vehicle in the fleet vehicles map VehicleCapa = data->getFleetVehicles().begin().value()->getCapacity(); というプログラムがあったのですが、これはクラスの継承とやらを行っているのですか? 勉強を始めたばかりの素人なので全くわかりません 正直 size(), begin(), value() や何故2番目が size()-1 かもわからないです 説明か、手がかりになることだけでも教えていただけるとありがたいです スレ違いでしたらすいませんが、よろしくお願いします
>193 10年前なら勧められる本はあったけど、 今からあえてVCやるやつが何考えてるか全然理解できない。
>>195 >今からあえてVCやる
横から失礼
ならば今からやるならおすすめはなんなんでしょう?
今まさに何か言語を勉強しようと思って色々見ててここに来ました
ウィンドウズ上で何か簡単なゲームやアプリが出来ればいいななんて考えてます
C♯に決まってるやん
201 :
デフォルトの名無しさん :2010/09/17(金) 20:24:20
case WM_CREATE: // TIMER_IDは 1 // TIMER_ELAPSEは 20 で DEFINE してある SetTimer(hWnd,TIMER_ID,TIMER_ELAPSE,NULL); case WM_DESTROY: KillTimer(hWnd,TIMER_ID); こんな感じで作ってるんだけど case WM_TIMER: のハンドラに一切来てくれない。 orz SetTimerもKillTimerも戻り値を調べると 正常に実行されている(エラー値は返してない)。 ただ、デバッガで見ると、ウィンドウを最小化させる時だけ case WM_TIMER: の部分に来てる。 最小化させないと10秒待とうが20秒待とうがWM_TIMERのとこには処理が行かない。 どういった問題が考えられる?
>>201 WM_CREATEがきたときは
CreateWindowが戻り値を返していなくて、
hWndに有効なウィンドウハンドルが入っていないとかあるかもしれない
確認してみてはどうだろう
203 :
201 :2010/09/17(金) 21:00:51
>>202 どうもありがとう。
WM_LBUTTONDOWN:
の中で SetTimer してみたり、いろんなメッセージで
試してみたけど、どれも同じ(出来ない)・・・
前に別の(SetTimer使う)プログラムをやった時もこういう風になった。
その時は諦めてしまった orz
>>203 できるだけ小さい構成でうpしてみたらどうだろう
これだけの情報だと原因を探るのがきびしいんじゃないだろうか?
case文のミスでKillTimer
breakが抜けているってオチは?w
207 :
198 :2010/09/17(金) 22:09:29
>>199 他に回答がないってことはC#でFAなのかな?
んじゃちょっくらC#覗いてみまふ
>>208 おばかさんw
ま、俺もやったことあるからw
〆
しかしswitchがbreakで継続・離脱を選択できる利点って欠点を覆すほどあるんだろうか それとも全然別の理由で存在するのか
>>211 うーん、まあ、便利なときは便利だよw
つか、今から変えるとなったら、そっちの方が影響甚大だから、単純に合理的とかって理由では
変えられないわw
便利な場面がちょびっとあったとしても書き忘れと判断されかねないから そんな書き方はまずいよなぁ
>>214 そうだよね
コメントで「ここはスルーするからbreak不要」とか書いておかないと
あとで他人がメンテするときに勝手に入れられたりするかもねw
まあ、swtich caseはCが最初だからな。 後発は、breakの有用性を勘案して、switchに関しては、breakを不要としたのが多いけれど。 でも、Cという言語の性格を考えると、breakを必要とする、という今の方が、合っている、と も言える。
>>214-215 そこまでアホじゃなくても
case : の順番を入れ替えたりするときに酷い目に遭うよな
switchスルーは前置特殊処理(ただし一つ)はできるけど後置特殊処理ができないのがな そしてスルーを多用するswitch文があったら脳がねじれそうだ
switchにbreakがあるのはアセンブリ言語の名残って聞いたことある
>>219 んー、名残り、というか、そもそもアセンブラをそもそも高級言語の皮かぶせたみたいのが、
Cで、そういう部分を色濃く表しているのがswitch-case
昔はMACROSとかあってだね、その辺見ると、すぐわかるぞw
つまり、あれだ、アセンブラはとにかく何かしらでJUMPしない限りは逐次実行するのだw
223 :
デフォルトの名無しさん :2010/09/19(日) 14:41:51
SDKのプログラムで、ただウィンドウを表示するだけのプログラムなんですが Enterキーを押すとウィンドウが閉じてしまいます。 WM_KEYDOWNやWM_CHARも送られてないみたいなんですが これってどういう理由が考えられるでしょうか? (DelphiのFormはEnterキーを押しても閉じない)
ESCでも閉じる? ダイアログはEnterでOKボタン、ESCでキャンセルボタン押したのと同じ動作する。
OKボタンにフォーカスが当たってるから
226 :
デフォルトの名無しさん :2010/09/19(日) 16:14:44
>>224 ,225
ESCでも閉じます。
ただ、ダイアログではなく、CreateWindowで作ったウィンドウなんですが・・・
(勘違いしてたらすみません。)
227 :
デフォルトの名無しさん :2010/09/19(日) 22:36:40
Visual C++ 2010 Expressを使っているのですが、標準出力に出力する 簡単なプログラムを実行すると、自動でDOS窓が開いて結果が出力されるの ですが、すぐにDOS窓が自動で閉じられてしまいます。 で、以前のバージョンだと、CTRL+F5で実行すると、結果出力後もDOS窓は キーを押さない限り、閉じられなかったのですが、2010でそれをやっても 閉じられてしまいます。自分で予めDOS窓を開いておいて実行すれば大丈夫 ですが、それも面倒です。 何か方法があるのでしょうか?
つ getchar()
コードの方で制御するということですか。 ありがとうございました。 しかし、なぜ機能が変わったんでしょうかね…
こっちのが正常
そんな簡単なプログラムでいちいちVC立ち上げて プロジェクト作ってとかやってる方がよっぽど面倒
DOS窓用のプログラム作ってるのにDOS窓苦手なんだろ
みなさんは簡単なプログラムはどのようにコンパイル、実行してるのですか?
普通にVC立ち上げてプロジェクト作ってる。
>>223 break; が抜けてるんじゃないの?
( ゚д゚)
237 :
デフォルトの名無しさん :2010/09/20(月) 06:37:13
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_WNDW); _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT); _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); この3行を加えてみた。 で、例えばmallocでメモリ確保 → 開放せず、だとメモリリークの メッセージで怒られるが SetTimerして → KillTimerをしない、だとメッセージが出ない。 1.これってAPIが原因のメモリリークは検出できない? 2.テキストファイルに出力する方法ってない? (プログラムはC++でなくC+SDK)
>>237 > 1.これってAPIが原因のメモリリークは検出できない?
YES。あくまでCランタイムのメモリリーク検出機能だからね。
> 2.テキストファイルに出力する方法ってない?
コピー&ペースト。
239 :
237 :2010/09/20(月) 12:52:34
>>238 そっか。APIは無理なんだ。
情報ありがとう。
240 :
デフォルトの名無しさん :2010/09/21(火) 00:32:42
現在、C/C++言語(拡張含む)によるWindowsアプリケーションの作成にあたって もっとも主流なスタイルは次のどれなん? ・Win32API(Win64API) ・MFC ・C++/CLI なんかプロになるにはWin32APIの知識がいるとか聞いたけど…
241 :
デフォルトの名無しさん :2010/09/21(火) 00:45:12
あ、あと ・WTL なんて選択肢もあったね
Qt
まあ、Win32APIの知識がないと、結局のところ、MFCを理解するのは難しいからね。
WTLってMFCの簡易版みたいなもの?
wxWidgets
246 :
デフォルトの名無しさん :2010/09/21(火) 15:37:44
これまで、WINDOWS98でVC++4.0を使っていて、 この前、WINDOWSXPのノートパソコンを中古で買って、 VC++2008をダウンロードしてプログラミングし直そうと思いました。 (VC++2010は次のパソコンを買ったときにする予定) だけど、これらの言語が、文法とか関数が異なり過ぎていて、 しかも、VC++2008のヘルプがわかりにくくて使えないです。 こういう場合、VC++2008の初心者用の本を買ったほうがいいでしょうか。 あるいは、必要最低限の知識をまとめて習得できるサイトとかあればいいのですが、 ない場合は、ここのスレで1つの疑問を1回1回聞かなければいけないでしょうか。 とりあえず、ここのスレに来てわかったこと。 MessageBoxは、MessageBox::Show("〜")と書く。 他には、実行ファイルのアドレスの取得法。まだ試してないですが。 VC++4.0ではできなかったので。
>>246 せっかくだからC#に移行したほうがいいよ
>>246 C++/CLRだろ
それC++の名前をかぶった変態だから
初心者が使うもんじゃない
>>247 が言うようにC#に行くことをお勧めする
249 :
246 :2010/09/21(火) 18:36:37
C#は、VC++2008をある程度やり通したあとでやってみます。 数年後にWINDOWSVISTAか7のパソコン買ってVC++2010やったあとにやろうとも思ったけど、 最近買った今持ってるWINDOWSXPのパソコンでC#を早く始めても良い、ということで? それに、VC++4.0の次にC#では飛び過ぎない? それと、プログラミングに関しては、初心者ではありません。10年以上はやってます。ただゆっくりなもので。 何しろ、VC++4.0にはコンテナ(vector、list等)がなくて、別のC++でマスターしてます。 もう1つ。VC++4.0で作ってたのは、フォームというかダイアログというか、のプログラムでした。
すごく香ばしいです。
釣りならよそに行ってくれ
252 :
デフォルトの名無しさん :2010/09/22(水) 22:18:13
VC2010に挑戦しているのですが、ツールボックスからSerialPortリソースを フォームデザインにドラッグアンドドロップで登録できるのですが、 別のclassにて using namespace System::IO::Ports;を宣言し public: SerialPort^ port;とテーブル宣言すれば利用できるのですが それぞれの使い方に何か違いはあるのでしょうか?
違いがわからないないなら違わないのと同じ
VC2008で作成中のアプリケーションに 独自のコマンドラインオプションを追加しました。 そのコマンドラインオプションごとの動作のデバッグを行おうとすると、 プロジェクトのプロパティ内の「デバッグ - コマンド引数」を こまめに設定しなおすしかないのでしょうか?
すみません。int型(4バイト)の変数のバイトを逆順にバイトスワップさせる関数って有るのでしょうか? stdlibのswap関数は見つけたのですが別物なようで・・。
_byteswap_ulong
257 :
255 :2010/09/27(月) 22:50:40
すみません。BYTE配列中からint型(4バイト)のデータを以下のような int num = (int)&barray[6]; これに近い文法で抜き出す方法はないでしょうか・・?
*(int *)&
すいません、C++、というかプログラム自体初心者ですが、
シリアル通信で短点と長点を組み合わせた符号を受信すれば、
符号に応じたアルファベットのキー出力がkeybd_eventで行われる、
というVisual C++2003で書かれたフリーウェアソースコードの修正?をしています。
.vcprojや.rcファイルなどいくつかのファイルがなかったので、
見よう見真似で頑張って作ってみてエラーなしにコンパイル出来るようにはなりました。
出来たアプリケーションを立ち上げてシリアル通信でモールス符号を送信してみれば、
問題なく動くのですが、ただひとつだけ…
キー出力「p」を出すための符号「.--.」を送信した場合だけ何故か大文字の「X」(エックス)が
出てしまいます。
「p」の符号と他のアルファベットの符号を入れ替えてみても何故か「p」を出力する時だけ
「X」が出てしまいます。なので「.--.」という符号の形に問題があるわけではなさそうです。
ためしにkeybd_eventでキーを出力する直前にAfxMessageBox();で符号の中身を見て見ると、
「p」の時にはちゃんと「.--.」が入っています。
ソースコードとにらめっこしてみてもこれ以上は自分には荷が重いとギブアップして
しまいました。
どなたかファイルをアップロードするのでおかしそうなところを教えていただけると
ありがたいです。
一応パスワードをかけておきます
pass:vc
http://www1.axfc.net/uploader/H/so/116543 この手のプログラム系スレッドで質問するのは初めてなので質問の仕方に過不足あったら言ってください。
Xは「-..-」だな プログラムの方じゃなくて符号のテーブルが間違ってるんじゃないか
>>261 符号のテーブルは書き出したアプリケーション.exeファイルと同フォルダに
.txtファイルとして存在してユーザーが自由に変更出来るようになってます。
自分も真っ先にそこを疑ったんですが、
そこでどう変更しても他は問題なくても「p」だけは「X」として出力されてしまうんです。
ちなみにコンパイルしたアプリケーションも先ほどのアップロードファイルの中に含まれてます。
morse.txt の中に -..- X -..- x の二つあるね 全然関係ないとは思うけどちょっと気になった
>>262 電鍵持ってないんだけど
どうやって入力すればいい?
266 :
258 :2010/09/28(火) 04:41:21
BeepとMessageBox以外は変えてないのか
>>260 ZIP で 8MB あるけど Debug と Release の中の *.pch はいらないから消してからあげて
MessageBoxじゃなくてデバッガ使えるようになろう
>>263 いちおう片一方、もしくは両方消してみたけど関係ありませんでした
>>264 そ、それは…
とりあえずKeyboard.cppの中のInput()関数を直接「.--.」の符号でどこかから呼び出してみる、
とか?
>>265 ,267
そうです、Beep関係はコンパイルエラーが出たのでそれ系の関数は全部削除しました。
もともと音はいらないので。
あ、あとリンカの追加の依存ファイルにあれこれ付け足してみたような…。
>>268 次からは消します、ありがとうございます
>>269 そう…ですね。
>>270 こんなコードを書いたらどうなる?
GetDlgItem(IDC_EDIT1)->SetFocus();
Global::SendKey(".--.");
>>271 やってみました、同じですねえ、「X」が出ちゃいます
273 :
271 :2010/09/28(火) 14:28:57
>>272 VS2008でシリアル関係を削除したコードでやってみたけど"p"が出たよ。
>>273 こっちはVisual Studio2003です。
バージョンの違いが関係あるんでしょうか…。
あとハッピーハッキングキーボードという
ちょっと変わった(?)キー配置のキーボード使ってるんですが、
キーボードのコードを引っこ抜いてもダメでした。
ただ作者さんのサイトにあるアプリケーションファイルを落として
そちらを起動すると問題なく動作しました。
Service Pack入れてなくてMSKB832904もろとか無いよね?
277 :
260 :2010/09/29(水) 01:37:22
途中で失敗して二時間くらいかけてSP1インストール成功したんですが、 やっぱりダメでした(TДT)PC再起動しても無理です。 なんでだ… 「p」を出力できたという方、改編したソースコードいただけたら嬉しいです
あ、SP1当てたので一応ソリューションのリビルドやってから確認しました。 コンパイルの時警告は LINK : warning LNK4089: 'OLEAUT32.dll' へのすべての参照は /OPT:REF によって廃棄されます。 のみです。
なんで VC++2003 にこだわるの? VC++2010 とかじゃだめなん?
簡単な質問なのですが、よろしいでしょうか? 構造体内のポインタ関数へのアクセスの書き方は 普通に(*構造体名 . 関数名)();という書き方でよろしいのでしょうか?
実際にやってみりゃいいのに
282 :
271 :2010/09/29(水) 13:52:52
>>277 色々と試してみたら現象が出たよ。
最適化が影響してるみたいだけど詳細は分からん。
最適化を無効にしたらどうなる?
ポインタ関数ってなによ
>>280 アクセスだけなら
ふがふが = 構造体名 . 関数名(ほげほげ);
struct で クラスを作ってるのでわ?
286 :
260 :2010/09/29(水) 17:10:03
>>282 最適化無効にしたらできました!
マジ嬉しくて泣きそうです!
>271さんも皆さんもありがとうございました!
VisualStudio2003を使っているんですが、 gccのリンカスクリプトみたいにセクションを自由に 配置するにはどうすればいいでしょう? ある変数(数十MB)を1MB境界に配置したいんです。 #pragma data_seg()でセクションは生成できるけど、 アドレスは自由に配置できない。 attribute(align())も上限が8192。
アライメントしたいだけなら_aligned_malloc使ったほうが幸せになれるんじゃないか?
289 :
287 :2010/09/29(水) 21:01:31
>>288 ありがとうございます。
2003だと_aligned_mallocが無いみたいです。
290 :
260 :2010/09/29(水) 23:37:00
うわ、今家帰って来て実際に符号打って確かめたんですが、 たしかに最適化無効にすると「p」が「X」になることはなくなりました、 が、今度は何故か「a」が「S」になっちゃいます。 最適化オプションを変更してみると以下のことがわかりました。 「a」→「S」 最適化無効 最大限の最適化 カスタム 「p」→「X」 プログラムサイズ 実行速度 カスタムにしてその下のパラメーターをあれこれ変更しても「a」→「S」になります。 ちなみにもともと配布されてるアプリケーションは問題なく全ての文字を打ち込むことができました。
VC2003をやめろって言ってるのに
292 :
デフォルトの名無しさん :2010/09/30(木) 03:25:44
お金がないんですよー
Global.cpp line:43 mapVKey["l" + (1, 'a'+i)] = Shift('A' + i); おかしいのここじゃないの?
自分で作ったプログラムならともかく、 拾ってきたゴミいじっても、ろくなことない。 さっさと捨てた方が吉
すみません。 1つのBYTE配列を「長さが毎回異なるBYTE配列3つの連結」で作っているのですが、 データの繋ぎ目(変わり目)の良い表し方は無いでしょうか? できるだけ常にBYTE配列のサイズを小さく抑えたく、 特定の値を目印に・・とは考えるのですが、偶然少数などで同じビット配列が来たら酷い事になるのでは・・等と 心配になってしまいます。 何か良い方法は無いでしょうか・・?
VC初心者スレで質問する意図がわからない
ひとりごと
(´・ω・`) しょぼん・・
299 :
298 :2010/09/30(木) 13:42:38
確かにスレ違いっぽいですね、よそで聞いて来ようかと思います。失礼しました。
>>290 293さんが書いてるから、もう分かったと思うけど
mapVKey["l" + (1, 'a'+i)] = Shift('A' + i);
を消すか
mapVKey[string(1, 'A'+i)] = Shift('A' + i);
に書き換えれば良いのでは?
>>293 >>300 今電鍵打てる環境にないのでとりあえず300さんに教えて頂いた書き換えをして、
SendKey()で全ての符号を直接呼び出してみました。
問題なく全て表示されました!
長々と付き合って頂いて本当にありがとうございます!
なーんてこったい
( 'A') ('a' )
304 :
デフォルトの名無しさん :2010/10/01(金) 05:00:38
A
305 :
305 :2010/10/01(金) 05:07:29
Visual C++ 2010 Express初心者です。windows7を使っています。
http://www.maroon.dti.ne.jp/koten-kairo/works/dsPIC/dsPIC_start.html ↑で勉強中で、Windowsフォームアプリケーション でのLED制御には成功しました。
これを参考によりシンプルなコードで制御を行うため、空のCLRプロジェクト から作成しようと考えているのですが、うまく行きません。
以下がその全ソースコードです。
#using <System.dll>
#include <windows.h>
using namespace System;
using namespace System::IO::Ports;
int main()
{
SerialPort^ port = gcnew SerialPort(L"COM4",
1115000, Parity::None, 8, StopBits::One);
port->WriteTimeout = 2000
port->Open();
port->Write(L"right\r");
Sleep(1000);
port->Write(L"right\r");
Sleep(1000);
port->Close();
};
USB-Serial変換ケーブルを使用しています。
TeraTermを使用して right を送信したところ、LEDを光らせることには成功しました。
エラー、警告は出ないのですが、上記コードをデバックしてもLEDは光りません。
これを光るようにしたいです。お願いします。
どうみても単に文字列送ってるだけて LED光らせてるようには見えないけど LEDが光るかどうかは文字を受けた側の判断だろ
昔クロスケーブルでつないでデバッグしたの思い出した
> 1115000 115200?
310 :
305 :2010/10/01(金) 20:36:25
ご返事遅れてすいません。 115200にしたら、LEDが光りました。 皆様、ご協力頂きありがとうございました。
orz = 3
これはひどい
なにが
頭が
どんなふに?
ふに?
Express初心者=他人に投げるのがExpressな初心者
318 :
デフォルトの名無しさん :2010/10/02(土) 13:36:42
ヾ(o゚ω゚o)ノ゙ ふにふに!ふにふに!
Visual C++ 2010 Express Windows 7の環境で sdl + opengl + win32 でゲームのプログラミングをやってるんですが クラスにint型の変数ひとつを追加しただけで今まで動いていたプログラムが 途中で落ちるようになりました。 変数追加以外の操作はやっていません。 ほかにもいろいろ試してたんですがint型の配列を101個以上の要素で追加すると 正常に動作すること確認できました。 原因がよくわからなくて気持ちわるいんですが、知ってる人がいたら教えてください。
バグ
>>319 1、スコープの関係で変数名がかぶってバグが
2、スタックメモリの使いすぎ
とか?
なんにしてもこれだと情報が足りないと思われ
2ならメッセージ出るし、101個以上の要素で追加なら正常と言ってるからありえない
319です。自己解決しました。 配列で未定義の領域にアクセスする可能性のあるコード があったので、そこを直したら動くようになりました。 変数を追加する前と101個の要素の配列を追加した後も 実際は正常には動いてなかったみたいです。 レスをくれた人、ありがとうございました
すいません、VS2003、XP SP2という環境ですが
OSCPackというUDP通信のソースコードを下記から拾ってきて(oscpack_1_0_2.zip)
http://www.audiomulch.com/~rossb/code/oscpack/ examplesフォルダにあるSimpleReceive.cppをビルドするために、
Win32アプリケーションプロジェクトを作成し、
エラー無しでコンパイル出来るまでは出来ました。
しかし、Debugフォルダに出来た.exeファイルをクリックして起動させると、
"Debbug error! this application has requested the runtime"
みたいなアラートが出て停止してしまいます。
どなたか問題点のわかる方、アドバイス願えますでしょうか?
そこに書いてある通り
>>325 OSCPackの使い方サイトに
> リンカの追加の依存ファイルに「ws2_32.lib」(winsock用)と「winmm.lib」(timeGetTime?用)を追加する
と書いてあったのでそれはやったのですが…
327 :
324 :2010/10/05(火) 21:38:57
今上記OSCpackのexampleの内、ためしに送信(SimpleSend.cpp)の方を コンパイルして実行してみると問題なく動作し、また値の方も正確に送信されていました。 やはり受信のサンプルだけRuntimeエラーが出るみたいです。 どなたかアドバイスいただければ幸いです。
作った本人に聞けよ
329 :
324 :2010/10/05(火) 23:12:10
デバッガを使うとこのアラートが出て停止します。 > a.exe の 0x7c812a6b でハンドルされていない例外が発生しました : Microsoft C++ exception: std::runtime_error @ 0x0012faa0。
MFCで theApp宣言しておわりっていうのはコンストラクタですべての処理をやっているわけですよね しかしコンストラクタの中身を書いていないので theApp::InitInstance()ってどこで実行されるんですか? 派生元のコンストラクタから実行されるんですか? 調べてみたけど静的仮想関数?混乱してます 初心者スレってことでよろしくお願いします。
331 :
324 :2010/10/06(水) 01:09:02
一ヶ月立ち上げっぱなしのPCを再起動したらなおりました、失礼しました
誰か蹴っといて。
>330 コールスタック(呼び出し履歴)
>一ヶ月立ち上げっぱなしのPCを再起動したらなおりました、失礼しました そんな使い方する人も居るんだな
WindowsUpdateはたまにはやっとけよ
すいません、複数に分けたcppファイルからIDC_EDIT1に値を入れたいだけなんですが、 下記の○○に入れる内容がわかりません…。 「this」を入れるとメンバーではないと言われるし、 ダイアログのCHogeDlg.hをインクルードして「CHogeDialog」を入れると 'CHogeDlg' にはオーバーロードされたメンバ 'operator ->' がありません。 '->GetSafeHwnd' : 左側がクラス、構造体、共用体へのポインタではありません。 みたいに言われるし… HWND hWnd =○○->GetSafeHwnd(); HWND hDlgItem = GetDlgItem(hWnd, IDC_EDIT1); SetDlgItemText(hDlgItem,IDC_EDIT1,"unko");
C++の入門書にクラスのデータメンバーにクラス外からアクセスする方法が 書いてあるはずだから、その辺勉強するといい。 別にプライベートメンバーじゃなくても他人の持ち物には直接さわらないのが礼儀
338 :
デフォルトの名無しさん :2010/10/09(土) 13:28:55
>>337 ありがとうございます
入門サイトとかまわって下記のように書いてコンパイル出来るまでにはなったのですが、
結局IDC_EDIT1に値が入りませんでした。
クラス外からアクセスする方法が間違っているのか
その他の部分が間違ってるのかもうわからなくなってしまいました…
CHogeDlg *app = (CHogeDlg*)AfxGetApp();
HWND hWndow =app->GetSafeHwnd();
HWND hDlgItem = GetDlgItem(hWndow, IDC_EDIT1);
SetDlgItemText(hDlgItem,IDC_EDIT1,"unko");
App はウインドウじゃありませんよ
ある行を超えたら一行上にスクロールさせるコードのつもりなんですけど どこがおかしいのかわかりません ご教授よろしくお願いします void CtestMFCDlg::OnBnClickedButton1() { int n =pEdit_1.GetWindowTextLengthW(); pEdit_1.SetSel(n,n,FALSE); int linecount=pEdit_1.GetLineCount(); pEdit_1.ReplaceSel(_T("test成功です\r\n")); if(linecount>3) pEdit_1.LineScroll(-1); }
デバッガぐらいついてるはずだけど
>>339 AfxGetMainWndでもダメでした。
CHogeDlg *dialog = (CHogeDlg*)AfxGetMainWnd();
HWND hDialog =dialog->GetSafeHwnd();
HWND hDlgItem = GetDlgItem(hDialog, IDC_EDIT1);
SetDlgItemText(hDlgItem,IDC_EDIT1,"unko");
343 :
デフォルトの名無しさん :2010/10/09(土) 21:42:23
何やってもダメです… CHogeDlg dialog; CEdit* edit = (CEdit*)GetDlgItem(dialog,IDC_EDIT1); SetDlgItemText(edit->GetSafeHwnd(),IDC_EDIT1,"unko");
目先の問題の解決よりオブジェクト指向をちゃんと理解してほしい。
とりあえずやり方を変えて ■hogeDlg.hのpubulicに void CHogeDlg::ChangeEdit1(char* text); を追加 ■hogeDlg.cppに void CHogeDlg::ChangeEdit1(char* text) { CEdit* edit1 = (CEdit*)GetDlgItem(IDC_EDIT1); edit1->SetWindowText(text); } ■hogehoge.cppに void HogeHoge::EditChange() { CHogeDlg cdd; char* t="unko"; cdd.ChangeEdit1(t); } これで出来るだろと思ってhogeDlg.cppからhogehoge.cppのEditChange()を呼び出したとたん EXEが落ちる…。 高橋マナとか言う人の「やさしいC++」買って読みながらやってるんですけど出来ません…
あ、すいません。 hogeDlg.hでの関数宣言の部分を訂正します。 × void CHogeDlg::ChangeEdit1(char* text); ○ void ChangeEdit1(char* text);
347 :
デフォルトの名無しさん :2010/10/10(日) 00:04:04
hogeDlg.cppの edit1->SetWindowText(text); の一文を消すととりあえずEXEが落ちることはなくなりました。 なんか問題は外部からの呼び出しではない気がしてきたのですが…。
348 :
デフォルトの名無しさん :2010/10/10(日) 00:25:36
補足です。 先のように edit1->SetWindowText(text); を消して代わりに AfxMessageBox(text); の一文を入れてやると、ちゃんと呼び出されてtextに文字が代入されているのが確認できました。 またedit1->SetWindowText(text);を消さないで、 CHogeDlgクラスの別の関数内から呼ぶと問題なくIDC_EDIT1に文字が代入されます。 つまり外部からCHogeDlg::ChangeEdit1関数の呼び出しは出来ているものの その中の edit1->SetWindowText(text); のところでEXEが落ちるようです。 同クラス内の別関数からChangeEdit1を呼ぶと大丈夫です。
hogeDlg.hの内容を書き出しておきますね、こんな感じです。 #pragma once #include "afxwin.h" #define WM_NOTIFYICON (WM_USER+1) class CHogeDlg : public CDialog{ public: CHogeDlg(CWnd* pParent = NULL); // 標準コンストラクタ enum { IDD = IDD_Hoge_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV サポート private: NOTIFYICONDATA m_Icon; protected: HICON m_hIcon; afx_msg HRESULT OnNotifyIcon(WPARAM wPram, LPARAM lParam); virtual BOOL OnInitDialog(); DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedStart(); protected: virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam); public: void ChangeEdit1(char* text); afx_msg void OnSysCommand(UINT nID, LPARAM lParam);};
とりあえず MFC スレに行った方がいいんじゃないか
ちょっと鳥食ってくる!
「やさしいC++」まで買ったのにMFCスレか(;´Д`) ちょっと行ってきます
visualC++2003だとMFCって使えるのですか??
VC2005expressだと使えませんよね。 2003の方がよかったってことですよね。残念だ
>>355 VC 2003 ExpressはMFCを使えませんよ?
libpngをVS2010Expressでコンパイルして使いたいんですがやり方が良く分かりません。 zlibを先にコンパイルしてそのlibをincludeすればいいんでしょうか? どこかに詳しいやり方を書いたURLかコンパイル済みのlibはないですか?
VC++でEXCITEのような英訳ツールは作れますかね?
矢印が絡むキーバインド変更のimport/exportが正しく認識されないのだが仕様? vssettingsをexportするとキー名が下矢印とかなってるんだが そのままインポートすると認識できないとか言われる。 vssettingsの該当箇所を'↓'に変えてやると一応メッセージは正常とかでるけど実際にはキーバインド変更されていない… 'Down'とか'DownArrow'とかも試してみたけど認識しない。回避手段とかないですか? vs2005と2008exで確認。vs2010はインストールしていない
正規品ならサポートセンターへ
一応メールでバグ報告だけするつもりでMSのサイト逝ったんだが、
相変わらずサインインが煩雑かつ有償サポートじゃないのになぜかクレカ要求されたんで戻る押してきた
ちなみに公式フォーラム覗いてみたけど同様の問題は挙がってなかった。
どうしても困るようなものじゃないので
>>360 の件はそういうものとして諦めます。
どうもでした。
Visual Studio 2008 Standard Editionにて、[新規作成]→[Win32]→[Win32 プロジェクト]、 アプリケーション種類:[Windows アプリケーション]を作成後、 リソースの追加にて拡張子が.wavのファイルを約82MByte分リソースとしてインポートして アクティブ ソリューション構成を「Release」にして、 ソリューションのビルドを行うと以下のように出力されビルドに失敗します。 ▼▼▼ 失敗例 ------ ビルド開始: プロジェクト: res_test, 構成: Release Win32 ------ コンパイルしています... stdafx.cpp ・・・ 中略 ・・・ リンクしています... コード生成しています。 コード生成が終了しました。 マニフェストを埋め込んでいます... プロジェクト : error PRJ0002 : エラーの結果 31 が 'C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\mt.exe' より返されました。 ビルドログは "file://k:\41_開発\streaming_res_test\res_test\res_test\Release\BuildLog.htm" に保存されました。 res_test - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== ▲▲▲ アクティブ ソリューション構成を「Debug」にして、ソリューションのビルドを行うとビルドは正常終了します。 また、アクティブ ソリューション構成が「Release」の場合でも、リソースにインポートするwavのファイルが 約13MByte分の場合も正常終了します。 Releaseのビルドの時に失敗する理由は単に、インポートするリソースの容量が大きすぎるからでしょうか。 この失敗を回避する方法をご存知の人がいらっしゃれば、お教えしていただけないでしょうか。 Visual Studio 2008 Standard Editionなのが悪いのでしょうか、Standardより上のエディションでは成功するのでしょうか。 よろしくお願いします。
365 :
デフォルトの名無しさん :2010/10/12(火) 00:04:13
SDKでダイアログベースのTPを作ろうとしているのですが、 DialogBox関数を実行してもダイアログが表示されません。 GetLastError() でエラーを取得すると、 「トップレベルの子ウィンドウを作成できません。」 を意味するエラーが返ってきました。 開発環境: Visual C++ 2010 SDK で「空のプロジェクト」からプロジェクトを作り、 リソースからDialogを追加して、IDを ID_MYDLG にしています。 以下の main.cpp を作りましたが、上記のような状態です。 #include <windows.h> #include "resource.h" BOOL CALLBACK MyDlgProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { DialogBox(hCurInst, MAKEINTRESOURCE(IDD_MYDLG), NULL, (DLGPROC)MyDlgProc); DWORD err = GetLastError(); return 0; } BOOL CALLBACK MyDlgProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { // ブレークポイントを設定しても、ここを通過しませんでした switch (msg) { // 省略します } return FALSE; } 以上です。どこがおかしいでしょうか。。。よろしくお願いいたします。
366 :
364 :2010/10/12(火) 02:16:33
マニフェストの生成で失敗していることがわかりました。 アクティブ ソリューション構成が「Release」の状態にて、 メニューより[プロジェクト]→[XXのプロパティ]を選択すると 「XXプロパティ ページ」のウィンドウが表示されます。 ここで、[構成プロパティ]→[リンカ]→[マニフェスト ファイル]を選択して、 「マニフェストの生成」を『いいえ』にして、ビルドを行うと ビルドの失敗を回避することができ、Releaseの実行モジュールが 作成されました。 その実行モジュールをWindowsXP SP2 OSをインストールしたての (他のものを一切インストールしていない)PCで動かすと動きました。 マニフェストというのがどういう役割をするものなのかわかりません。 また、マニフェストの生成をした実行モジュールとマニフェストの生成を しなかった実行モジュールを動かしてみて見た目の比較をしたのですが、 何が違うのかわかりませんでした。 下記の3点について、ご存知の人がいらっしゃれば教えていただけないでしょうか。 @ビルドの失敗を回避することができましたが、この回避方法は正しいのでしょうか。 Aマニフェストというのはどういう役割をするものなのでしょうか。 B「マニフェストの生成」を『はい』にしてビルドした実行モジュールと 『いいえ』にしてビルドした実行モジュールを比較して、後者は実行時に 何か弊害が起こりうるのでしょうか。あるとすればどのような弊害なのでしょうか。 よろしくお願いします。
iniファイルに書き込む為のプログラムを作ったのですが、 書き込むと最初に書いてあったキーと値が消えてしまいます。どうすればいいでしょうか。 void writeINI(char *key,int num) { char str[MAX_PATH]; const int maxBuf=100; char numChar[maxBuf]; int length; if((length = sprintf_s(numChar, maxBuf, "%s=%d",key, num)) < 0)error("INIへ書き込み失敗",NULL); if (length < maxBuf)numChar[length+1] = '\0'; getDirectry(str,"\\data\\setting.ini"); WritePrivateProfileSection("top",numChar,str); }
特に難しい点はないはずだし、サンプルも沢山あるはずだから まともなサンプルを参考に作りなおせばいい。
369 :
367 :2010/10/12(火) 21:55:15
同じセクションに書き込むと消えるって仕様があったんですね。。
自分もときどきマニフェストツールがなぜか失敗する現象に遭遇する。 ただ、そんなに大きなリソースを含むプロジェクトではないし、 もう1度ビルドし直せばうまくいくので、自分の場合は特に問題になっていないのだけど。
フォームアプリケーションを触り始めた初心者です。 いろいろ調べて、イベントを監視しフォームを表示し続ける無限ループのような処理であると理解してます。 これに対して、別の無限ループ処理(たとえば、USBカメラの入力があるか調べて画面に表示)を付け加えたいのです。 無条件に発生するイベントがあればよいのですが、MSDNを調べてもそのようなものはありませんでした。 どなたかうまい実装法を知ってる人がいたらご教授お願いします。
そのようなものはありません
タイマーセットして定期的にカメラの画像を取得、表示でおk。 カメラがDirectShowのじゃない場合あきらめんしゃい。
処理中で画像ファイルを読み込んだりするとき、相対パスの指定が、 VC++の実行ボタンで起動したときはソリューションかプロジェクトのファイルがある階層を基準にするのに対し、 実行ファイルを直接起動した場合は実行ファイルがある階層を基準にするので、 実行ファイルか画像ファイルのいずれかを移動してから実行しないといけません。 VC++から実行した場合でも、実行ファイルがある階層を基準にするように設定できませんか?
>>374 プロジェクトのプロパティの「デバッグ」-「作業ディレクトリ」
でも、実行時のカレントフォルダなんて、
ショートカットのプロパティなどでいくらでも別の場所になる可能性があるので、
常に「実行ファイルがある階層」を指定したいのなら、
自分自身のパスなどを使って絶対パスで指定しないと危険。
つ GetModulePath
377 :
374 :2010/10/13(水) 20:28:23
なるほど…… < VC++から実行した場合でも、実行ファイルがある階層を基準にするように設定 は>375さんが教えてくださった方法で実現できるけど、 いざ第三者に配布したときに、予想外のパスをカレントにされる可能性もあるんですね。 だから「実行ファイルと同じフォルダ内や、その下層にあるファイルを確実に取得したければ、 自分自身のフルパスを取得してからそれ基準で指定するべき」なんですね。 >376さんの関数名(ですよね?)等で検索して、調べてみます。 ご指導ありがとうございました。
というか、実行ファイルのフルパスを基準にするということ自体をしない方がいい
それだとインストーラが必要になるから初心者向きじゃない。
>>376 GetModuleFileNameでは?
381 :
364 :2010/10/13(水) 23:07:34
>>370 レスありがとうございます。
結局大きなリソースを乗せる方法をやめました。
ネイティブC++で使うものとC++/CLI他.NETで使うもの MAX_PATH
384 :
382 :2010/10/14(木) 10:22:41
>>383 ありがとうございます!
なんとなく分かってきました…。もうちょっと質問させてください。
2つの使い分けを試してみようと、コードの冒頭に
#include <windows.h>
を追加し、これでネイティブの関数が動くようになったと思うのですが
(そもそも windows.h が何者なのかもよく分かっていない初心者です)
「ネイティブC++を使いたいときは windows.h をincludeすればよい」 という認識は正しいでしょうか。
またこのとき、 .net に用意されている同名の関数が動かなくなってしまいます。
(要求されている引数が違うので当然ながらエラーになります)
クラスファイルを別々に用意し、windows.h をincludeするもの・しないものと分けたところ
ネイティブの関数が動くクラス・ .netの関数が動くクラス、と分けることができました。
同一ファイル内で両方の関数を使う手段はあるのでしょうか。
それとも、両方を使いたい場合はクラスファイルを分けるもの、と覚えればよいでしょうか。
朝から長文続きですみません。
名前空間: System.IO
386 :
382 :2010/10/14(木) 11:35:49
ありがとうございます。 名前空間で分けられるということですかね。ちょっと試行錯誤してみます。 とりいそぎお礼まで。
違いすらわからない段階で両方使うとかでたらめもいいとこだな
ある関数Aから関数Bを呼び出したとします。 関数Bでは関数Cを呼び、関数Cは関数Dを呼び・・・と何層にもなっているとします。 ここで、関数Cや関数Dから、goto文のように直接関数Aにreturnすることはできるでしょうか?
スタックについて
C言語かC++スレあやりでやってくれ
どうもです
longjump
スタックについて
ソリューションにプロジェクトが何故か2つ登録されてしまいました。 片方消したいのですがどうやればいいんでしょうか。
tes
396 :
デフォルトの名無しさん :2010/10/18(月) 13:25:29
Visual C++初心者のもです。odeを使ってシュミレーションシステムの開発をしていこうと思っています。 しかし、サンプルプログラムをビルドしようとしても。 fatal error C1083: ソース ファイルを開けません。'..\..\roboSimu\src\amotor.cpp': No such file or directory というエラーが出てきて開くことが出来ません。とても初歩な質問ですいませんがどなたか 答えてくれるとうれしいです。
シュミレーション
398 :
デフォルトの名無しさん :2010/10/18(月) 13:46:13
間違えました。シミュレーションでしたね
400 :
デフォルトの名無しさん :2010/10/18(月) 16:40:10
回答ありがとうございます。確認してみたところリソースファイルはあったの でそこが問題ではないと思います。
401 :
394 :2010/10/18(月) 16:41:24
レスがないってことは情報が足りなかったからでしょうか。 visual studio 2008を使ってます。
>401 ツールの細かい操作方法なんか暗記するものでもないし、 わざわざそういう状況作って試してみないと答えようがないだろ 自分なら直接定義ファイルいじればどうにでもなるから興味ないし
403 :
デフォルトの名無しさん :2010/10/18(月) 21:35:15
フォームの上にあるボタンなどコントロールを置いて、 その上に文字を描画するのってどうやったら出来ますか? ニコニコみたいに動画プレイヤの上に文字を乗せたいのですが、 まずはコントロールの上にどうやったら文字を描画出来るのかなぁと。
>>403 「windows サブクラス化」とかでググればサンプルコードでてくると思う。
ボタンは普通に字がでるだろ
>>404 なるほど、単純に出来るのかと思ったら、、
ちょっとググって調べてみます。ありがとうございます。
>>405 すみません、そういう意味ではないです。
407 :
394 :2010/10/19(火) 00:52:17
プロジェクトを右クリックで削除をしたら普通に消せました。
VS2005でVC++を使用しているのですが コードを書いてる途中にIntelliSenseを更新中となったままIntelliSenseが効かなくなったり VC++を終了できない状態が度々発生します。 これはどうすれば解決するでしょうか? 母艦DeskTopPCではおこらずモバイルノートPCで使用中に発生します OSはwin7starter VisualStudio2005を使用しています
>>408 引数にeという名前の変数がもう使われてるから
>>410 eは自分が使ってないところで既に使われてるってことなんでしょうか
ありがとうございました
バカなんだろうね
今使ってるノートPCsempron3600+だけど コンパイルに時間が2分くらいかかる PCそろそろ変えろってことだろうか
415 :
デフォルトの名無しさん :2010/10/21(木) 00:18:47
VC++2008で、例えば、 String^filename1,^filename2; ・・・ FileStream^fs1,^fs2; fs1=gcnew FileStream(filename1,FileMode::Open); fs2=gcnew FileStream(filename2,FileMode::Open); ・・・ fs1->Close(); fs2->Close(); といったようなプログラムで、filename1==filename2だった場合、 別のプロセスで使用されているため・・・アクセスできません。 というようなエラーが出ます。 これはつまり、fs1のあとfs2でも同じファイルを読もうとしたためで、 すなわち、同じファイルを異なるシステムが同時にアクセスできないようになっているという、システム全体の仕様だと思われますが、 それでも何とかしてできるようにするための手段はあるでしょうか。
reopen
今VC++2005Standardアカデミックパックを使っているんですが、 コンパイラの最適化性能においてVC++2008や2010のほうがより性能向上しているでしょうか? リアルタイムな処理を行うプログラムを作るので、より高速に動くようになるとうれしいです。
419 :
デフォルトの名無しさん :2010/10/23(土) 16:22:45
最近勉強を始めたばかりの初心者です。Visual C++ 2008 Expressを使っています .NET Framework 4で追加されたメソッドを使いたいのですがどうすればいいですか? .NET 4をインストールしてみたですがそれだけでは使えないようです
まずは適切なスレを選ぶ知能を得るのが先決
>>418 2005で十分。具体的にボトルネックを判断できるようになってからコンパイラやライブラリを選べばいい。自分で性能評価ができないと判断できないよ。
>>419 VC++は.netじゃないから使えません。C++/CLIで呼べなくないけど、C++/CLIは初心者にはお勧めできません。
423 :
418 :2010/10/24(日) 23:30:27
>>421 分かりました!
ありがとうございました!
VS2008のメニューのファイルのテンプレートのエクスポートが灰色で押せない 何か条件があるの?
425 :
sage :2010/10/26(火) 17:51:57
今入門書を見ながらvisual C++ 2005で色々なサンプルプログラムを作っているのですが、 似たようなものばかりで、あまり実用的なものがありません。 このスレの方で、昔自分が作ったプログラムを公開している方とかいますか? もしいるのならURLなどを教えてもらえないでしょうか? よろしくお願いします。
なかみの分からないdllがあります なんとなくこんな関数名がありそうというのは予想つくのですが cから呼ぶことはできますでしょうか
試してみればいいじゃん
cから呼べるけど馬鹿には呼べない
呼ぶのは簡単 戻ってくるとは限らない
Dependency Walkerつかえ
てか関数名わかってて何の問題があるのと
#pragma once class myClass { public: myClass(void); ~myClass(void); }; クラスの作成を行うと~myClass(void);ってのが出ます。 その上はコンストラクタって分かるんですが、~myClass(void);は何ですか?
C++の勉強なら入門書買うなり入門サイト見るなりしろよ
>>433 オススメの入門サイト教えて下さい
無料ソフトのみで開発環境を整える方法と
『おはよう』ってフォームに表示されるサンプルソースの作成・実行方法までが知りたいです
VC#でググっても全然わかんない(>_<)
>>434 MSDNでチュートリアルから全部見たほうがいいよ
>>435 こんなクソみたいな質問に答えてくれて本当にありがとう
色んなサンプル実行してみて勉強してみます
環境の整え方がさっぱりだったので助かりました(^0^)/
437 :
デフォルトの名無しさん :2010/10/28(木) 09:45:54
if(!(sage()))age();
Visual C++でできることって、単にウィンドウを作って、クライアント領域に 文字や図形を描画することくらいしかできないらしいな。 つまり実用性なしなんだな。
リソースエディタでダイアログにボタンやテキストボックスを置いて、 それをメンバ変数に結び付けて、イベントハンドラに、C言語ライクな コードを差し込むことがやっとできるくらいだし。 つまり、Visual C++だから何かできるわけではないんだな。 単に、今まで作ってきたコマンドプロンプトのプログラムを、 Windowsプログラムの画面を借りて、イベントハンドラにコードを差し込む ことができるだけにすぎないんだな。
本を一冊分学習しても、とても実用的とはいえない単発な処理の紹介で 終わってるものばっかりで、こんなんでどうやって商業的なプログラム を生産できるのかとがっかりだ。
ツール使えば馬鹿でもなんとかなるようにVBみたいなのがあるんだろ
今vc++ 2005でwindowsアプリケーションの勉強をしているのですが、 MFCでいうOnDraw関数のようなものは、windowsアプリケーションには 用意されていないのでしょうか?
エスパーしか答えられそうにない質問だ。 エスパーにトライ: windowsアプリケーションには表面的にOnDraw関数のような物は見えません。
OnPaint
WM_PAINTのことか?
WM_PAINT の処理は MFC で言えば OnPaint とちゃうん? MFC やったことないからわからへんけど。
longjumpもあるけどC++なら例外でいいんではないか。 デストラクタすら理解してない人は、Windowsプログラムなんか作るのは無理だろう。 Windowsプログラムの学習を中止して、C++の学習に専念してるんだが、それで正しいよな。 まずはコマンドプロンプトで上級まで行ってから、Windowsプログラムを学習してもいいよな。
巣に帰れ
(・∀・)ニヤニヤ
vc++初心者がデータベース(Access)を使ったプログラムを作りたいとしたら、 MFCと.NET(MSフォームアプリ)どっちが作りやすいと思いますか?
.netだったら、あえてVC使う必要ないだろ
C#がいい
>>452 VC++のテンプレートの中にあるWindowsフォームアプリケーションのことを
通称で.netって言ってるんだと思ってました。
>>453 VC++でやってみたいんです。申し訳ないです。
VC++でやるならMFCがいいだろJK
ネイティブ C++ でやるなら API でちまちまいっぱいコード書いていくのが楽しい
AccessのDBいじるならAccessでやるのが普通に一番いいjk
459 :
デフォルトの名無しさん :2010/11/02(火) 21:57:36
VC++2008について。Windowsフォームアプリケーションのプログラムで、 まず、フォームにラジオボタンを2つ置きます。次に、その1つのイベントプログラムに、次の文を書きます。 MessageBox::Show("〜","〜");(〜は何でも良い。上の方にusing namespace System::Windows::Forms;を書く必要のある場合も) そして、ビルドのあと実行させてみます。文を書いた方のラジオボタンをクリックすると、メッセージボックスが出ます。 そしてすぐに別のラジオボタンを押すと、なぜか同じようなメッセージボックスが出ます。 イベントプログラムに書いてないはずなのに出ます。もう1回押したときは出ませんが。 これはバグでしょうか。それとも何らかの仕様でしょうか。
仕様
>>459 ON→OFF チェック状態が変わった
OFF→ON チェック状態が変わった
3つ置けば分かるかと。
vc2010 expressにて、 プロジェクトにヘッダを追加する際に、 デフォルトで拡張子を.hppにする方法はありますか?
464 :
デフォルトの名無しさん :2010/11/04(木) 00:14:30
STLのmapを使おうと思って#include <map>して使ったら 「外部シンボルは未解決です、外部参照 1 が未解決です」というエラーが出ました 何か参照を追加しなければならないようなので、いろいろググって見たけどわかりません どうすれば解決できますか? VistaSP2 VC++2008EE Win32Projectです
>>464 エラーの内容を全部かけ
問題はお前が省いてるところにある
初心者って自分の解らないことには目を瞑るっていう 盲目フィルタ掛かってる香具師が多いな
467 :
デフォルトの名無しさん :2010/11/04(木) 00:47:16
>>465 すいません、省いているところに問題がありました
class hoge {
private:
static map<UINT, hoge*> hogePtr;
…
}
というふうにクラス内でstaticで宣言してましたが、staticをはずしたら
エラーにならなくなりました
mapはstaticでは使えないのでしょうか?
468 :
459 :2010/11/04(木) 00:55:00
>>460-461 なるほど、わかりました。
イベントプログラムは、ラジオボタンが押されているかいないかが変化したときに起こる、ということで。そこで・・・
if(○×△□->Checked==true)
MessageBox::Show("〜","〜");
としてみたら、ちゃんと、文のあるラジオボタンが押されたときのみ、メッセージボックスが出ました。
あるいは、他にちゃんとしたやり方とかございます?
>>467 mapじゃなくてもスタティックなメンバ変数は定義を書かないとエラーになる
適当なcppファイルに
map<UINT, hoge*> hoge::hogePtr;
と書いとけばいい
470 :
467 :2010/11/04(木) 01:16:46
>>469 ありがとうございます、staticでmapが使えるようになりました
超初心者でスタティックなメンバ変数を初めて使ったので定義を書かないと
いけないとはまったく知りませんでした。おかげさまでいい勉強になりました
本当に感謝感謝です
エラーメッセージくらい読めよw
質問させてください。 クラスを定義しているdllとそのlibがあります。 Release版のdllとlibをリンクさせた場合、 Releaseビルド時は正常に動作しているのですが Debugビルド時におかしな値が返ってきます。 また、Debug版のdllとlibをリンクさせた場合はその逆です。 dllはDebug版とRelease版の両方を公開する必要があるのでしょうか?
>468 ラジオボタンはボタンの一種だからボタン押したというメッセージがちゃんとある
475 :
472 :2010/11/04(木) 14:02:17
>>474 それはRelease版のみでいいということでしょうか?
それとも「公開」という単語の問題でしょうか?
提供と言い直した方がいいかもしれませんね。
自分の環境ですらまともに動かないゴミクズを 他人のPCに入れさせて迷惑かけるなよ
477 :
472 :2010/11/04(木) 14:18:43
>>476 私としてはまともに動かしたいのですが、
(Release版のdllとlibを提供するだけで動く)
原因がよくわからないため
dllとはそういうものなのかどうかを知りたいのです。
dllとして正常な動作でないのであれば原因を特定したいです。
(もちろん現在調査を行ってはいます。)
一般的に配布されているプログラムがどうなってるか見たらわかりそうなもんだけど、 あまり一般的でない開発用途や業務用途ということなんだろうか?
479 :
472 :2010/11/04(木) 17:38:14
>>478 ということは、Release版のみで問題ないはずですよね?
ありがとうございました。調べ続けてみます。
ソースも提供した方がいい
再配布と配布は別物
一般的なことを聞きたいのですがビットマップ表示ソフト(子ウインドウをたくさん出すタイプ)の リスト構造は親ウインドウのプロシージャでstatic宣言するものでしょうか? 今は子ウインドウプロシージャでstatic宣言していて親ウインドウの方でファイル読み込みダイアログを開いて子ウインドウをつくり 子ウインドウのWM_CREATEの処理でプロシージャに渡された ウインドウハンドルでリストをつなげています (つまり1ビットマップ1子ウインドウハンドルのイメージです) 親ウインドウ側の処理でリストを作った方がいいのか混乱しています。 子ウインドウの破棄の際のリストのメモリ解放で失敗していて・・・ 使ってるのはネイティブAPIとCです
484 :
デフォルトの名無しさん :2010/11/06(土) 05:48:57
リストを作った方がいい
どっからstatic宣言するものなんて考えが出てきたんだろ staticなのにメモリ解放とか意味わからん
子ウインドウプロシージャ { static 最後に読み込まれたリストへのポインタ; static 検索用ポインタ; static リストの先頭(NULL); WM_CREATE: リストデータ用メモリ確保; 読み込み; 挿入; WM_DESTORY: 今破棄されようとしているウインドウハンドルが入っているリストデータへ検索用ポインタを移動; データ破棄(メモリ解放); ウインドウ破棄 } 上のstatic宣言からデータ破棄までは親ウインドウ側のプロシージャでできるので 一般のソフトはどのように作られているものなのか聞いてみたかったのです そもそもマルチウインドウの操作にリストを使っていないかどうかも
C++にはバイナリイメージの規定がないって欠点があってな、 C++のlibの場合には呼び出し元とlibのビルド環境がコンパイルオプションも 含めて完全に一致していないと動作を保証できない。 必然的にソースコードも丸ごと提供するか、 両者に対して個別対応してサポートするか、 どちらかしかない。 もしソースコードを提供せずに互換性を維持したいなら、 COMかレガシーDLLとして提供する必要がある。
intって64ビットwindowsを使うと64ビットになってしまうんですか?
>>489 ありがとうございます。
64ビットでもintは64ビットになるとは限らないってことですね。
INTにすればどんなCPUでも確実に32ビットになるってことでいいんですか?
どうしてそのURLを読んでそういう結論になるのか理解できない
「ほとんどの」を全部だと思い込むひとはよくいる
データサイズを仮定しないプログラムをつくるようにこころがけないと。 もし int 型が 8bit の環境だとどうするんだ
short≦int≦longでshortが2バイト以上、longが4バイト以上と 標準規格で決まってるんで規格に従ってる限りはintが8bitはありえない
もし、ビット数固定の型が欲しければここら辺使え。 VC++ 2010以上またはVC++以外のコンパイラしか使わない <stdint.h>や<cstdint>のint8_t、int16_t、int32_t、int64_t、uint8_t、uint16_t、uint32_t、uint64_t VC++2008以下も使う(ただしWindows限定) <windows.h>のINT8、INT16、INT32、INT64、UINT8、UINT16、UINT32、UINT64 ほかには、Boostの<boost/cstdint.hpp>(int8_t……がboost名前空間にある)なども。
>>495 ありがとうございます。
参考になりました。
497 :
デフォルトの名無しさん :2010/11/08(月) 20:16:48
VC2003でいう 構成プロパティ>デバッグ>環境 な項目は VC2003だとどこで設定したらいいんでしょうか?
×VC2003でいう ○VC2008でいう
今日初めて触る初心者なんですがネットで勉強してて int a; int b; int c; int d; int f; int w; a=int::Parse(textBox1->Text); b=int::Parse(textBox2->Text); c=int::Parse(textBox3->Text); d=int::Parse(textBox4->Text); f=int::Parse(textBox5->Text); w=a+b+c+d+f; if(w>=300)textBox6->Text=L"合格です"; if(w<300)textBox6->Text=L"不合格です"; って入力したら 1>その5.cpp(19): fatal error C1075: 左側 中かっこ '{' に対応するものが 'c:\users\shintaro\documents\visual studio 2010\projects\その5\その5\Form1.h(225)' で見つかる前に EOF が検出されました。 って出たんだけどどういうことか教えてください
というかC++って初心者がさわっていいの?
テキストボックスで数字以外が入力されたら parse() が例外出すから このコードじゃアプリケーション落ちちゃうね
Visual C++2010でWindows mobileのソフト作ろうと持ったが どうすればいい?
>>506 Windows Mobile SDK
で検索
VC++2008以降でマルチバイト文字版APIを呼ぶ奴はアホ キャストでエラーを潰す奴はもっとアホ
Kitty
マルチバイトか Unicode かは アプリケーションが呼び出す Windows API を ANSI版かUnicode版のどちらにするかでもあるけど Windows NT系列(NT/2000/XP/Vista/7/それ以降)で、 ANSI版を呼び出しても内部で Unicode 版を呼び出し直すから そのアプリケーションを WIndows 9x で動かせるようにしたい場合以外は パフォーマンス的にも無駄。 ちなみに Visual Studio 2008 以降では Windows 9x で動くバイナリは 吐けないんだったかな
あと、ANSI版のAPIは新しい Windows では呼び出せなくなる可能性も想定しておくべきかな。
それはないわ
その辺で、もっさりして使えないと思った経験ないからどうでもいい。
結局ライブラリ側が対応してないって事で切り捨てたりするよね。
よろしくです visual studi 2008 express なのですが $(IntDir)とかのように、長いパスをマクロで定義したいのですが、どこで行うのでしょうか?
馬鹿よけ
ウインドウを作成しないで、他のウインドウの上に(或いはデスクトップのルートウインドウ上に)描画したい。 全画面表示の他のプログラムの上にも描画したい。 同様に、他のプログラムの特定の位置から色を取得したい。全画面の他のプログラムの特定の位置からも色を取得したい。 どのようにしたらいいでしょうか。 gccを使ってプログラムをいじったことはかなりあるんですが、Windowsのプログラムはやったことがないです。
ウインドウを作成しない〜はウイルスの作り方を参考に 他のプログラム〜はウインドウのハンドルを取得
ウイルスですかw。 とりあえず、OnekoのWindows版のソース落として読んでみます。
ウィルスの作り方なんか参考にしなくても ウィンドウを作成しないウィンドウなんて簡単に作れるだろ 他のアプリに描画するのもHWND/HDC取れれば可能 他のプロセスにもぐりこませるのはDLLインジェクションで可能
わかりました。がんばるっす。 ああ、もしかすると、相手はプロセス名とか隠蔽されてるプログラムかもしれませんけど、その節はまたお世話になります。
ウォッチウィンドウで変数を2進数で表示することは可能ですか? 可能ならどうやるのですか? 学校には製品版のVisualStudio2008もあります。
ウォッチウィンドウで右クリックすれば「16進数で表示(&H)」ってのがあるけど、 それで代用できないかな。 HRESULT型なんかだと勝手にS_OKって文字列で表示されるから便利でもあるし、不便でもあるけど。
普通は16進で充分 っつーか2進だと見にくくね?
VS2008 VC++で、デバッグ中に例外した場所で止めたいんだけど。 方法有りませんか? 上位のcatchまで飛んでしまうのは辛い。
デバッグメニューから例外からC++ Exceptionsを選択する
ありがとうございます。
VC++2008です makeファイルからプロジェクトを作る方法ってないのですか
ポインタについての初歩的な質問なんですが 初めにポインタを2つ用意してその後各ポインタのサイズを指定した場合、 2つ目のポインタが上書きされてしまう恐れはありますか? unsigned int data = sizeof(unsigned int) * 256; int* arrayA; //@ int* arrayB; //A arrayA = (int*)malloc(data); //B arrayB = (int*)malloc(data); 上の例でですが、この順に実行した場合、AarrayBの番地情報がBの領域確保時に上書きされてしまうのでしょうか? @とAの番地データはメモリ上で連番で確保されているのでしょうか?
>AarrayBの番地情報がBの領域確保時に上書きされてしまうのでしょうか? 意味不明だが、エスパーするとされない。 >@とAの番地データはメモリ上で連番で確保されているのでしょうか? 連続の場所になるかは未定義。 普通はされない。
>>534 回答ありがとうございます。
ということは、
Bで[確保した領域の始点アドレス]を[@に代入]すると言うだけで、
(@,Aで連番で確保されていたとしても)Aが上書きされることは無いということなんですね。
ありがとうございました
頭の中では
[A][B][ ][ ][ ] Aの時点でこうなり
[A][0][1][2][..] Bでこうなると思ってました。
ポインタのサイズとか言ってる時点でポインタがなんだかわかってないやろ
>>535 おおむねOK
arrayA = (int*)malloc(data); //B
arrayB = (int*)malloc(data);
これで、たまたま連番で確保されたとしても、、Aに確保された下に確保されるので。
重なる事はない。実際には、確保以外にメモリー管理領域があるので。
連続に確保されたとしても、管理分のメモリーが間に入る。
自演うぜー
言語スレでやれよ
1>DataAccess.obj : error LNK2028: 未解決のトークン (0A000016) "extern "C" unsigned __int64 __stdcall mysql_affected_rows(struct st_mysql *)" (?mysql_affected_rows@@$$J14YG_KPAUst_mysql@@@Z) が関数 "public: int __clrcall Cosme_System::DataAccess::Delete_Order(class System::String ^)" (?Delete_Order@DataAccess@Cosme_System@@$$FQ$AAMHP$AAVString@System@@@Z) で参照されました。 こういったエラーがやまほどでるんですが何が原因かさっぱりわかりません 宜しくお願い致します。 VC++2008、DBはmysql5.1です
error LNK2028 でぐぐる
ライブラリをリンクしてないだけじゃね
必要なリンクはしてると思うんですがやっぱりわかりません
>必要なリンクはしてると思うんですが 構成貼ってから言え
dataaccess.hには下記2つとフォームのヘッダを4つinclude #include <winsock.h> #include "mysql.h" dataaccess.cppには #include "StdAfx.h" #include "DataAccess.h" #include <string> mysql.hを使ってるのでプロジェクトのプロパティ→C/C++の追加インクルードに "C:\Program Files\MySQL\MySQL Connector C 6.0.2\include" リンカ→入力→追加の依存ファイルに "C:\Program Files\MySQL\MySQL Connector C 6.0.2\lib\opt\libmysql.lib" $(NOINHERIT)
接続は int DataAccess::DatabaseConnect(void){ //データベース接続 mysql_real_connect(mysql,"localhost","","pass","database",0,"null",0); //データベース接続エラーチェック if(mysql_errno(mysql) != 0) { String^ err = gcnew String( mysql_error(mysql) ); Debug::WriteLine("エラー発生:" + err); return -1; } return 0; } こんなところですが、どうでしょう
> __int64 32bit版のlibをリンクしてるとか?
OSはvistaの64bitですが落としてきたConnector mysql-connector-c-6.0.2-winx64.msiなので 大丈夫かとは思ったのですが マジでわからんですorz
mysql-connector-c-6.0.2-winx64.msiって x86のプロジェクトにx64のライブラリをリンクさせようとしてるだろ。 32bitのプロジェクトにリンクするには32bitのライブラリもDLしてインストールしないとならない。
>>552 目からウロコでした
みなさん丁寧にありがとうございました
おかげでできました
インクルードファイルでコンパイルエラーがあると、インクルードしている総ての.CPP でエラーが出まくって、数千にもなってしまいます。 これを、100ぐらいで止める方法有りませんか?
比較的新しいバージョンなら100個でC1003が出て止まるが
VC2008EEです
どこぞのビタミン剤かとおもた
C1003タケダ
10005938349
Windowsエクスプローラーに代表されるツリーコントロールの上にあるツールバーは どのように実装すればいいのでしょうか。 今まで普通のツールバー(メニューのすぐ下の)しかしたことなくてわかりません。
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/603byteimage/byteimage.html ↑のサイトを参考にVC++でImage型をバイト列に変換するコードを書いたのですがC2664エラーが出てしまいます。
どこが間違っているのでしょうか。
using namespace System;
using namespace System::Drawing;
using namespace System::IO;
using namespace System::Net;
ref class imgConv{
ImageConverter^ imgconv;
public:
imgConv(void){
imgconv = gcnew ImageConverter();
}
System::Drawing::Image^ ByteToImage(array<Byte>^ b){
System::Drawing::Image^ img =dynamic_cast<System::Drawing::Image^> (imgconv->CanConvertFrom(b));
return img;
}
cli::array<Byte>^ ImageToByte(System::Drawing::Image^ img){
cli::array<Byte>^ b = dynamic_cast<cli::array<Byte>^> (imgconv->ConvertTo(img,typeid::cli::array<Byte>^));
return b;
}
};
^
その鯖おちてるよ
コールバック
____ /__.))ノヽ .|ミ.l _ ._ i.) (^'ミ/.´・ .〈・ リ .しi r、_) | | `ニニ' / ノ `ー―i´
569 :
デフォルトの名無しさん :2010/12/04(土) 15:03:06
Visual C++とC++は違うのでしょうか? また、違うのなら何が違うのでしょうか? それとなぜみなさんはコードを書いたり出来るのでしょうか?やはり努力ですか?
鉛筆と紙は違うのでしょうか? また、違うのなら何が違うのでしょうか?
Visual C++ = Visual Studio C++ MS社の商品名 C++ と言った場合、言語のC++全体を指す。 >違い 商品名と一般的な俗称。C++で規格の事を示す場合もある。 >それとなぜみなさんはコードを書いたり出来るのでしょうか? 興味+趣味+努力+楽しさ。
573 :
デフォルトの名無しさん :2010/12/04(土) 19:15:38
>>571 ありがとうございます。これからがんばってみます。
やはり勉強するには本などを買うのがいちばんでしょうか?
一番簡単なのは、知ってる人に教えてもらう。
今はニコニコ動画に講座がいっぱいあるから それ見ればおk
>>568 どちらを試してみても、抽象クラスをインスタンス化できません。と言われてしまいます。
1> 'HRESULT IUnknown::QueryInterface(const IID &,void **)' : は抽象型です
1> C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\unknwn.h(116) : 'IUnknown::QueryInterface' の宣言を確認してください。
1> 'ULONG IUnknown::AddRef(void)' : は抽象型です
1> C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\unknwn.h(120) : 'IUnknown::AddRef' の宣言を確認してください。
1> 'ULONG IUnknown::Release(void)' : は抽象型です
1> C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\unknwn.h(122) : 'IUnknown::Release' の宣言を確認してください。
1> 'HRESULT IMFAsyncCallback::GetParameters(DWORD *,DWORD *)' : は抽象型です
1> c:\program files\microsoft sdks\windows\v6.0a\include\mfobjects.h(2944) : 'IMFAsyncCallback::GetParameters' の宣言を確認してください。
1> 'HRESULT IMFAsyncCallback::Invoke(IMFAsyncResult *)' : は抽象型です
1> c:\program files\microsoft sdks\windows\v6.0a\include\mfobjects.h(2948) : 'IMFAsyncCallback::Invoke' の宣言を確認してください。
>>580 これわちょっとw
まじめでいいと思うけどぉ
えっ?
えっ?
VC++2010でCを書いてます。 ファイルの読み出しでハマったので質問させてください。 FILE fh; long pos; _tfopen_s( &fh, _T( "textfile.txt" ), _T( "r,ccs=UTF-8" ) ); と、UTF-8として開いたファイルからfread()や_fgetts()なんかでデータを読み出した後に pos = ftell( &fh ); でファイルの位置を読み出すとマイナス値になったり、そうでなくても変な値が返ってきます。 データ自体は正常な文字列で、正しく読み出せています。 とりあえず_ftelli64()を使ったら正常な値が返ってきたのでlongにキャストして使ってるんですが、これって仕様なんでしょうか? MSDNみてもそれっぽい事書いてないし、なにか予め呼ばなければならない関数なんかがあったりするんでしょうか。
FILE *fh;
書き込んで読み直して更新したらもうレスが! ごめんなさい。 実際は、ライブラリのような物の中の問題で実際のコードをコピペできなかったので、 再現するであろうコードを頭なの中で作って書きました。 実際はちゃんとFILE*ですし、_tfopen_sにはポインタのポインタを渡しています。 あとftell( &fh );も誤りで、実際はftell( fh );になってます。
大抵のバグは本人が関係ないと思って省略している場所に原因がある
591 :
デフォルトの名無しさん :2010/12/05(日) 13:36:55
なるほど、たしかにそれは否定できませんので、再現するコード書いてきました。 これはVC++2010Expressでビルド通してきました。 #include <stdio.h> #include <Windows.h> #include <tchar.h> int _tmain(int argc, TCHAR* argv[]) { FILE *fh; long pos; TCHAR buf[32]; _tfopen_s( &fh, _T( "D:\\test.txt" ), _T( "r,ccs=UTF-8" ) ); _fgetts( buf, 32, fh ); pos = ftell( fh ); _tprintf( _T( "offset %d\n" ), pos ); fclose( fh ); Sleep( 10000 ); return 0; } D:\\test.txtの中身は ABCDEFG HIJKLMN OPQRSTU VWXYZ このコードで、_fgetts()は正しくbufに「ABCDEFG」を書き込みます。 しかし、ftell()は-12を返してきます。
fseek(fh,0,SEEK_END); をftell()の前に入れればいいよ。 _fgettstって何なの?
ggrks
>>592 fseek( fh, 0, SEEK_END );
いれたら末尾のオフセットが返ってくるだけですよね。
読み出した後の位置を保持したいので、ダメなようです。
_fgetts()はfgetsのtcharマクロです。
test.txtは改行文字がCRLFなので、ftell()は9を返してこないといけないはずです。
……と思ったら_ftelli64()もなぜか10と返してきますね。
ccs=UTF-8を外すと、ftell()も_ftelli64()も9を返すようです。
UTF-8で開くと_chsize_s()もなぜか失敗しますし、何か変じゃないですかこれ?
ttp://home.att.ne.jp/banana/akatsuki/doc/atlwtl2/window01/index.html このページを参考に、プログラムを打ち込んでいたのですが。
全部打ち終わり、コンパイルすると以下のようエラーが出てしまいます。
1>main.obj : error LNK2001: 外部シンボル ""void __stdcall ATL::__FreeStdCallThunk(void *)" (?__FreeStdCallThunk@ATL@@YGXPAX@Z)" は未解決です。
1>main.obj : error LNK2001: 外部シンボル ""void * __stdcall ATL::__AllocStdCallThunk(void)" (?__AllocStdCallThunk@ATL@@YGPAXXZ)" は未解決です。
1>D:\Documents\Visual Studio 2008\Projects\ATL\Release\ATL.exe : fatal error LNK1120: 外部参照 2 が未解決です。
試しに、上のページにあるプロジェクトからもコンパイルしてみましたが、結果は同様でした。
どうすればこのエラーを解決できるでしょうか?
プロジェクトDLしてコンパイルして実行しても、何も問題なかったけど。 たぶんライブラリーの環境設定だな。 プロジェクトをDLして比較してみ。
ExpressにWDKあたりからATL 7.1を持ってきたんだろう。 atlthunk.libとリンク。
>>597 その通りでした、
エラーなくコンパイルできました、有難うございます。
すいません学生のころポケコンでC触った位のど素人です。 VC++Ex2010でハードウェアからのデータを受け取り、その値を計算した数値をウィンドウ上に表示するプログラムを作成しています。 ヘッダAで変数 int Ix1,Iy1,Ix2,Iy2; int Ix3,Iy3,Ix4,Iy4; int Brf,Brb,Blf,Blb; int Mrf,Mrb,Mlf,Mlb,Msum; int Brf_offset,Brb_offset,Blf_offset,Blb_offset; を宣言し、ハードウェアからのデータを取り込むところまで行っています。 メインでは 以上のヘッダをincludeして HDC hdc; RECT rt; static char *str = "button1,button2,(double)(Msum)/100,Mrf,Mrb,Mlf,Mlb)"; を定義した状態で、 BeginPaint(hWnd, &ps);以下に DrawText (hdc, str,-1,&rt, DT_WORDBREAK); と記述し、コンパイルして実行すると、変数の値ではなく、"button1,button2,(double)(Msum)/100,Mrf,Mrb,Mlf,Mlb)" がそのままテキストとして現れます。 DOS上ではprintfで問題なくハードウェアの数値が現れたので、ヘッダファイル側の問題は少ないと思います。 これらを変数の値として表示するには何が足らないもしくは間違っていたのでしょうか?
ハードウェアからうんたらとか全然関係ない前置き長いわりに質問くだらなすぎて笑った
603 :
デフォルトの名無しさん :2010/12/08(水) 00:52:10
開いてるタブのソースの一部を切り取りしてデバッグした後 ctrl+zせずにタブ閉じちゃったんですけど元に戻せませんか?
bool型の動的配列を作るにはどうすればいいでしょうか? vectorではイテレータがうまく動いてくれませんでした
605 :
デフォルトの名無しさん :2010/12/08(水) 03:50:32
VC++2008EEなんですが デバッグ開始 →コメントアウト デバッグなしで開始 →コメントアウトされない という状態にしたいのですができますか? #if defined(DEBUG) | defined(_DEBUG) #endif これの逆をしたいのですが、#if !(defined(DEBUG) | defined(_DEBUG))としてもデバッグなしで開始の時もコメントアウトされてしまいました。 よろしくお願いします
IsDebuggerPresent()
ドモルガンくらい覚えとけよ
>>605 開始/デバッグなしで開始は、デバッガを使うかどうかの実行時の話
デバッグビルド/リリースビルドは、実行以前のコンパイル時の話
>>605 シンプルに
#ifdef NDEBUG
ではダメ?
x #if !(defined(DEBUG) | defined(_DEBUG)) o #if !(defined(DEBUG) || defined(_DEBUG))
今開いてる全部のウィンドウを同時画像保存したいんですが、 記述がわかりません。 Printscreenキーを押して、全画面を保存するようなものは作ったのですが、 Alt+Printscreenで撮ったような画像を希望しています。 諸先輩方、知恵をお貸しください。 VisualStudio2008 standard(MFC)です。
くさるぐらいサンプルあるはずだけど
>>610 ありがとうございます
イテレータが動かないわけも解説されていて納得です
bitsetを利用してみます
615 :
612 :2010/12/08(水) 21:34:48
>>613 プログラムの画面保存だと結構サンプルがありそうなのですが、
例えば電卓とか他のウィンドウも取得しようとするとなかなか見つからなくて困っているのです。
重なっていても隠れた部分もキャプチャ 重なっていたら重なったままキャプチャ いったん最小化を解除してキャプチャ後戻す 非表示のウィンドウを表示してキャプチャ後戻す
Test
618 :
デフォルトの名無しさん :2010/12/09(木) 05:18:14
class A : public B{として よそでB型のポインタ変数を作ってあるのですが Aの中だけで使われてるパブリックのメンバが->しても出てきません アクセスする方法があったら教えてください
619 :
デフォルトの名無しさん :2010/12/09(木) 05:32:12
A *a = (B*) Bの変数でできました ありがとうございました
>>619 せめてdynamic_cast使え。A* a = dynamic_cast<A*>(b);
VC++2008 expressです。 これまでwin32concole applicationばかりつくってたけど、Qt使うために メイクファイルプロジェクトていう形式で(よく分かってないんですが) 作り始めました。インクルードとか依存関係を指定するためにmakefileのファイル自体に additional include, library directories, additional dependencies (XX.libとか)に関して INCLUDEDIRS = /I "C:\boost\boost_1_38_0\include" みたいに編集してやってもデバッグするとmakefileが元にもどってる。。。 うん、なんかとんでもない勘違いをしているようなんだけど、わけがわからないです。 メイクファイルプロジェクトでライブラリや依存を指定してやる(特にadditional dependencies ) にはどうすればいいんですか?
メイクファイルプロジェクト使えと言ったやつに聞けばいいんじゃないの?
623 :
621 :2010/12/20(月) 10:21:54
>>622 ネットの数少ないサンプルやチュートリアルを真似てやってるんですが、Qtはビルドに
qmakeというやつを使わないといけないらしくて、それでメイクファイルプロジェクト
じゃないとだめっぽいです。というかそういう解釈をしてます。
win32concole applicationではプロジェクトのプロパティでいろいろ設定できたんですが、
メイクファイルプロジェクトではC++ generalやlinkerの設定がVCのメニューからは出来ない
みたいなんですよね。。。。
プロジェクト作るたびに追加のインクルードディレクトリ指定するのが面倒なんだけど、 #pragma commentあたりで代用することはできない?
初歩的な質問で申し訳ないんですが、 今までVisualC++2008使っててPC変えたから2010にしたんですけど、デバッグなしで開始てないんですかね? Halloworldて実行したら一瞬だけ実行画面が出て勝手にウィンドウが消えるんですけど…どこの設定を弄ればいいんでしょうか
>>627 return 0 の前にでも
iostreamインクルードして
std::cout.get();
とかでもいんでね?
629 :
628 :2010/12/29(水) 22:42:55
間違えた cin.get();
getch()とかがベタだな。
レスしてくれてありがとうございました ::て演算子がちょっとよく分からなくてググったんですけど、C++じゃなくてCの勉強してます もしC言語のことだったんなら話のレベルについていけてませんでした…C3級程度です
↑627です
>>627 ツール->設定->上級者用の設定はどう?
>>633 うまくいきました!ありがとうございました
Visual C++の学習はこのようにやれば成功しますか。 1. C++の言語仕様を徹底的に学習して確実に理解していく。 それまではWindowsプログラムのことは考えない。 2. MFCウィザードで作成したスケルトンコードや、MFC のサンプルプログラムコードを解読していく。 3.解読するために、MFCのクラス階層図を確認したり、MSDN を参照すると共に、C++の学習した知識を応用しながら、 MFCのヘッダーファイルやソースファイルも調べていく。 4. そうやって理解しながら自分の追加したい機能をどの ようにすれば実装できるかを試行錯誤しながら検討していく。
>>635 100%すべて完璧に理解しようとする勉強のやりかたは
おすすめできない。
必要なときに必要なことを調べられる能力の方が重要。
でもそれは人それぞれだと思うので、その方法が自分に
向いていると思えば、そうやってもいいし、興味のあるうちに
やった方がいいこともあるしね。
>>636 そうですね。
出来る人は出来ない人に教えるって難しいのかも。
VCに関しては ダイアログベースでUIの色んなツールを
作るってのが楽しいかも。
sqliteブラウザとか楽しいのでわ?
ただC++に関しては コンソールの環境でコツコツやった方が
いいね。私はLinux使いなので、gccの環境が習得しました。
でも使えるのかどうかはわかりませんw
何人だ?
C++ は本にもよるけど、 クラスの手前までとプリプロセッサの処理とかをとりあえずやって、 Windows API でのプログラミング学んだ方が良いんじゃないかなぁ。 MFC は Windows API でのメッセージ処理とか標準コントロールの使い方覚えた後で C++ のクラス勉強してその後で良いと思う。
>>635 少なくとも2や3はしない方が良い
MFCは良質なサンプルじゃないから
すまんが教えてくれ。 wsprintf を使うと C4995 のワーニングが出るんだが、これどうしたらいい? 無視するという方向はなしで。
ぐぐったら解決した
解決してねーw
Security Alert Using this function incorrectly can compromise the security of your application. The string returned in lpOut is not guaranteed to be NULL-terminated. Also, avoid the %s format -- it can lead to a buffer overrun. If an access violation occurs it causes a denial of service against your application. In the worse case, an attacker can inject executable code. Consider using one of the following alternatives: StringCbPrintf, StringCbPrintfEx, StringCbVPrintf, StringCbVPrintfEx, StringCchPrintf, StringCchPrintfEx, StringCchVPrintf, or StringCchVPrintfEx.
SDKのリファレンスでは 将来のバージョンで削除される可能性については一切触れてないな。 でも web 版でははっきりと使うなって書いてるな Note Do not use. Consider using one of the following functions instead: StringCbPrintf, StringCbPrintfEx, StringCchPrintf, or StringCchPrintfEx. See Security Considerations.
おお、ありがと。 安全性の問題については知ってたんだけど、てっきり _s がついた関数があるとか、そんなんだと思ってた。 自力だったらもうしばらくたどり着けないとこだったよ。
647 :
デフォルトの名無しさん :2011/01/13(木) 09:16:44
神様教えて下さい! VC6 のかなり昔の持ってるんだけど、たまにやろうかなとは思うんだけどVBに何度も出戻りしちゃうんだよね^^; 未だによく分からない事、それはリソース(.rc)の拡張子の中身はフォームの状況とかが羅列されてい入っているみたいなのはわかった。 でもこれはクリエイトうんちゃらーというAPI使って直接書いてない気がするんです。 これの仕組みがわからないのでIDE使うのがおっかなくてしょうがないんです。 #include "afxres.h"も関係しているのかな? この.rc は何処の何が処理してコントロールとかウィンドウになるのか? その辺の仕組みを神様方教えて下さいませ;;
648 :
デフォルトの名無しさん :2011/01/13(木) 09:28:11
少し情報が足らなかったかもしれないです。 メニューリソースというものです。 BEGIN END とか MENUITEM や MENUITEM SEPARATOR とかです。 リソースは何がどうなるとCreateWindow とかを呼んでいるに等しくなるのかが知りたいのです。 ヘッダーの中?それとも何か特別なマクロ? この辺を是非よろしくお願いします。
exeに埋め込まれたリソースファイルを windowsの中の人が読んでちゃんとやってくれるんだよ
650 :
デフォルトの名無しさん :2011/01/13(木) 09:47:04
;; えっと・・・ どの当りで何を定義してるんですか? MSDNライブラリ見ても近しい近い何かは見つかりますが その読み込みしている関数みたいなものの類がわかりません。 OLEとかオブジェクト関係なのでしょうか? それともインターフェイス マップとかなんでしょうか? 今はインターフェイス マップの基礎 って所のヘルプ見てるんです^^; 見当違いのところを探すことはしょっちゅうですw そろそろ見極めたい年頃なんです><; 良かったら何がどうなのか教えて下さい。
LoadMenuとかそういうことを聞いてるのか? なにが分からないのかわからない
652 :
デフォルトの名無しさん :2011/01/13(木) 09:50:39
結局ですね、コントロールを作るのはせっかくIDE使っているので APIから打ち込むのって無意味に感じるんです。 しかしですね、細かくコントロールをカスタマイズするのなら そのexeファイルに埋め込まれたリソースを元にしていじるのは 余計に手間なのかとかもわからないんです。 結局リソースエディターにはカスタマイズの壁があるのかどうかとか その当りも知りたいのです。 とりあえずですね・・・ そのリソースを変換してくれる関数の名前を知りたいです。 もしくはそのリソースをインクルードしている構文です。 よろしくお願い致します。
653 :
デフォルトの名無しさん :2011/01/13(木) 09:58:28
なるほど! ロードメニューなんですね。 調べたら出てきました! いっぱい沢山聞きたいことがあるんですが、 重要そうな要点だけお尋ねします^^; LordMenuはWindows のコントロールの表現に限度がありますか? 例えばリージョンだけの多角形ウィンドウとかのリソースって作れるのでしょうか? そして読み込めたりするものなのでしょうか? どの程度までリソースを用いて開発した方が楽で、 どの程度以上は不可能か、しない方が無難でしょうか? 経験上感じた事でいいので是非お教え下さい><;
>>653 >例えばリージョンだけの多角形ウィンドウとかのリソースって作れるのでしょうか?
無理
リソースファイルに期待しすぎじゃねーか
あんなのは使いまわしたいときにちょっとだけ楽するためのもんだ
655 :
デフォルトの名無しさん :2011/01/13(木) 10:36:20
>>654 なるほど、有難う御座いました。
色々調べてみもみました、まとめですが、
リソースファイルはリソースエディタである程度のウィンドウが作れる
|
リソースエディタはリソースを.rc 吐き出す
|
.rcはLoadMenuで呼び出す。
|
呼び出したリソースにはリソースを作成したときに決めたIDを
ウィンドウプロシージャでキャッチして使える様になる
こんな感じのイメージでよいのでしょうか?
656 :
デフォルトの名無しさん :2011/01/13(木) 10:54:07
今までしたらばは上手に教えてくれない所だと思っていました。 下手な質問の仕方しかできないのですが、勇気を振り絞って聞いてみてよかったです。 私は全てに近いぐらい独学で学んでいます。 こんな事でも知らないだけで進めない事がいっぱいで、自分だけで調べるよりもとても為になりました。 ちょっと連絡が長い間取れなくなるので、先にお礼をさせて頂きます。 感謝しています。 本当に有難う御座いました。
657 :
デフォルトの名無しさん :2011/01/13(木) 10:58:11
なんだアスペか
659 :
デフォルトの名無しさん :2011/01/13(木) 11:53:20
660 :
デフォルトの名無しさん :2011/01/13(木) 12:07:34
VCで連想配列みたいなのがしたければ、やっぱ構造体やクラスを使って関数を作るのがセオリーですか?
形無しならboost::any
663 :
デフォルトの名無しさん :2011/01/13(木) 12:30:15
>>661 >>662 STLは便利そうです。
しかしコンパイルした時に大きさとスピードは、
自身で作ったメモリの確保、開放操作を含めたクラスと比べてどうでしょうか?
ライブラリに任せるのってなんか不安なのですが飛び越し苦労でしょうか?
664 :
デフォルトの名無しさん :2011/01/13(木) 12:46:41
>>663 ですが、実際にCやC++で可変長のクラスとかを作ったことはありません。
C++のバージョンによっては可変長関連の扱いが変わったコンパイラも存在している事は調べました。
私は他の言語で後から配列の大きさを変えられる言語や、配列の大きさを気にしなくて良い言語に慣れている為、
それらが可能かどうかを調べた事があり、作り方までは理解したのですが、
果たしてその自身で作る可変長配列を使うのが良いのか、良く聞くSTLをマスターして使うほうがいいのか、その辺が初心者にはわからないのです。
665 :
デフォルトの名無しさん :2011/01/13(木) 12:50:27
あぁ、なんだかこう書いているうちに頭の中が纏まってきました。 一度私がやってみるべきですね。 有難う御座いました。
>>663 自分にとって(他人にとっても)車輪作りは苦痛でしかないので
class Hoge{};
typedef shared_ptr<Hoge> HogePtr;
map<key,HogePtr> hogemap;
などとし
Hoge生成時のアロケーターにはboostのpoolでも使います
ま、お好きにどうぞ
667 :
デフォルトの名無しさん :2011/01/13(木) 13:37:18
>>666 車輪つくりは苦痛でしかないのは、誰かに何かを追われてしまった場合でしょう。
実際物事を表現し創ることは楽しいことです。
私はデータベースのO/Rマッピングを長い間知りませんでした。
その言葉を知ってから世界観が大きく変わりました。
何か構造的なことを表現し整理がつけられる事が楽しくてしょうがありませんw
インスタンス上の話なのか、データの宣言の話なのか、インスタンス上のデータなのか
そういうことを考えるとデザインと一緒な気がします。
家具も整然としていると美しい様にw
何か綺麗に作れると、よりいっそうアイデアが湧きます!
また少し話しは変わりますが、やっぱり何を目的にして
プログラムを組むかが重要なんだとも実感しています。
他人が使うプログラムは汎用性を高めるべきだと思います。
STLが後々まで見通しが利くと思えるのならば是非使うべきだと思いました。
>>666 さんサンプル有難う御座います。
しっかりと実感しながら物にしたいと思います。
>>667 ごめん
何を言ってるのか分かんないし
何が言いたいのかも分かんない
とりあえず、頑張れ
669 :
873 :2011/01/13(木) 15:23:08
O/Rマッピングとか、DIとか流行ってるみたいだけど、 めんどくせえから、オブジェクトごとぶっこめるDB見たいの作った方がはやくね?
O/Rマッピングはあまりよくない
>>668 どんなプログラムでも
自分で考えるのは
楽しい
ORMは土方用ツール
673 :
デフォルトの名無しさん :2011/01/14(金) 10:51:36
>めんどくせえから、オブジェクトごとぶっこめるDB見たいの作った方がはやくね? これを作るならO/Rマッピングは考えるよね? 設計=マッピングの仕方だと思う。 マッピングできる人は取り出したい取り出し方を明確に持っているという事。 これは個性そのもの、そう思う。 私は馬鹿なのだが、 私は馬鹿属性なのか? それとも馬鹿の中の部類なのか?とかいう考えか、 私は馬鹿プロパティを持つのか、馬鹿メソッド使いなのか、 捉え方そのものが個性。 >めんどくせえから、オブジェクトごとぶっこめるDB見たいの作った方がはやくね? これが出来るのは一度何かを何度か作って、そのDBの生かし方を考えた事があるからだろうと思う。 しかし取り出し方は汎用性があってDBみたいなのを作るのが便利だが、 実質欲しいのは、私が馬鹿なのかどうか確認したいだけであり、 その汎用性だけで終わる部分は、馬鹿なのかどうか確認したい人には無駄な操作になる。 小さなことが知りたいのに大きなことを振り回すのは不便だから それを便利に落とし込めるのは楽しいと思う。 その落とし込みも個性だと思うし、それもO/Rマッピングだと思う。 土方というのは納期があるとかデスマーチ系の職として考えた場合じゃないだろうかと思う。 私は楽しくプログラミングを覚えてしまったので、 これから職として役に立つかどうかの思想はまったく含めていないが、 あえて初めからその辛い事ばかり考えていてもIT技術者には成れないと思う。 イライラしていてはプログラムは集中して出来ないからだ。 少しばかり好き過ぎてしょうがないぐらいが一番気楽にその職に適していると思う。 自分のイラつきと向き合っていても好きな事も仕事も出来ないからだ。
>>673 長文やめたほうがいいよ
馬鹿がばれやすくなる
全角英数もやめたほうがいいよ
この人は馬鹿なんじゃないかと穿った視点で見られるので
馬鹿がばれやすくなる
バカバカバーカ
何書いてるかわからない
長文読めない方が馬鹿に見える 馬鹿に思うなら思えばいいんじゃないか? 別に分からない人とやり合う事ほど馬鹿な事ないからね。 価値が見出せない人には馬鹿で上等
長文を解読するのはロマンがある。 短文は決め付けで終わり、内容が見えない。 長文は長いと読みにくい。 読みにくいのは敵ではない。読みにくいのは分かりにくいに繋がる。 何処が分かりにくいか聞き返すべきだ。 でなきゃ初めから話さないほうがいい。
>>この人は馬鹿なんじゃないかと穿った視点で見られるので 馬鹿の定義を教えて欲しい。 これまじめに聞いている。ふざけている訳ではない。 ふざけている様に見えるなら貴方からしてみれば私が馬鹿に見えるんだろう。 しかし私にとっては他人の評価よりも、他人が何を言いたいかの方が大事なのだ。 是非お教え願いたい。
読みにくい文章はたいてい内容も良くないという事で。
君は馬鹿じゃないよ 飛び越し苦労だ
そんな日本語あんのか
新語誕生の瞬間に立ち会ってしまった
VC でプロジェクトのプロパティで define 定義って出来る? ソースファイル中で #define MACRO1 "macro1" ってやるようなことをプロパティで出来ないかなと。 やりたいことは #define __MODULENAME__ $(ProjectName).exe なんだけど。
プロジェクト>プロパティ>C/C++>プリプロセッサ>プリプロセッサの定義 に __MODULENAME__="$(ProjectName).exe" を追加
あそこで代入?もできたんだね。 ありがとう。
すみません、初歩的なことな上にスレ違いかもしれませんが、 該当スレが見つからなかったので、質問です。 Microsoft Visual C++ 2010 Expressをインストールして使い始めたのですが、 このソフトにはオートコンプリート機能は無いのでしょうか? 一応、ctrl+スペースで補完自体はできるのですが、自動で補完して欲しい・・・。 なにか設定なり、プラグインなりでできるならやり方を教えてもらえませんでしょうか? よろしくお願いします。
688 :
デフォルトの名無しさん :2011/01/17(月) 13:24:29
ageておきます。
無い
>>687 メンバやらは補完してくれるから別に困ったことはないかな。
ctrl+スペースはくそおもすぎる・・・。
691 :
デフォルトの名無しさん :2011/01/18(火) 22:43:26
youtubeで英文コメントをコピーするとスペースが文字化けすること があってクリップボードのダンプ見ると1バイトデータが0x3f 0x20 の2バイトに変わってこのデータをメモ帳やダイアログのエディット ボックスにペーストすると文字化けのまま出力するけどブラウザの 上のURL入力する所にペーストすると文字化けせずに出力される ので、文字化けを回避する方法がありそうですが、どうすれば 良いでしょうか?
unicodeで貰えばいい
693 :
デフォルトの名無しさん :2011/01/18(火) 23:42:23
該当スレがわからないのでここで質問させてください。
Visual C++で、PDF文書に透かし文字を設定しようとしています。
ttp://kb2.adobe.com/jp/cps/511/511269.html 上記を参考にjavascriptのflattenPagesメソッドでPDFに
アクセスできるところまではなんとか行きました
(注釈使ってないので効果はわかりませんが、リターン値は正常でした)。
そこで、本題であるaddWatermarkFromTextメソッドに変更して同じように
invokeで呼び出そうとしたのですが、このメソッドは引数が20個近くあり、
中には設定値がjavascript側のクラス定数だったりするものもあり、
VARIANT構造体にどのように設定すればよいのかさっぱりわかりません。
とくに配列?を設定するらしいaColorという引数の設定値が不明です。
これら引数の設定方法を教えていただけませんでしょうか?
よろしくお願いいたします。
なお、とりあえず引数を必須項目になっている設定文字列だけにして実行してみたところ、
処理自体は成功しました(ただし、見た目は変化なし。Acrobat Standard 8.0から透かし設定を
追加や変更しようとすると、既存の透かしを変更していいか聞かれるため、なんらかの設定はされているもよう)。
694 :
デフォルトの名無しさん :2011/01/19(水) 18:13:25
クラスオブジェクトを作って、開放処理でdelete クラスオブジェクト;をすると error C2440: 'delete' : 'クラスオブジェクト' から 'void *' に変換できません。 と出ます。どうしてでしょうか。今までは同じようなことが問題なくできていました。
class Hoge{}; int main() { /* //error C2440: 'delete' : 'Hoge' から 'void *' に変換できません。 Hoge h; delete h; */ //ok Hoge *h = new Hoge(); delete h; return 0; }
ああ本当だnewするの忘れてた
697 :
693 :2011/01/19(水) 22:07:02
すいません、自己解決できました。失礼しました。
かわいいミスだ
vc 6.0 のプログラムを 2005 vc に変換しようとしています。 > DialogBox( hi, "DLG_DATA", HWND_DESKTOP, (DLGPROC)dlgproc ); >1>c:\users\新しいフォルダー (13)\9章\list0910\list0910.cpp(11) : error C2664: 'DialogBoxParamW' : 2 番目の引数を 'const char [9]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 なんか良くわからん よろ スレチと言われ此方に来ました。
>>699 プロジェクト>プロパティ>全般あたりの文字セットをマルチバイトに
>>700 流石だぜ 有難う 無事実行出来ました。
今まで、途方にくれていました。
何のエラーか?分からなかっただけ助かりました。
unicodeからマルチバイトに変換?
違いが分からない・・・ orz
UNICODE は wchar ?
703 :
デフォルトの名無しさん :2011/01/21(金) 20:20:48
凄く初歩的な質問かもしれませんが、.rcファイルは配布時に同封しなければならないのですか?
バイナリを実行するためには必要ない
?どういうこと?
exeを配布: rc不要 ソースを配布: rc必要 とえすぱ
ということは.rcはビルド時に自動的に.exeに取り込まれるものなのですか?
708 :
デフォルトの名無しさん :2011/01/21(金) 20:41:17
ちょっと質問してみちゃっていい? 今まで、シュミで、XP+VC++6.0で開発してたんだけど、 今度PCを新調して(Windows7)、んでVS2005を中古で買おうとおもっているんだけど なんか調べたらVS2005からUnicodeプロジェクトになるらしいんだ。 んで、そのVS2005でUnicodeプロジェクトで作ったVC++のアプリって(あ、ネイティブのね) XPのマシンでは文字化けしたりしちゃうんかな?XP用にShift_JISの文字列を受け取ったら Unicodeに変換するとかそういう関数っているのかな?
sjisプロジェクトもいけるよ
XPでもunicodeのビルドで作ったexeは動くよ。 文字の変換はファイルからとか外部からデータを取り込んだときに必要。 SJIS<->UNICODEの変換関数はある。
>>708 日本語扱ってるアプリケーションなら
日本語版OSで使う限り問題ない。
他言語版OS使うと適切に文字が表示されない。
あ、ASCIIコードについては正しく表示される。
713 :
707 :2011/01/21(金) 21:37:41
ちょっと今テストしてみたんですけど、.rc内でリンクしたファイルも取り込まれてる? exeを他の場所に移しても作動した。
アイコンとかビットマップのことなら ちゃんと取り込まれてるよ
>>712 内容ちゃんと読まずにレスしてしまったわ
反省
Unicode でビルドし直すんだな。
Shift-JIS で受け取った文字列は
内部で使う限りは変換は必要ないよ。
っていうか、Unicode文字列を使う設定でプロジェクトを構成しても
Unicode 全く使わないフルマルチバイトプログラムくめるし、
それは正当なプログラム。
デフォルトで Unicode になってるのは
たとえば、MessageBox とかのジェネリックプロトタイプを
MessageBoxW に置き換えたりするだけだから。
MBCSでビルドしてたプロジェクトをUNICODEでビルドし直すって話なら、 高確率でコンパイルが通らないと思う。 コンパイル通っても、バグってる確率高い。
>>716 >たとえば、MessageBox とかのジェネリックプロトタイプを
>MessageBoxW に置き換えたりするだけだから。
それには何の意味があるのですか?
たとえば、MessageBox っていう API を使っていたのなら 残念だけど実際にそういう名前のAPIは存在しない。 MessageBoxA か MessageBoxW A がマルチバイト(日本語版では Shigy-JIS として扱われる) W が unicode 版 プロジェクトの設定は単にこれを切り替えるだけのもの。 これは、ほかの文字列を引数に取るAPIに共通している。 ただし、Vista 以降は A も W もつかない Unicode 版のみが追加され始めてる。
つまりどういうことです?
世界は崩壊する
MIDIを再生する時ってmmioReadを使うみたいだけど fread使うのと何が違うんですか?
mmio系はRIFF形式のチャンクを認識してよろしくやってくれる
>>723 レスありがとうございました。
参考にします。
int* a; と int *a; の違い、使い分け方を終えてください。
見た目が違う それだけ
int* a, b; int *a, b; int *a, *b; int* a, *b;
本質的な違いはない 見た目的には上はint*型という認識をしやすい しかし、あくまで*の付いてる変数しかポインタにはならない(例 int* a, b;) 下はint型のポインタ変数と認識するかもしれない(上の認識の方が正しい) ただ、上のような例で誤解が少なくなる
なるほど。 ということは 複数のポインタ変数を宣言する場合ではない限り 変数名の方をメインに使ったほうが いいのかもしれませんね。 int* a, b; // success int *a, *b; // success void test::func( int *a, int *b ); // success void test::func( int* a, b ); // fault ありがとうございました。
> void test::func( int* a, b ); // fault それは趣が異なる
参照にしても int &aよりも int& aの方が好きだな。
>>730 趣が異なる、というのはどういう意味でしょうか?
ビルドが通らなかったので
そういった記述ができないものと理解したのですが・・・。
お、俺は釣られないぞ
それ関数の宣言なら b のデータ型が指定されてないだろう。 なんか最近何を狙ってるのかわからんが わかってて質問してる変なやつがいるのかな
プロジェクトのコピーをしていて疑問に思ったのですけど 複製したプロジェクトのフィルターのGUIDが一致してたら 何か問題はあるでしょうか? コンパイルは通るので問題はないかと思っているのですが気になります。
>>735 ソリューション内で同一GUIDのプロジェクトは管理出来ない
>>734 コミュニケーションがとりたかったんだろ。
「こんなコード書いたけどどうっすか?」みたいな。
ググればすぐ分かるのに質問してくる初心者とか、
結論がでてるのにとぼけて質問してるようなやつとか、寂しいからだろ。
かまってちゃんってやつだな 指摘すると釣れちゃっただし そんなのを相手にしても何一つ得られる物はないからほっとくのがいいね
>>735 IDEが勝手にGUIDを生成しなおすから問題にはならない
740 :
735 :2011/01/23(日) 01:19:56
741 :
デフォルトの名無しさん :2011/01/24(月) 13:10:49
ATLのダイアログウィザードで作成したダイアログにて、 ピクチャボックスへ画像を表示したいのですが、 OnInitDialogで CWindow imageBox = GetDlgItem(IDC_PICT); HDC hdc = imageBox.GetDC(); HDC memory_dc = CreateCompatibleDC(hdc); SelectObject(memory_dc, m_image); BitBlt(hdc,0,0,bitmap.bmWidth,bitmap.bmHeight,memory_dc,0,0,SRCCOPY); DeleteDC(memory_dc); と書きましたが全く描画されません。 メンバ変数の作成もできず途方に暮れてます。 何か参考となる情報はありませんでしょうか。
>>741 CStatic s = GetDlgItem(IDC_PICT);
LONG style = (LONG)::GetWindowLong( s.m_hWnd, GWL_STYLE );
style = ( style & 0xfffffff0 ) | SS_BITMAP;
::SetWindowLong( s.m_hWnd, GWL_STYLE, style );
s.SetBitmap(
::LoadBitmap(
(HINSTANCE)::GetWindowLong(m_hWnd,GWL_HINSTANCE),
MAKEINTRESOURCE(IDB_BITMAP1)));
743 :
742 :2011/01/24(月) 15:29:23
あぁ、BitBltでやりたいならOnPaint内でやればいいんじゃないかな。
SelectObjectしたのは戻さないとDeleteDCに失敗するぞ
745 :
デフォルトの名無しさん :2011/01/24(月) 16:27:55
>> 741, 743 お二方ともありがとうございます。 早速参考にさせていただこうと思いましたが、 atlctls.hが見つからずInclude出来ません。 過去にCStaticを使おうとした際にも同じ問題にあたりました・・・。 画像を表示させたければWTLにする必要がある、ということでしょうか? また、環境はVisualStudio2008Proです。
>>745 > WTLにする必要がある、ということでしょうか?
そんなこと無い。
Win32APIを直接呼び出すなり
リソースエディタのプロパティで設定すればいい
747 :
デフォルトの名無しさん :2011/01/24(月) 20:22:00
VisualStudio2010で、WebBrowserコントロールを使って実行ファイルと同じ場所にあるtest.htmlを表示したいのですがエラーが出て表示できません。 やってみたことは相対パスでUrlプロパティに[./test.html]と入力したのですが、相対URLにナビゲートできませんと出ます。 test.htmlを表示させる方法があれば教えていただけませんか。
絶対パスで指定しろ IEコンポはそんな気の利いたことしてくれんぞ
fopen("xxxx","rb")で動画ファイルを読み込ませたいのですが、 そのファイルはどこに置けばいいのでしょうか? ファイルがない状態でデバッグすると「0x004121a7 でハンドルされていない例外が発生しました」と表示されます。
>>749 vista とか 7なら、エクスプローラーでそのファイルのあるフォルダを
ひらいて、うえのコンピュータ > OS(C:) > tmp みたいな表示のあるところを
クリックしたら c:\tmp\ とか表示されるから、それをコピペして、
fopen("c:\\tmp\\xxx", "rb") みたいにファイル名の前につける。
何の初心者なんだよw
752 :
デフォルトの名無しさん :2011/01/25(火) 18:55:06
CryptGetHashParamで取得したMD5、SHA-1のハッシュ値がおかしいんです・・・。 1文字だとOK、2文字以上だとしれっと全然違う値を返してきます。 一体何が原因なんでしょうか?
エスパーに聞いてくれ
複数のソリューションを一括でビルドできるバッチファイルを作成したいのですが 簡単に作れるでしょうか?
難しくはないが、VC++のバージョンによって書き方が変わるかもしれない
756 :
754 :2011/01/25(火) 22:30:43
失礼しました。2008になります
devenv example.sln /build Release こんな感じだったと思う
C++をこれから始めようと思ったときに、 まずどういうものをつくろうとすれば勉強になりますか?
2ちゃんブラウザ
ハロワルド だろが ばかやろー
>>758 はっきり言おう、何が作りたいか分からない場合、勉強しても続かないか中断する。
強いて上げるなら、入門書の問題やれ、それを書き換えた応用しろ。
そですね。 テキストを読み込んで、文字コード変換するプログラムなんてどですか? 基本はフィルターとかコンバーターではないかと。
763 :
デフォルトの名無しさん :2011/01/29(土) 15:56:36
いま、WinAPIでロープレつくってるノシ
764 :
デフォルトの名無しさん :2011/01/31(月) 18:52:50
ふーん
昨日から
http://www.geocities.co.jp/SiliconValley-Bay/4543/Osero/index.html こちらのサイトを参考にオセロのプログラミングを作成しようと奮闘しているのですが、
「AppWizard でプロジェクトを作成する」の手順6まで進め、ビルドし実行しようとしても、
「INK : fatal error LNK1104: cannot open file "Debug/Osero.exe"
Error executing link.exe.」となり、先に進めません。
様々なサイトを参考にし奮闘しているのですが、昨日丸一日かかっても解決できなかったので、質問させて頂きました。
Visual C++ 6.0 Standard Edition
VC++6.0 ServicePack 6
Platform SDK February 2003
DirectX 9.0 SDK Summer2004
こちらはインストール済みです。本当に困っています。どなたかご教授お願いします。
Error executing link.exe
インストールしたあと、まともに使えるか確認したんだろうか? まさかそのサイトで筆おろしとか
VC++6って最近のOSだと動かないよ
つーかLNK1104出してるのがリンカだからlink.exeが実行できないわけじゃないな Osero.exeを起動したままビルドしようとしてるってオチか
あるある
clを使ってコマンドラインでサブディレクトリのソースをコンパイルする場合 こんな感じにやってます cl /c ./hoge/hoge.cpp そのままだとオブジェクトがカレントディレクトリに作成されてしまうのですが これをサブの方に出力する方法はありますか?
ideでコンパイルした時もコンソールと同じコンパイラが動いてるから ideで可能だから当然可能だな
>>771 cl /c ./hoge/hoge.cpp /link /OUT:./hoge/hoge.exe
IDEを使った方がいいよ
せめてmakefileを書いたほうがいいよ
/c指定してるのにリンカオプションを書く男の人って・・・
>>773 すみません出来ました。
実はmakefileの作成過程で気になったことだったのですが
/foオプションで出来ました
msdnは見てたんですが説明がただオブジェクトを作成するみたいに
素っ気なかったのでついスルーしていました
ありがとうございました
.cpp{$(OUTDIR)}.obj: $(CPP) $(CPPFLAGS) /Fo"$*.obj" /Fd"$*.pdb" /FAs $<
779 :
765 :2011/02/02(水) 02:42:02
>>765 の者です。
無事にオセロを作ることができました。お騒がせしました。
上の内容で続けて質問させて頂きたいのですが、
コンピューターが1手を打つまでに掛かった処理時間の計測を行いたいのです。
ネットで調べていろいろなプログラムを追加して試したのですが、なかなか上手くいきません。
ご教授頂けないでしょうか。
time_t
782 :
デフォルトの名無しさん :2011/02/03(木) 13:43:34
VC++でIEのプラグインを作っているのですが、 プラグイン内部からHttpSendRequestでサーバへデータをPOSTすると、 IE側のセッションが切れてしまいます。 何かいい回避策はありませんでしょうか・・・。
同時接続数の上限をあげればいいんじゃね
標準では「2」に設定されてるんだったか
>>779 > コンピューターが1手を打つまでに掛かった処理時間の計測を行いたいのです。
GetTickCount か GetTickCount64 を開始前と開始後にとってその差分を累積。
数字は1ミリ秒単位だけど、実際の分解能は15ミリ秒だったか16ミリ秒だったかなので、
細かい数字に期待しないこと。
もっと細かい数字を出したければ Multimedia API を使って分解能をあげなきゃいけない。
786 :
デフォルトの名無しさん :2011/02/05(土) 14:07:35
>783 ありがとうございます。 結局同一サイト(&API側)への接続では問題回避できなかったので、 サイトとWebAPIを別アプリケーションにしました・・・。 あと、インストーラーをmsi形式で作成したのですが、 インストール直後はプラグインが有効になりません。 何か設定やコーディングが必要なのでしょうか?
787 :
デフォルトの名無しさん :2011/02/05(土) 23:50:00
再起動は基本中の基本
こんばんは。勉強手始めにクリップボードに日付を貼り付けるソフト作ろうとしてます。 日付はうまく取得できてそうなんですが、どうも文字化けしてしまいます。 悪い点ご教授願えないでしょうか。 ----------------------- WORD *pText; …メモリ確保 GetLocalTime(&stTime); *pText = stTime.wYear; //ここでは値入っていました OpenClipboard(NULL); EmptyClipboard(); SetClipboardData(CF_TEXT , hText); CloseClipboard(); -------------------------
>悪い点 ソースを全部貼らないこと
「メイクファイルのエクスポート」って無くなったんですか? 6.0 の時はあったのに。
msbuildに変っちゃったからな
>>789 >>790 お返事ありがとうございます。悪いところを勝手に推定してしまいました。
ご教示いただけると助かります。
----------------------------------
HGLOBAL hText;
WORD *pText;
SYSTEMTIME stTime;
hText = GlobalAlloc(GHND, 3);
pText = (WORD *)GlobalLock(hText);
GetLocalTime(&stTime);
*pText = stTime.wYear;
GlobalUnlock(hText);
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_TEXT , hText);
CloseClipboard();
----------------------------------
環境:Visual C++ 2008 Express
数値と数字は違うぞ 文字列にしてやらないとちゃんと表示してくれない char *pText = (char*)GlobalLock(hText); sprintf(pText, "%d", stTime.wYear);
>>794 でました!超初心者ですみません。勉強になりましたありがとう!
ほんとうにそれだったんかい。w
797 :
デフォルトの名無しさん :2011/02/08(火) 20:26:51
通信プログラムについてはこちらで良いのでしょうか・・・? 現在、WinINETを用いてX-WSSE認証のヘッダを追加してサーバへ送信しようとしています。 IE8の環境では正常にヘッダが追加されますが、 IE7の環境だとHttpAddRequestHeadersの際に「ERROR_HTTP_HEADER_NOT_FOUND」(12150)のエラーとなります。 > ret = ::HttpAddRequestHeaders(hRequest,pszContentType,lstrlen(pszContentType), HTTP_ADDREQ_FLAG_ADD_IF_NEW); 最後のフラグ、HTTP_ADDREQ_FLAG_ADD, HTTP_ADDREQ_FLAG_REPLACEなども試しましたがだめでした。 IE8の環境だと全く問題なく通るのですが・・・。 何か方法がありましたらご教授下さい。
VC++でビルドする時のこと。同じくらいの修正量にもかかわらず、 すっごく時間かかる時と、全然かからない時があるんだけど、 あれって、どういう仕組みなんすか 使い勝手良くないんですが・・
プリコンパイルヘッダ弄ったんじゃないの? それかたくさんのソースからインクルードされてるヘッダ弄ったり
勉強用で使い始めたけど、プロジェクトごとにライブラリパス通すのめんどくせえ。 Makefileで一発環境とか出来ないかなぁ
設定できるでしょ
>>800 う〜ん・・つまりヘッダに追加修正とか行った場合は、プリコンパイルヘッダが
無効になっちゃうからビルドしなおすことになる、、、ということ?
確かに、ヘッダをいじることもありますけど。。
ヘッダはプリコンパイルヘッダでインクルードしてないなら関係ない 例えばa.cppとb.cppの両方がc.hをインクルードしている場合 c.hを書き換えるとa.cppとb.cpp両方の再コンパイルが必要になるから遅くなる
どこで聞けばいいのか分からなかったので。 system("cls"); だとログまで消えてしまうんですけど、ログを残しつつ画面を綺麗にするコマンドがあれば教えてください。
>>805 clsで消えるのは画面だけの筈だが、あなたの言うログってどれのこと?
clsでログが消えるOSかもしれないぞ
改行たくさんすれば綺麗になるよ
コンボボックスに項目を追加するCComboBox::InsertStringなどを見ると、 「メモリ不足のために新しい文字列を挿入できない場合は、CB_ERRSPACE を返します」 なんて書いてあるんですけど、こんなエラーも皆さんちゃんとチェックしてますか? CComboBox::InsertStringに限らず、この手の戻り値は結構あるようですが、 InsertStringできるところまで来ているのに新しい文字列が追加できない という状態なんて、出会ったこと無いのですが。
昔は64kbytesの壁っていう理不尽な制限があったからな
初心者な質問ですがよろしいでしょうか? 私は関数の引数が無い場合には(void)と記述するのですが 知り合いからそれは間違っている( )にしろと言われました。 私の記述は間違っているのでしょうか? またどうして間違っていると言われたのでしょうか?
別に間違ってないよ。書かなくてもいいものを書くのは手間ってだけじゃね? とはいいつつ、派生クラスでのvirtualや基底クラスのメンバ呼び出しのthis->とかは 冗長とわかっていてもあえてつけたほうがいいといわれることもある。 なんにせよそういう時はC++ Cording Standardsの教えが役に立つ。 そういう瑣末な違いは長々と議論するに値しない。 まともなプログラマはどんなスタイルでも読めるものだし ひとつのソースファイルの中で一貫性が保たれていればそれで十分だ。
なるほど ありがとうございます。
815 :
32 :2011/02/13(日) 12:11:10
Win32アプリケーションで質問です。(CLI上で動く.NETではない) 子スレッドから、メインスレッドのGUI部品へのアクセスするために、デリゲートのサポートってありますか? C#やC++/CLIではデリゲート使えるけど、純粋なWin32アプリだとどうなんでしょーか。
アンマネージでのプログラムってコトだよね? メインスレッド?で処理をしたければ、ウィンドウメッセージを送って処理をさせるとか。
SendMessage
>アンマネージでのプログラムってコトだよね? はい、そうです。 >メインスレッド?で処理をしたければ、ウィンドウメッセージを送って処理をさせるとか。 なるほど!WM発行すればメインスレッドで拾えそうですね。考え落ちしてた;;
C++を勉強中なのですがダイアログボックスでつまづいてしまいました。 質問をするのも初めてなので、意味がわからなかったら申し訳ありません。 環境は下記だと思います。 Windows7 visual studio 2005 C++ win32(MFC? ダイアログボックスのクラスDialogを作成し、メイン関数で下記のコードを書きました。 testdialog = new Dialog; testdialog->Create(IDD_DIALOG1, CWnd::GetDesktopWindow()); testdialog->ShowWindow(SW_SHOW); このコードでダイアログボックスが開き、こちらからボタンを押すことができると思ったのですが、 実際にデバッグしてみると、ダイアログボックスはビジー状態で、中身のボタンなどは表示されませんでした。 また、コードを抜けたあとすぐにダイアログボックスは消滅してしまいます。 何が足りないのか教えてください。 たぶん提示する情報が足りないと思うので、それについてもご教授ください。
CreateじゃなくてDoModal呼べよ もしCreateでダイアログボックス作るならメッセージループ作らないと
821 :
820 :2011/02/13(日) 22:33:34
>>820 DoModalでできました。
ありがとうございました。
うむ。美しい流れだ。
CString を Stringに変換するのってどうやるんでしょうか? ネットで拾った方法1//error c2664 CString cstr; std::string str(cstr); ネットで拾った方法2//error c2679 CString cstr; std::string str = static_cast<LPCTSTR>(cstr); いったんchar[]などにしてみたんですがどうもうまくいきません。
std:string str(cstr.c_str())
std:string str((char*)cstr);
std::wstring str = static_cast<LPCTSTR>(cstr);
>>825 error C2440: '型キャスト' : 'CString' から 'char *' に変換できません。
>>826 できたのですが、今度はwstringからstringの変換ができません…orz
>>827 ネットで拾った方法2で試してみました(error c2679 )
>>828 >>826 が成功したんなら設定がunicode文字セットを使うになってるはず
マルチバイト文字セットを使うに変更すればstd::stringでも通るよ
wchar_t char 変換 でぐぐれ。
またUNICODE対応出来ていない糞アプリが一つ増えたか
ククク…奴は四天王の中でも最弱…
C++のスレか迷ったんだけど 一応Windowsの事も入ってる質問なんでこっちで。 C++でクラスを自作して遊んでるんだが クラスの中にウィンドウメッセージ(例えばWM_PAINT)の 処理の部分を書くってできる? 例えばビットマップを表示するクラスで クラス内に「メインになるウィンドウにWM_PAINTが送られたら、ビットマップを表示するメンバ関数を実行」 ってな具合に。 とりあえず、今はメインウィンドウのWM_PAINTの所からビットマップ表示のメンバ関数を呼んでるんだが。 こういうことって、なんていう言葉で検索すればいいの? 下らん質問ですいませんが。
イベントハンドラ bind emit
836 :
819 :2011/02/16(水) 02:25:51
ダイアログボックスについてなのですが、 testdialog = new Dialog; testdialog->DoModal(IDD_DIALOG1, CWnd::GetDesktopWindow()); testdialog->ShowWindow(SW_SHOW); 上記のコードで生成したダイアログボックスのOKボタン(キャンセルボタンでも)を押すと、 Debug Assertion Failed! Program F:\.......\MyProject.exe File: F:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\winocc.cpp Line: 329 上記のエラーが出てしまいます。(無視ボタンを押すとデバッグは先に進みます) どちらのイベントハンドラはリソースから追加しました。 void myClass::OnBnClickedCancel() { OnOk(); } 特に初期化なども行っていません。 このエラーの原因はなんなのでしょうか?
ShowWindowはいらん
ショウなんですか。ありがとうございました。
醤油うこと
しょうもない
ほどほどにしましょう
はいはい
843 :
デフォルトの名無しさん :2011/02/17(木) 15:06:09
開発環境 OS WinXP 32bit ・Visual Stadio 2010 GUIのコントロール(ボタン等)のプロパティにあるlocationについての質問です 例えばFormのサイズが300,200(pixel)だったとして そこにButtonのサイズ100,30(pixel)を2つ付けるとします これを左右均等に配置する場合 Button1のlocation(50,130) Button2のlocation(150,130) とした場合、縦方向は考えずに横方向だけ考えた場合真ん中ではないのでしょうか? ツールバーのレイアウトでこのボタン2つ選択後、左右中央揃えした場合 Button1のlocation(46,130) Button2のlocation(146,130) みたいなことになります (座標とサイズpixelで計算してるからおかしいことになる?) 直接手動で計算してもコントロールの配置(location位置)を出したいので どういう仕組みで配置計算されているのか教えてください
データを圧縮解凍できる関数ってありますか? void assyuku(char *data); void kaito(char *data); って感じの奴があればベストなんですが。
>>846 ありがとうございます。
調べてみます。
848 :
845 :2011/02/17(木) 16:58:09
7-zip調べたら使ったプログラムはソースを公開しないといけないのか。 ソースを公開しなくてもいい方法ってないですか?
んなあほな
そんなマイナーなもの使ってるやついるのか?
zlib使えば良いのに。 7-zip使うならlzmaかxzでも良いかもね。
852 :
845 :2011/02/18(金) 10:25:07
>>851 ありがとうございます。
zlib使います。
fwrite、freadのファイルの代わりに メモリに読み書きできる版ってありますか?
ifstream ofstream
c++ でも普通にfread や fwrite を使ってしまうなぁ。 fstream の方がいんですか。
856 :
853 :2011/02/18(金) 13:20:45
>>854 レスありがとうございます。
ifstream調べたけどメモリに読み書きする機能が分かりませんでした。
やっぱ自分で作るしかないのかな。
858 :
853 :2011/02/18(金) 15:45:39
>>857 ありがとうございます。
参考になりました。
859 :
デフォルトの名無しさん :2011/02/18(金) 19:41:23
すみません。あるネット講座のVC++のページを勉強しているんですが、 毎度同じダイアログボックスをつかうので、リソースエディタで一々作っていると馬鹿らしくなります。 前のプロジェクトのダイアログボックスをインポートというか追加できないんでしょうか? 「プロジェクトへ追加→ファイル(F)」でリソーススクリプトとresource.hを追加したんですが、 インクルード ファイルがオープンできません。'resource.h': No such file or directory ↑のエラーがでます。。 どうやればいいんでしょうか?VC++6.0使用です。
普通にコピペして使えばいいだけだと思うけど
861 :
853 :2011/02/18(金) 21:09:55
cstdioを使った方がいいと思います
863 :
853 :2011/02/18(金) 23:09:48
>>862 レスありがとうございます。
cstdioを使うことにします。
VC++2010 Expressでフォームからマウスが外れているときはフォームの透明度を あげる(薄くする)と言うプログラムを組んでいます。 フォームのMouseLeaveイベントと、MouseEnterイベント発生時にOpacityプロパティ を変えることで解決を目論んだのですが、ウインドウの外枠(サイズを変えるときにド ラッグする部分や、上部のウインドウ名が書かれている部分)にマウスがあると、 MouseLeaveイベントが発生して、薄くなってしまいます。フォームから完全にマウス カーソルがそれた時のみ透明度を高めたいのですが、どういうイベントを用いればよ いんでしょうか?
CLIスレか.netスレに行ったほうがいいとおもわれ
クライアント領域でMOUSEEVENT取ってるからそうなる ウィンドウに対して取得する必要がある
867 :
859 :2011/02/20(日) 23:18:50.68
>>860 亀ですが、できました。普通にresource.hをコピペするだけでいいんですね。
なんか、プロジェクトとの関連付け?とかいるのかなあと思いつつ、普通にコピペしてコンパイルしたら
通りました・・
ありがとうございました。なんか、拍子抜けっす。自分、素人なんで・・
大きさが[16384][128]のchar型の2次元配列を動的に確保したのですが、 順番にアクセスしていくと、なぜか[1370][0]でエラーになってしまいます。 この配列を静的に[2000][50]の大きさで確保すると、[1370][0]でエラーにならないので おそらく配列の確保の方法に問題があると思うのですが、何が悪いのか見当がつく方はいらっしゃいませんか? 確保は下記の3パターンで行いました。 char **char_matrix; char_matrix = (char **)malloc( 16384 ); for(int i=0; i<16384; i++) char_matrix[i]=(char *)malloc( 128 ); char **char_matrix = new char*[ 16384 ]; for(int i=0; i<16384 ; i++) char_matrix[i]=new char[ 128 ]; char char_matrix[2000][50];
fopen_s(fp, "ファイル名","w");
すみません 途中送信してシマしました。 fopen_s(fp, "ファイル名","w"); で、ファイルの作成先がCDの場合はどうなるのでしょうか?
>>868 newは成功してるかチェック済み?
済みでアクセス時におかしくなるなら
入ってるデータがおかしいんだろ。
>>870 ファイル名直書きでいいんじゃね?
873 :
868 :2011/02/21(月) 01:06:04.54
>>871 newは成功しています。
初期値の代入時にエラーになるので、入ってるデータではないと思います。
また、順にアクセスしている間に他で動的確保はしていません。
デバッグでchar_matrix[0][0]をウォッチしていたら
char_matrix[1024][0]にアクセスすると式が評価できなくなりました。
このあたりが関係あるのでしょうか。
また、char_matrix[1370][0]はfscanfを使ったときに評価できなくなります。
ただ、このfscanfは成功しています。
874 :
868 :2011/02/21(月) 01:13:01.96
すみませんsscanfです。
手元でコピペしたけど普通に動いたぞ。 なんか関係ないところでやっちゃってんじゃね? //確保 char **char_matrix = new char*[ 16384 ]; for( int i = 0; i < 16384; i++ ) { char_matrix[i] = new char[ 128 ]; } //初期化 for( int i = 0; i < 16384 ; i++ ) { for( int j = 0; j < 128 ; j++ ) { char_matrix[i][j] = 0; } }
VC++10 expressの環境で引き継いだコードがC99準拠だったのでintel parallel composer 2011を試用しているのですが、 error MSB6001: "icl.exe" のコマンド ライン スイッチが無効です。パラメーター "path" の長さを 0 にすることはできません。 と出て正常にコンパイルできません。ググったりしたのですが当該なものが見つからず・・・これってどう回避すれば良いのでしょうか?お願いします。
WindowsVistaかWindows7搭載PCでvisual studioを用いてプログラムの練習をしようと思っています。 このとき、VC++でコンパイルしてできたexeファイルはWindows98やXPでも実行可能なのでしょうか?
大丈夫だ!98で動かなくても文句言う奴ぁもういねぇッ!
作り方によって可能にも出来るし不可能にも出来る
VC++のバージョンによるね。 98がサポートされるのは2005まで。 2000がサポートされるのは2008まで。 XPがサポートされるのVC6のみ
881 :
877 :2011/02/22(火) 07:29:13.28
>>880 ありがとうございます。
VC++2005を使ってみます。
98で動くかどうかは実際に入れてみるしか確認する方法はないのでしょうか?
それとも、2005で開発すればほぼ確実に動きますか?
作り方によって可能にも出来るし不可能にも出来る
ターゲットマシンを設定してコンパイルすれば98で動くことを保障できる。
プログラムの練習をしようと思っています なんて人はWin98で動くかどうかなんて気にしなくていい
885 :
877 :2011/02/22(火) 18:41:12.57
>>883 今の自分の知識ではターゲットマシンを設定することができないのですが、
参考になる教材やウェブサイトがあったら教えていただけませんか?
>>884 最終的にWin98で動く業務アプリケーションが開発できたらいいなと考えています。
全然わからないのですが、例えば、実装環境と動作環境が違うと動かなかったり、
MFCを使ってコードを書くとWin98で動かないのかなと疑問に思い質問させていただきました。
実装環境はWin7、VC2005しか利用できず、
現状ではWin98が手元に無いため、確認しながら実装することができません。
まずMSDNサブスクリプション会員になることから始めようか
98ターゲットにするならMFCは使わない方が良いよ
ようやくDLLができるようになりました。 次はCOM、ATL、ActiveXに挑戦します。これで、僕のWindowsプログラムも卒業です。
206 デフォルトの名無しさん [sage] 2011/02/23(水) 00:30:05.97 ID: Be:
かってに、google に甘い期待をしているんだけど、
ttp://sourceforge.jp/magazine/11/02/22/104206 これとかを見ると、google 的には、
C++ は Web アプリみたいにして、
Android に持っていくつもりなのかな。
プログラマのヘマでセキュリティーホール作られるよりは、
制限あっても、sandbox 内で…って感じで。
Javaが選ばれた理由も、そんなんじゃなかったっけ?
892 :
853 :2011/02/24(木) 01:18:04.38
893 :
877 :2011/02/24(木) 20:35:59.66
>>886 会員になるとどうなるのでしょうか?
>>887 MFCはやはり対応していないのでしょうか?
一応VS2005はサポートプラットフォーム?に98があるのですが、
MFCはそれとは無関係ということですか?
95〜2000はjvmの関連でDL出来ないよ
895 :
デフォルトの名無しさん :2011/02/25(金) 10:24:32.23
VC++2008でDLLを作って、Webページから為替情報を取得したいんですが、 このためには参考書として何がおすすめでしょうか? 当方、CやVB.netを趣味でかじった程度の素人です。 VC++2008はダウンロードしたばかりで、何も知らない状態です。
C#で作ったほうがいいよ
C分かるんならVC++で作った方がいいでしょ
maruchi
899 :
デフォルトの名無しさん :2011/02/25(金) 12:50:53.66
900 :
デフォルトの名無しさん :2011/02/25(金) 12:52:52.22
すみません一回もVC++でプログラムしたことないんですが #include <BluetoothAPIs.h>をつかってMS スタックの操作プログラムを作りたいと思っているのですが 本当に入門のところしかわからず困ってます。 関数の前にこのような記載をするらしいのですがこれはなんなんでしょうか?構造体? BLUETOOTH_FIND_RADIO_PARAMS m_bt_find_radio = {sizeof(BLUETOOTH_FIND_RADIO_PARAMS)}; BLUETOOTH_RADIO_INFO m_bt_info = {sizeof(BLUETOOTH_RADIO_INFO),0,}; その他WinSDK入れてBluetoothAPIs.hはインストールされていると思うのですが 関数を記載するとエラーになってしまいます。 何を調べればよいかもわからないので助言をいただけませんか
>>900 初めてBluetoothAPIs.hなんてのを知りましたが
#include <Windows.h>
#include <BluetoothAPIs.h>
質問です。 別ディレクトリにあるが 同じファイル名(h&cpp)、同じクラス名、といったものは C++で可能なのでしょうか? 名前空間で実現できるかと思っていたのですが どうもリンカエラーが出てしまいます。 コインパイル後のobjファイルを見てみると クラス名と同じ名のファイルが 一つだけしかできていないようなので もしかしたら同じクラス名は宣言できない?と思い 質問させていただきました。 よろしくお願いします。
>>902 中間ファイルの出力名が被らないようにすればいい
/Fo
>>904 俺には中間ファイルの出力名や出力先を
/Foで指定する事しか思い浮かばないので
変わりに教えてやってくれ
VC2008にて、プロジェクトの設定によってユーザ名をプリプロセッサ定義したいのですが、方法はありませんか? 試したことは、プリプロセッサの定義欄に DEBUG_%%USERNAME:.=%% を追加したことと、 追加のオプションに /D DEBUG_%%USERNAME:.=%% と追加をしたことです。 どちらも%が1つだとエラーになりました。
何がしたいのか分からんけど 追加のプリプロセッサに DEBUG_$(USERNAME):.=
908 :
906 :2011/02/27(日) 15:51:35.66
>>907 試してみましたが、思ったような動作
( USERNAME=user.name の場合 DEBUG_username が定義 ) になりませんでした。
( プリプロセッサの定義欄に入力した際に全てのオプションを見ると、
/D "DEBUG_user.name:.=" というように解釈されているようです。 )
ユーザ名に '.' が含まれているため、
それを省くか '_' で置き換えるかをしなければいけないのですが、
( #ifdef DEBUG_user.name だとエラーがでるため)
それを実現する方法はありませんか?
>>908 エスパーするな。
何がしたいのか分からんけど
追加のプリプロセッサに
DEBUG_$(USERNAME)
#ifdef DEBUG_user.name
//...
#endif
一応言っておくけど :.= ってのは君の希望に答えただけだからな。
911 :
906 :2011/02/27(日) 16:26:00.14
すみません。 #ifdef DEBUG_user.name ででるのはエラーではなくワーニングでした。
>>909 以下のようなコードをコンパイルしてもエラーが起こらないため、
思った通りに定義されていないようです。
#ifdef DEBUG_user.name
error // ここでエラーがでるはず
#endif
>>910 DEBUG_$(USERNAME):.= を設定したうえで
以下のようなコードをコンパイルしてもエラーが起こらないため、
思った通りに定義されていないようです。
お気を悪くさせてしまいましたら申し訳ありません。
#ifdef DEBUG_username
error // ここでエラーがでるはず
#endif
>>911 > 909 名前:デフォルトの名無しさん[sage] 投稿日:2011/02/27(日) 16:07:04.46
>
>>908 > エスパーするな。
> 何がしたいのか分からんけど
> 追加のプリプロセッサに
> DEBUG_$(USERNAME)
>
> #ifdef DEBUG_user.name
> //...
> #endif
913 :
906 :2011/02/27(日) 16:51:34.13
>>912 もしかして「追加のプリプロセッサ」という設定項目がどこかにあるということでしょうか?
今探してみたのですが、どこにあるかわかりませんでした。
日本語で書いてるんだけどなー
915 :
906 :2011/02/27(日) 17:08:49.31
916 :
デフォルトの名無しさん :2011/02/27(日) 22:28:41.81
VC++2008で正規表現を学べる本やサイトを知ってる人教えて。
>>916 正規表現そのものについて、ではなくて、正規表現は既に
知っていてVC++2008 での正規表現の使い方を教えて
欲しい、ということでいいかな?
918 :
デフォルトの名無しさん :2011/02/27(日) 23:21:29.69
WindowsFormでツールボックスから配置したボタンを押したら whileで常駐させて、ほしい情報を読み込んだら処理を行ってまた常駐する っていうのを作りたいんですけど、途中でwhileを抜ける方法って何かありますか??
break
>>903 ありがとうございます。できました!
cpp単位で出力名を変更しました。
重ねて質問になってしまってもうしわけないんですが
本やサイト見ていても「クラス名の重複は名前空間でおk」と書かれています。
しかし今回は前述のとおり中間ファイル名の重複で躓いてしまいました。
対応方法もあまりスマートには感じれません。
自分は何か名前空間そのものを誤解しているのでしょうか?
それとも「そういうもんだ」なんでしょうか?
よろしくお願いします。
rc2ファイルを見ると、「手動で編集されたりソースをここに追加します」と書いてあるのですが、 これって、MS社員のIME変換のミスで、「手動で編集されたリソース」のことですよね? 「リソース」を手書きする場所でよいのですよね?
>>921 「クラス名、名前空間」の話と「分割コンパイルでの各ファイルの名前」ではレイヤが違う
前者は言語の文法の話
後者は開発環境がコンパイル結果を管理するやり方の話
違うものを同じ名前にするのはよくないと思うよ
>>922 その通り
ワロス
924 :
デフォルトの名無しさん :2011/02/28(月) 12:44:31.23
904の降臨に期待
Visual C++ 2005とVisual C++ 2010の機能面での違いを教えてください
>>916 .net でもいいなら、VC++2008のヘルプを
.NET Framework の正規表現
で検索。使用例もあるよ。
IME2010 手動で編集されたリソース 別におかしくないな
WritePrivateProfileSectionでINIファイルに値を保存したいのですが a=1\nb=2\nとlpStringに入れても 改行が抜けてa=1b=2と保存されてしまいます。 どうすればいいでしょうか。
改行を$nとかに置換して読み込むときに\nに置換すればいい
>>930 レスありがとうございます。
しかし、GetPrivateProfileIntで読み込みたいので
できれば保存する時改行を入れたいです。
何故改行が消えてしまうのか全然分かりません。
それならaとbの2回に分けてWritePrivateProfileSectionすればいいよ
\r\n
的外れのレスが多すぎ。 "a=1\0b=2\0"
プログラミングに興味を持ち、やってみようかと思ったのですが、説明してくださっているサイトを見ると "Visual Studio 2008" を使っての説明をなさっているのですが、"Visual Studio 2010"を使っても同じような操作でできるでしょうか 別に2008の方を使っても困ることがないのなら2008のほうを使ってやろうと思うのですが…
どっちでも操作はあまり変わらんが 共存できるんだから両方いれりゃいいよ
>>938 そうですね
使う言語はどっちも一緒だからどっちをつかっても勉強できますしね
シェルエクステンションの作り方のわかるサイトか本は ないでしょうか?もしあれば教えていただけないでしょうか。
デバッグ中にF12を押すと windowsによって○○.exeでブレークポイントが発生しました。 と出て落ちてしまうんですが、どうすればいいですか? VC2008です。
F12の活用法が分からん まったりBPセット出来るぐらい?
アプリを非アクティブにせずに中断(一時停止)が出来る
946 :
デフォルトの名無しさん :2011/03/04(金) 12:27:25.63
C#はドットネコプラットフォームだし、MFCは設計がもさいから ネイティブで斬新的なC++言語を刷新してくれないかな。 どうせなら、買収したノキアのQtを新C++開発環境にしてもいい。
>>946 C++Builderが安くなったじゃん。
アロー演算子はいらない子だと思ってる
イミフ
二文字の演算子は嫌だなあ おまけにアローの場合同時押しまで出てくるし
しかも使用回数ぶっちぎりで一位だしな。
953 :
341 :2011/03/06(日) 02:50:49.90
スレッド間違えてしまいました。二重質問になることをお許しください。 DLLを作ってメインプログラムにlibファイルを追加したんだけど、 DLL内の関数を普通に呼び出してビルドすると以下の様なエラーになります。 どなたかわかる方いませんか? test2.obj : error LNK2019: 未解決の外部シンボル "int __cdecl makehook(struct HWND__ *,int,unsigned int)" (?makehook@@YAHPAUHWND__@@HI@Z) が関数 "void __cdecl WM_Paint(void)" (?WM_Paint@@YAXXZ) で参照されました。 解決方法を教えてください。よろしくお願いします。
__declspec( dllexport ) __declspec( dllimport ) くっつけた? GCCと違って何をエクスポートし、何をインポートするのか 一つ一つ指定する必要があるよ
955 :
341 :2011/03/06(日) 12:00:16.43
#define DLL_EXPORT extern "C" __declspec (dllexport) #else #define DLL_EXPORT __declspec (dllexport) #endif と書いて関数の宣言時に先頭にDLL_EXPORTを付けることで解決できましたが、 プロジェクトによってはDLL_EXPORTなどと付けずに動作している物もありました、 これはどういった方法をとっているのでしょうか?
>>955 .def ファイル作って、そこで export する関数を定義する場合、
dllexport は不要じゃなかったかな
957 :
341 :2011/03/06(日) 15:55:41.40
>>995 訂正
#ifdef __cplusplus
#define DLL_EXPORT extern "C" __declspec (dllexport)
#else
#define DLL_EXPORT __declspec (dllexport)
#endif
でした。defファイルの方調べてみます。
ええと、超初心者ですが Cから勉強してきたのでWinMainを使うってのが分かりやすいのですが WinMainを使うというのは邪道なんでしょうか?MFCアプリってなに? ウィザードを使うのがC++の常識なんでしょうか?わからんなぁ
WinMain でいいよ MFC は設計がダサイから嫌ってる人が多い VC++ で別のフレームワーク使う人も多い
>>959 thx
WinMain中心で学習していきます。
961 :
341 :2011/03/07(月) 16:29:08.14
LRESULT CALLBACK meshookproc1(INT hc,WPARAM wParam,LPARAM lParam) { PMSG pmsg; HMODULE hModule; pmsg = (PMSG)lParam; if (hc >= 0){ if (hc == HC_ACTION) { hModule = GetModuleHandle("sampledll.dll"); if (LoadString((HANDLE)hModule,pmsg->message,szWinMsg,50)) { if (pmsg->message == WM_NULL ) { return CallNextHookEx(hhook, hc, wParam, lParam); } szWinMsg[sizeof(szWinMsg)+1] = 0; wsprintf(szData,"%06X :%s :%04X : %04X\0",pmsg->hwnd,szWinMsg,pmsg->wParam,pmsg->lParam); ghWndlist = FindWindow(NULL,"C MAGAZINE"); SendDlgItemMessage(ghWndlist,1070,LB_ADDSTRING,0,(LPARAM)(LPCTSTR)szData); } } return CallNextHookEx(hhook, hc, wParam, lParam); } return CallNextHookEx(hhook, hc, wParam, lParam); } サンプルではこれで動作するのですが、 自作するとこれでLoadStringが動作せず0を返すのですが、 それとGetModuleHandleとは何をする関数でしょうか?
963 :
341 :2011/03/07(月) 17:10:43.71
存在しなかったらNULL返すだけだから てかまともな本買えよ いろいろと理解が足りてないぞ
965 :
341 :2011/03/07(月) 17:49:48.16
どの本に具体的に載ってますか?
967 :
デフォルトの名無しさん :2011/03/08(火) 03:23:12.90
NTLという演算ライブラリを使っています。ZZ型という巨大整数を扱う型が
あるのですが、計算結果をファイルに書き込みたいのですが、char型の配列
に変換できずに困っています。I[i]=salt%256;salt=(salt
>>8 );とやっても
出来ませんでした。ZZ型をそのまま書きこむ方法があればいいのですが、
内部でどのような処理をしているのかが解りません。どなたか解る人が
いたら教えてください。よろしくお願いします。
マルチするバカは氏ねばいいと思うよ
現在JOYPADを接続して認識出来ているのですが、 Joytokeyの様に1ボタンを押したらキボードのキーが押されるといった操作を実現する為には、 キボードの出力メッセージを出せばいいと思いSendMessageでWM_KEYDOWN、WM_KEYUPしてみたのですがうまく動きません、 どうしたらいいのでしょうか?
970 :
969 :2011/03/10(木) 02:50:57.52
SendInput 使おうと思ったのですが、 LPINPUT bubu = {0}; と定義すると、 error C2065: 'LPINPUT' : 定義されていない識別子です。 といったエラーが出てしまいます。 #include <windows.h> #include <winuser.h> は書いてあります。 よろしくお願いします。
974 :
969 :2011/03/10(木) 03:20:32.36
見ました、何がおかしいんでしょうか?
975 :
969 :2011/03/10(木) 03:22:18.65
OS:WindowsXPSP3 VC2003 ですよろしくお願いします。
976 :
969 :2011/03/10(木) 03:27:31.76
>>973 マルチですみません。
そちらサイトを見てる方と2chを見てる方は違うと思ってました。
以後注意します。
次スレちんちん。
978 :
デフォルトの名無しさん :2011/03/11(金) 14:29:50.93
cscriptでvbsファイルを実行してその戻り値をvc++側で取得したいのですが どのような方法がありますか? CreateProcessとかsystemとかうまくいかなくて困っています。
vbsが戻り値を返すようにしないとだめだよ WScript.Quit(1) とか
ほ
うめ
ume
梅
小梅
次スレないのに埋めるの?葬り去りたいの?
下の方法でファイルを開こうとしても開けません。 数週間前は開けました・・・ file_nameにはファイル名が入っています。 ifs.is_open()で0が返ります。 std::ifstream ifs; string file_name; ifs.open(file_name.c_str());
.
うめ
ちゃんと後処理しようぜ。
立てるのはいいが、最後まで使ってから引っ越そうぜ。
+
1000まで10近く残して引っ越すと連投規制もあって埋める側も大変。 ム板は人の出入りが少ないから、案外と落ちなかったりする。 通常運行の場合は995、いや使い切ってからでも十分だよ。 あと自分で立てる気がないくせに人に立てさせようとする奴は嫌われるぞ。
じゃあ埋めちゃおう。
4
3
2
1
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。