お世話になっています。 iniファイルを読込み、各変数に代入するC言語のDLLを作成したいのです。 このサイトの投稿や、MSDNなどにも載っていたのですが、 少し理解に苦しみます。 現在まで、理解した点がwindows.hのインクルードを 記述するところ辺りです。 iniファイルは下記のようなレイアウトです。 ---<mst.ini>---------------------------- [user] name=username ID=userid [pc] pcname=FMV ---------------------------------------- #include<windows.h>は記述することまでは 分かりましたが、以下から進みません。。。 GetPrivateProfileString("") 初心者で申し訳ありませんが、お助け願います。
↧
GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・
↧
C++の改行を表すコマンド
C++の勉強を始めたばかりなのです。 出力のコマンドで、改行は「endl」と「\n」の両方が使えるようですが、この2つの違いや使い分けはどのようにすればよいのですか?
↧
↧
IPアドレス表示プログラム
GetIpAddrTableを使って、自分のパソコンのIPアドレスを表示するプログラムを作成したいのですが、プログラムソースがあれば教えていただけませんか? お願いします。 OSはWinXPでコンパイラは、Visual Basic.NET Standard Version 2003を使用しています。
↧
C言語のPathFileExistsについて
visual studio 2010、C言語でPathFileExistsを使って ファイル有無のチェックをしようと試みましたが、 コンパイルエラーになってしまいました。 環境はwindowsXP、SP3です。 参考にしたいくつかのサイトでは、visual studio 2010ではPathFileExistsを使って ファイル有無をチェックできると書いてあったのですが、 visual studio 2010でもC言語だとPathFileExistsは使えないのでしょうか? TEST.C #include <stdio.h> #include <shlwapi.h> int main() { char path[128]; sprintf( path, "c:\\tmp.txt" ); if ( PathFileExists(path) ){ printf("ファイル有\n"); } else{ printf("ファイル無\n"); } return 0; } TEST.OBJ : error LNK2019: 未解決の外部シンボル __imp__PathFileExistsA@4 が関数 _ main で参照されました。 TEST.EXE : fatal error LNK1120: 外部参照 1 が未解決です。 NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 10.0\VC\BI N\link.exe"' : リターン コード '0x460' Stop.
↧
ダイアログのボタン操作
ダイアログのボタンが押されている間、文字列が表示されるようなプログラムを作りたいのですが、通常のプッシュボタンですと、押したあと離した時にイベント(WM_COMMAND)が発生してしまいます。(通常、OKやキャンセルを押した場合、実際に話した時に機能が働く) ボタンが押されていることを認識する方法はあるのでしょうか? ラジオボタンやチェックボックスなら設定によってできるような話を聞いたのですがプロパティをどのように設定したらよいかわりません。 よろしくお願い致します。
↧
↧
Tifファイルの数値化について
指定したTifファイルを読み込んで 各セルの輝度を数値化したいのですが やり方が分かりません。 MATLABでは画像を読み込むと自動で 輝度が数値化されて行列に収まるのですが, 処理速度がイマイチのためにC言語でファイル読み込みを 行いたいと思っています。 Tifファイルのヘッダーの構造等を教えていただけると 助かります。 (画像ファイルを数値化してくれるFreewareがあればベストですが。。。) よろしくお願いします。
↧
PCC-S-02322 未定義の識別子・・・
こんばんは、Pro*C初心者です。 プリコンパイルを行った際に下記エラーが表示されてしまいます。 *-----------------------------------------------------------------------* PCC-S-02322,未定義の識別子が見つかりました。 セマンティック・エラーです。(行252、列23、ファイルC:\HDataSYU\test.pc): EXEC SQL CONNECT :username IDENTIFIED BY :password USING :db_string; ...........................................1 *-----------------------------------------------------------------------* ちなみに下記はプログラムの一部です。 char username[32]; char password[32]; char db_string[32]; memset(username, 0, sizeof(username)); memset(password, 0, sizeof(password)); memset(db_string, 0, sizeof(db_string)); strcpy(username, USERNAME); strcpy(password, PASSWORD); strcpy(db_string, DB_STRING); EXEC SQL CONNECT :username IDENTIFIED BY :password USING :db_string; 原因など些細な事で構いませんので、お分かりになる方ご教示下さい。 お願いします。 【環境】 os:Windows oracleのバージョン:oracle9.2.0
↧
VisualStudio MFC変数が追加できない
MFCでダイアログベースのアプリ作成しています。 以前使っていたプロジェクトに変更を加えるため、 ダイアログにコントロールを追加しました。 そのコントロールに対してメンバ変数を追加しようとしたところ、 「変数の追加」ボタンが使用不可となっており、変数の追加が行えません。 また、クラスビューが表示されなくなったようで、こちらからも追加ができません。 2008を使っています。 解決方法をご教示願います。
↧
AES暗号にて、AES_set_encrypt_keyで設定されるAES_KEYについて
VC++2008にてopensslを用いて、AES暗号/復号の機能を作成しています。 AES_set_encrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_ENCRYPT)にて暗号、 AES_set_decrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_DECRYPT)にて復号するコーディングをしました。 (http://d.hatena.ne.jp/hnko/20090302/1235977892のenc_aes128_cbc_test()を参考にしましたので、 一連の流れは、こことほぼ同じです) デバッグしてみると、一見、暗復号が問題なく出来ていたので、 AES_set_encrypt_key関数の第一引数のkey配列の値と、 ivec配列の値を変えて、デバッグしてみたところ、 key配列を変更すると、暗号化後の文字列も変更されますが、 ivec配列を変更しても、暗号後の文字列に変化が有りませんでした。 調べてみたところ、AES_set_encrypt_keyにて返される AES_KEYのroundsの値が常に同じであることが原因と思われますが、 roundsの値が常に一定だと、暗号解読が比較的容易に 出来てしまうと思うのですが、上記で挙げたサイトでの コーディングの他に、何か別にコーディングを足さなければならないのでしょうか? よろしくお願いします。
↧
↧
CStringをwchar_tに変換したい
CStringをwchar_tに変換したく思い、ネットで探したところ、 http://msdn2.microsoft.com/ja-jp/library/ms235631(VS.80).aspx のページを見つけたので、下記のプログラムを組んで実行してみましたがエラーになって しまいます。 【プログラム】 CString orig("Hello, World!"); // Convert to a char* const size_t newsize = 100; // Convert to a wchar_t* // You must first convert to a char * for this to work. size_t origsize = strlen(orig) + 1; size_t convertedChars = 0; wchar_t wcstring[newsize]; mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE); 【エラー】 error C2664: 'strlen' : 1 番目の引数を 'CString' から 'const char *' に変換できません。 error C2664: 'mbstowcs_s' : 4 番目の引数を 'CString' から 'const char *' に変換できません。 &CStrinをconst char *でキャストしてもうまくいきません。 どこがおかしいのでしょうか? 【環境】 WindowsXP+VC++2005
↧
1バイト文字と2バイト文字の区別の仕方
C++についての質問です。 簡単な質問で大変申し訳ございません。 '\'や'&'などSQLインジェクションに 関係する文字コードについて 空白に変換する処理をいれていたところ、 カタカナの「ソ」(%83%5c)など も変換されてしまい、 文字化けしてしまうという現象が起きています。 '\'は、'%5c'のため、カタカナの「ソ」は、 それと同じ'5c'のコードが 2バイト目入ってしまっているからだと いう原因までは、 把握しているのですが、 対処の仕方がわかりません。 簡単な質問で申し訳ございませんが ご教示願います。
↧
コンボボックスの矢印の幅調整
コンボボックスでアイテムを選択する矢印の幅を広くしたいのですが、 プロパティで設定する事が可能なのでしょうか?。高さはフォントの大きさで設定出来るのですが、 幅の調節の方法が分からないので教えてください。 使用言語はC++ Builder4.0です(NT4.0)。 御回答を宜しくお願いします。
↧
プログラムの進行が一時ストップしません
void Taiketu_basyo::taiketu() { int iti,kougeki; //一時的に必要な「位置」と「攻撃量」の変数 cout << "さあ、あなたの攻撃です。" << '\n'; cout << "攻撃の位置(1~5の数値)を入力してください。" << '\n'; cin >> iti; cout << "攻撃に使うパワー(100以下の数値)を入力してください。" << '\n'; cin >> kougeki; cout << '\n'; you.kougeki_suru(kougeki); if(buu_no_basyo == iti){ buu.kougeki_sareru(kougeki * 2); }else{ cout << "あなたの攻撃は外れたようです。" << '\n'; } cout << '\n'; cout << "大魔王の攻撃です。" << '\n'; cout << "(エンターキーを押してください)" << '\n'; cin.sync(); cin.get(); iti = rand() % 5 + 1; kougeki = rand() % 100 + 1; buu.kougeki_suru(kougeki); if(you_no_basyo == iti){ you.kougeki_sareru(kougeki * 2); }else{ cout << "大魔王ブウの攻撃は外れたようです。" << '\n'; } } int main() { Taiketu_basyo dokoka; //対決場所dokokaの生成 //ここでコンストラクタが働きヒーローと大魔王の位置が決められる dokoka.taiketu(); //dokokaの対決 このプログラムなんですが cin.sync(); cin.get(); の部分で「プログラムの進行を一時ストップし、エンターキー(リターンキー)で進行を再開する」としたんですがプログラムを動かしてみるとストップしません。 色々考えてみたんですが原因がわからないのでどなたか教えてもらえませんでしょうか? よろしくお願いします。 言語はC++でやってます。
↧
↧
ファイル出力について
ファイルの出力について質問させてください。 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #define NUM 50 /*構造体宣言*/ struct Students{ int N; /*学籍番号*/ int A; /*科目Aの点数*/ int B; /*科目Bの点数*/ int C; /*科目Cの点数*/ int sum; /*3科目の合計*/ double ave; double dev; }; /*平均の関数*/ double Average(struct Students tmp) { return(double)(tmp.A+tmp.B+tmp.C)/3.0; } /*偏差値の関数*/ double Deviation(struct Students k,double l,double m) { return(double)(NUM+10*(k.ave-l)/m); } int main(void){ struct Students std[NUM]; /*構造型配列*/ int j=0,i,N,A,B,scannum; double csum=0,sdev=0,cave; /*csum:クラスの総合点、sdev:標準偏差値、cave:クラスの一科目あたりの平均*/ FILE*file; /*ファイルのポインタを用意*/ srand((unsigned)time(NULL)); /*乱数の初期化*/ file=fopen("Data.txt","r"); /*Dataファイルのオープン*/ /*ファイルのオープンチェック*/ if(file==NULL){ fprintf(stderr,"cannnot open file 'Data.txt'\n"); exit(1); } /*Studentsにデータを格納*/ for(i=0;i<NUM;i++){ scannum=fscanf(file,"%d%d%d",&N,&A,&B); /*ファイルが読み込めたかチェック if(scannum!=1){ fprintf(stderr,"cannnot read file 'Data.txt'\n"); exit(1); } */ std[i].N=N; std[i].A=A; std[i].B=B; std[i].C=70+(int)(rand()/(RAND_MAX+1.0)*31); std[i].sum=std[i].A+std[i].B+std[i].C; std[i].ave=Average(std[i]); csum=csum+std[i].sum; }fclose(file); /*標準偏差計算*/ cave=csum/150.0; for(i=0;i<NUM;i++){ sdev=sdev+(std[i].sum-cave)*(std[i].sum-cave); } sdev=sqrt(sdev/NUM); /*偏差値の計算,最高偏差値の出力*/ for(i=0;i<NUM;i++){ std[i].dev=Deviation(std[i],cave,sdev); if(std[i].dev > std[j].dev){ std[j]=std[i]; } printf("学籍番号:%d.\n",std[i].N); printf("科目A:%d.\n",std[i].A); printf("科目B:%d.\n",std[i].B); printf("科目C:%d.\n",std[i].C); printf("平均点:%lf.\n",std[i].ave); printf("偏差値は:%lf.\n",std[i].dev); } /*results.txtに書き込み if((file=fopen("results.txt","w"))==NULL){ printf("cannnot open\n"); return 1; } fprintf(file,"%d,%d,%d,%d,%lf,%lf",std[j].N,std[j].A,std[j].B,std[j].C,std[j].ave,std[j].dev); fclose(file); */ return 0; } このプログラムを実行させてみるとdata.txtの一番最初の学生番号のみ 表示されません。そのためファイルの読み込みのエラー確認を入れると ストップしてしまう状態です。学生番号は101~150なんですが実行結果 が102~150で表示されます。学生番号は変数Nに対応してるのでそこを 考えてみたのですがどこが悪いのか 発見できません。アドバイスを お願いします。
↧
EAccessViolationエラーの生成
C++Builder 5.0でプログラムを作成しています。 Form1~Form3を作成し、Form1を自動生成の対象及びメインフォームとしました。Form1にはボタン1、Form2にはボタン2を用意し、ボタン1からはForm2を、ボタン2からはForm3を開くことが出来るようにしました。 Form1のボタン1には TForm2 *Form2 = new TForm2(Application); Form2->Show(); Form1->Hide();と記述し、 Form2のボタン2には TForm3 *Form3 = new TForm3(Application); Form3->ShowModal(); ← Form3はモーダルフォーム と記述しました。Form1とForm2のPublic部にint型の変数iとjを用意し、 Form3から Form1->i = 5; Form2->j = 5; という様に値を代入すると Form1の時はうまく代入できるのですが、Form2の変数に代入すると「Project1.exeがEAccessViolationクラスの例外を生成しました …」というエラーメッセージが表示されてしまいます。この原因は何でしょうか。なお、各フォームのヘッダファイルのインクルード はきちんと行っています。OSはWindows98です。御回答をどうかよろしくお願いします。
↧
CEditクラスの透過について
CEditクラスを派生させれば できるのでしょうか? 文字を入力した部分が白い帯になり 派生クラスで CDC *pDC=GetDC(); pDC->SetBkColor(RGB(0,0,255)); pDC->SetBkMode(TRANSPARENT); ReleaseDC(pDC); などとしても TextOut関数に対してなので 違うような気がします。 別に透過でなくても 親ウインドウ画面をコピーしてCEditの派生クラスに貼り付けても(BitBlt)いいんですが、 文字の部分にどう処理させればいいのかわかりません。 CEditクラスの派生クラスの透過は出来るのでしょうか? よろしくお願いします。
↧
ボタンのオーナードローについて
既存のプログラムにあるボタンをオーナードローに変更しようとしています。 概要としては、以下のとおりです。 ・MainFrame-CDialogBar((1))-CWnd((2))のような重なりになっています。 ・上記(2)のクラスにてオーナードローできるようにしたいのです。 ・開発環境は、VC++6.0です。 変更点は以下のとおりです。 ・(2)にメッセージマップの追加(ON_WM_DRAWITEM()) ・(2)にメッセージハンドラの追加(OnDrawItem()) ・(1)メソッド内で、(2)をCreate後、(2)にModifyStyle()にて、BS_OWNERDRAWを付加 ところが、変更後のOnDrawItem()にイベントが飛んできません。 自分で調べたことは、以下のとおりです。 ・SPY++でメッセージの確認(→飛んできていません) ・GetWindowLong()にて、ボタンスタイルの確認(→追加スタイルが付加されてました) このような場合、他にどこを調べて良いか教えて頂きたいのです。 拙い文章ですが、何卒、よろしくお願い致します。
↧
↧
分数の足し算をさせるプログラムが分かりません。どなたか分かりませんか?
分数の足し算をさせるプログラムが分かりません。 C言語の問題で分数の足し算までは一応できるんですが、答えがでたときに整数で出すやり方と約分して表す方法が分かりません。 どなたか知恵を貸してくれませんか? ユーザから4つの整数を入力し、はじめに入力された2個の整数と後に入力された2個の整数を分数と考え、その分数の和を表示するプログラムを作成せよ。 例えば、「3」「4」「5」「6」と入力されたときは、3/4 + 5/6を計算する。 そのプログラム内では分数の和を計算する関数を作成する。 さらに、 約分を行う関数を 再帰呼び出しを利用して作成する。 void yakubun(int *a1, int *a2) 例えば、以下の場合1/2と表示される。 int i=10,j=20; yakubun(&i,&j); printf(“%d / %d”, i, j); ちなみにここまでできました↓ #include<stdio.h> void bunsu_tasizan(int a1,int a2,int b1,int b2, int *c1,int *c2 ) { *c1=(a1*b2)+(b1*a2); *c2=(a2*b2); } int main() { int x1,x2,y1,y2,z1,z2; printf("整数を入力してください"); scanf("%d",&x1); scanf("%d",&x2); scanf("%d",&y1); scanf("%d",&y2); if(x2==0||y2==0||x2==0&&y2==0) printf("0以外を入力してください"); else{ bunsu_tasizan(x1,x2,y1,y2,&z1,&z2); printf("%d/%d",z1,z2);} return (0); }
↧
TCP/IP: 非ソケットに対するソケット操作です?
UNIX/gcc。 TCP/IPでチャットプログラムを作っているんですが ログアウトメッセージなるものを送る前に sendto() sent a different number of bytes than expected: Socket operation on non-socketというエラーが出ます。 起こる箇所:クライアント msgStruct.option = htonl(option); msgStruct.seatLog = htonl(loggedIn); if (sendto(sock, &msgStruct, sizeof(msgStruct), 0, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) != sizeof(msgStruct)) { printf("sizeof(msgStruct): %d\n", sizeof(msgStruct)); DieWithError("sendto() sent a different number of bytes than expected"); これはどういうときに起こるのでしょうか? このエラーが起こり始めたのはファイルの中のポート番号の値を変えてからです。 元通りにポート番号をコマンドの引数から得た値に直せば このエラーは消えますが、そうするとチャットプログラムとして動作しなくなってしまいます。 //これで各自のクライアントが独自のポート番号を持てます echoDummyAddr.sin_port = 29990 + (unsigned short)recordNumber; //元々はechoServPort = atoi(argv[1]);で得た値を送ってました loggedIn = logIn(option, msgString, seatLog, inet_ntoa(echoClntAddr.sin_addr), echoDummyAddr.sin_port); 関数側(端折ってます): int logIn(int option, char *id, int loggedIn, char *ip, unsigned short portNum) { FILE *file_ptr; user record_file; record_file.portNum = portNum; fwrite(&record_file, sizeof(record_file), 1, file_ptr); fclose(file_ptr); } return loggedIn; } 小さなヒントでもいいですから、どうか宜しくお願いします。
↧
イベントハンドラが取得できない VC++ MFC
おはようございます(><) VC++.NETで開発を行っています。 MFCを使って開発をしています。 CDialogを継承したCmyDialogでOnLButtonDownのイベントがとれません。 OnLButtonDownのイベントを使いたかったのですが 自動でイベントを設定するプロパティのメニュー(雷のマークみたいなもの)にイベントがなかったので 自分でCmyDialog::と書いたらリストの中に OnLButtonDown( UINT nFlags,CPoint point)がでたので 定義に追加、イベントの記述を追加しました。 雷マークで作ったイベントのコードには // TODO : ここにコントロール通知ハンドラ コードを追加します。 と自動で記述され、ブレイクポイントを設定するとそこで止まるのですが 私が記述したLButtonDownのイベントでは実行してもブレイクポイントで止まりません。 他のイベントと比べて違うのは BEGIN_MESSAGE_MAP(CmyDialog, CDialog)の中に ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, OnLvnColumnclickList1) のように イベントハンドラ名、リソース名?、イベント名 と自動で記述があります。 ここを追加すればいいのかなと思いましたが 左クリックに対応するイベントハンドラ名が分かりません。 問題解決に有効な情報をお持ちの方 お力をお貸しください。 よろしくお願いします(><)
↧