C++ WinAPIの使い方について

このQ&Aのポイント
  • WindowsAPIのGetPrivateProfileStringを使用してエラーが発生しています
  • 問題点はヘッダーの宣言とインポートライブラリの使用方法です
  • 質問のコードはGetPrivateProfileStringを使用して設定ファイルからデータを読み取るものです
回答を見る
  • ベストアンサー

C++ WinAPIの使い方について

WindowsAPIの GetPrivateProfileString を使用していますが、下記のエラーが出てしまいます。 error C3861: 'GetPrivateProfileString': 識別子が見つかりませんでした ヘッダー:Winbase.h 内で宣言、Windows.h をインクルード インポートライブラリ:Kernel32.lib を使用 以上2点が問題だとは思うのですが、インクルード以外のやり方が分かりません。 コードは以下です。 char buf[256]; GetPrivateProfileString("COMMON","ZIPPATH","localhost",buf,sizeof(buf),"C:\tool.ini"); 御存じの方がいれば、ご教授いただけると幸いです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

// trial.cpp #include <iostream> #include <Windows.h> int main() { char buf[256]; GetPrivateProfileString("COMMON","ZIPPATH","localhost",buf,sizeof(buf),"C:\tool.ini"); std::cout << buf << std::endl; } cl -EHsc trial.cpp ...問題なくコンパイルできました。

kurohune12
質問者

お礼

問題なくできました! ありがとうございます!

関連するQ&A

  • C言語の使い方を教えてください。-C言語入門者

    C言語のプログラムの処理の対象となるファイルはどこに保存したらよいのでしょうか?たとえば下記のプログラムで #include <stdio.h> #include <stdlib.h> #include <string.h> void main(void) { char *line[100], *buf; int i = 0, len, lines; FILE *fp; fp = fopen("textfile.txt", "r"); buf = calloc(128, sizeof(char)); while (i < 100 && fgets(buf, 128, fp) != NULL) { len = strlen(buf); line[i] = calloc(len + 1, sizeof(char)); strcpy(line[i], buf); i++; } fclose(fp); lines = ((i <= 100) ? i :100); free(buf); for(i = 0; i < lines; i++) printf("%s", line[i]); for(i = 0; i < lines; i++) free(line[i]); } で [textfile.txt]という名のファイルをマイドキュメントやコンパイラーを保存しているのと同じ領域に保存してコンパイラーを実行しても所要の結果が得られません。テキストにはプログラムの作り方しか書いてありません。

  • 【VS2008 C++】2つのプロジェクト間で共通の関数を使いたい

    【VS2008 C++】2つのプロジェクト間で共通の関数を使いたい WindowsXP上で visual studio 2008 C++ express editionを 使用しています。 1つのソリューションに2つのプロジェクトをつくり、 その2つに共通の関数を使用させたいのですが、どのように 設定すればよいか教えて頂けませんでしょうか。 ソースの内容は以下のとおりです。 具体的には、mainB.cppでcommon.cppの関数を 呼び出したいです。 //common.cpp #include <stdio.h> void showCommon(){ printf("---common-----\n"); } //common.h #include<stdio.h> void showCommon(); //mainA.cpp #include<stdio.h> #include "common.h" void main(){ printf("---mainA-----\n"); showCommon(); } //mainB.cpp #include<stdio.h> #include "common.h" void main(){ printf("---mainB-----\n"); showCommon(); }

  • メモリについて

    お世話になります。 現在、Becky!のプラグインを作成しております。 とりあえず思うような動きにはなったのですが、今回初めてC++ を使ったので、作成したものの正直なところあまり理解して 出来ておりません。 作成したプラグインは送信ボタンが押されたときにメッセージを 表示するもので、メッセージの本文はiniファイルから読み込む ようにしております。 char buf[256]; DWORD ret; ret = GetPrivateProfileString("message", "msg", "メッセージ無し", buf, sizeof(buf), "C:\\Program Files\\RimArts\\B2\\PlugIns\\becky.ini"); で、bufの内容をMessageBoxで表示してます。 そこで質問ですが、当該プラグインが実行される都度、メモリが食いつぶされて しまうってことはあり得るのでしょうか。 メッセージが表示され、OKまたはキャンセルボタンが押されたら、 そこでメモリは解放されるという認識なのですが。。 ご教示の程、宜しくお願い致します。

  • C言語プログラムエラーについて

    構造体とポインタを使って関数電卓のプログラムを作ってコンパイルしたのですがひとつだけエラーがでて困っています。親切な方回答よろしくお願いします。 ソースコード↓ #include<stdio.h> #include<string.h> #include<math.h> int main(void) { int i; double result; char inp_buf[30]; double input_d; typedef struct{ char*f_name; double(*func)(double); }FUNC_TBL; FUNC_TBL f_tbl[] = { { "sin",sin }, { "cos",cos }, { "tan",tan }, { "exp",exp }, }; printf( ">" ); scanf( "%s %lf", inp_buf, &input_d); for( i=0;i< sizeof(f_tbl)/sizeof(FUNC_TBL);i++) { if(!strcmp(f_tbl[i],f_name,inp_buf)) { 29行目→ result = f_tbl[i],func(input_d); } } printf("%lf\n",result); return 0; } エラーメッセージ↓ (29):error C2440:`=`:`FUNC_TBL`から`double`に変換できません。

  • C++でConvertSidToStringSid関数を使うために、sddl.hを使用したい

    お世話になります。 現在C++ 6.0でソフトを作成しています。 その中でConvertSidToStringSid関数を使うために、sddl.hを使用したいのですが、下記のようなエラーが出ます。 -----------インクルード------------------ #include <stdlib.h> #pragma comment(lib,"netapi32.lib") //////////ここで定義しているつもりです。 #define _WIN32_WINNT 0x0500 #include <windows.h> #include <sddl.h> //////////ここで定義しているつもりです。 #include <tchar.h> #include <lmaccess.h> #include <lmapibuf.h> #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ----------デバックエラー J:\Del.cpp(17) : fatal error C1083: インクルード ファイルがオープンできません。'sddl.h': No such file or directory どのようにすればConvertSidToStringSid関数を使うために、sddl.hを使用できますでしょうか? 何卒よろしくお願いします。

  • Borland C++ Compiler 5.5

    コマンドプロンプトにて、「bcc32 -c test.c」と入力すると下記エラーが表示されます。 エラー E2209 test.c 193: インクルードファイル 'stdio.h' をオープンできない エラー E2209 test.c 194: インクルードファイル 'string.h' をオープンできない WEBで検索したら、bcc32.cfgの設定がおかしいと書いてありましたが、特におかしい所が見つかりません。 誰か教えて下さい。 下記はbcc32.cfgの内容です。 -I"c:\borland\bcc55\Include" -L"c:\borland\bcc55\Lib" -L"c:\borland\bcc55\Lib\PSDK" -DWINVER=0x0400 -D_WIN32_WINNT=0x0400 よろしくお願いします。

  • GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・

    お世話になっています。 iniファイルを読込み、各変数に代入するC言語のDLLを作成したいのです。 このサイトの投稿や、MSDNなどにも載っていたのですが、 少し理解に苦しみます。 現在まで、理解した点がwindows.hのインクルードを 記述するところ辺りです。 iniファイルは下記のようなレイアウトです。 ---<mst.ini>---------------------------- [user] name=username ID=userid [pc] pcname=FMV ---------------------------------------- #include<windows.h>は記述することまでは 分かりましたが、以下から進みません。。。 GetPrivateProfileString("") 初心者で申し訳ありませんが、お助け願います。

  • C++ の LNK2001エラー

    「sample.obj : error LNK2001: 外部シンボル ""void * __cdecl SetupDiGetClassDevsW(struct _GUID *,wchar_t const *,struct HWND__ *,unsigned long)" (?SetupDiGetClassDevsW@@$$FYAPAXPAU_GUID@@PB_WPAUHWND__@@K@Z)" は未解決です。」というエラーメッセージが出ます。  ソース中に extern "C" { #include "hidsdi.h" #include <setupapi.h> } #pragma comment(lib, "setupapi.lib") #pragma comment(lib, "hid.lib")  の記述をしています。  Visual C++ 2005 Express Edition で [プロジェクト] -> [プロパティ] -> [構成プロパティ] -> [リンカ] -> [追加のライブラリ] のところにディレクトリ設定も行っています。  どのようにしたら解決できるのでしょうか。

  • HEWを使用しているのですが、このようなエラーが出ました。

    HEWを使用しているのですが、このようなエラーが出ました。 C:\Hiae_7751RTE\Product\T-Kernel\sh7751R\include\queue.h(28) : C2500 (E) Illegal token "void" C:\Hiae_7751RTE\Product\T-Kernel\sh7751R\include\queue.h(29) : C2500 (E) Illegal token "{" 最初はコンパイルエラーもリンクエラーもなかったのですが、intprg.c、resetprg.cを消した(この時点でもエラーはなし)のでstacksct.hを別のソースファイルからインクルードさせてみたら上のようなエラーが出ました。エラーが出たのでstacksct.hをインクルードさせるのもやめてみましたがエラーは消えません。 新しくプロジェクトを作ってみましたがダメでした。 また、queue.hは書き換えていません。 なぜ関係のないqueue.hにエラーがでたのでしょうか? queue.hのエラーが出た行です↓ ---------------------------------- Inline void QueInit( QUEUE *que ) { ----------------------------------

  • C言語におけるfgetsを用いたループ処理について

    C言語において、文章を読み込むためにfgetsを用いて下記のプログラムを書いたのですが、*において入力を受け付けなくなります。 これを解消する方法はないでしょうか? ちなみにコンパイラはBBC、開発環境はVistaです。 なお、簡略のため#include,main等は省略しています。 //以下プログラム #define SIZE 16384 char moji[SIZE] = {""}; char buf[SIZE]; //EOF(^Z)になるまで、文字列を受け取る while(fgets(buf, sizeof(buf), stdin) != NULL){ if(sizeof(moji) < strlen(moji) + strlen(buf)) break; strcat(moji, buf); }; getchar(); //* //プログラムここまで

専門家に質問してみよう