今だけ人気マンガ100円レンタル特集♪

先日質問させていただき、
ファイル出力時に、フォルダを作成し、そのフォルダにファイルを出力していく方法をお聞きしたところ、

_mkdir()関数を使い、最初にフォルダを作っておく方法を教わり、
これは上手くいきました。

それとは別に、WinAPIを使い、フォルダの有無を調べ、無い場合は
作成するという方法があるのを教えてもらいました。

WinAPI使ったことないので、良くわからなかったのですが、
丁寧な説明を頂き、ほとんど、コピーして貼り付けるだけだったので
実行してみたのですが、意味のわからないエラーが出てしまいました。
実行した方法は、
#include <shlwapi.h>
#include <windows.h>

if ( PathIsDirectory(path) ){ ←フォルダ有無
 CreateDirectory( path, NULL ); ←フォルダ作成
}

sprintf( buff, "%s\\%s", path, filename );
fp = fopen( buff, "w" );
 :
fclose( fp );


エラーの内容は
構文エラー : 識別子 'DECLSPEC_IMPORT' がシンタックスエラーを起こしました。
というものでした。

エラーの部分は、よく解らないのですが、自分で書いたメインの文ではなく、何かのヘッダ部分?のようでした。
もしかして、WinAPIを使うには、何かインストールしないとマズイのでしょうか??

これだけの説明で、何が悪いのか指摘できるのかわかりませんが、
わかる方いらっしゃいましたら教えて下さい。
何か足りない情報があったら書き込みます!

ちなみにもう一つお聞きしたいのは、フォルダのpath指定のところは
相対パスでもいいのでしょうか?
例えば、現在Cファイルがある場所にDATAというフォルダを作りたかったら、
path指定のところは、
PathIsDirectory(DATA) で問題ないのでしょうか?

すみませんが、回答お願いします!

このQ&Aに関連する最新のQ&A

A 回答 (7件)

★『ShLwApi.Lib』がインポートされていません。


・プロジェクトファイル(*.vcproj)を調べたらライブラリをインポートしていません。
 回答 No.4 の『お礼』でインポート出来たとなっていますがインポートしていませんが…。
・その代わりに『Shlwapi.h』ファイルがプロジェクトに登録されていますね。
 違いますよ。ファイルが。拡張子は『.Lib』です。『.h』はソースに記述して下さい。
 よって設定が間違っています。
 『C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib\ShLwApi.Lib』を
 右メニューから追加して下さい。拡張子は『*.Lib』です。
 もう一度、設定して下さい。

最後に:
・『*.h』はヘッダファイルなのでソースにインクルードを記述します。
 自作ヘッダ以外の『*.h』はプロジェクトに登録しなくても良いと思います。
 『*.Lib』がインポートライブラリですので右メニューから追加して下さい。
 『*.h』と『*.Lib』は違うので区別して下さい。
・以上。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

なるほど、たしかに追加してるもの違いました。。

すみません。初歩的なミスで。

先ほど正常に動作しました!!
色々と本当にありがとうございました!

お礼日時:2007/07/25 01:13

★ソースを見せてくれますか?

    • good
    • 0
この回答へのお礼

http://koushi12-web.hp.infoseek.co.jp/public_htm …

ここにプロジェクトごとアップしておきました。


すみませんが、よろしくお願いします!

ホント、時間があるときでいいので、よろしくお願いします。

お礼日時:2007/07/23 21:02

★2つのエラーは文字列定数が原因です。


・VS2005 から文字列定数の初期設定が Unicode 文字となりました。
 よって文字列の "RESULT" という記述でエラーとなります。
 正しくは次の3つのどれかで記述します。
 (1)L"RESULT"
 (2)TEXT("RESULT")
 (3)_T("RESULT")
 TEXT()、_T() はマクロ関数です。
 このマクロはオプション設定で UNICODE が定義されていればすべての文字列を
 Unicode 文字列として『L』を付けた文字列にします。UNICODE が定義されていないと
 『L』の付かない文字列にします。この2つの違いは『L』があると Unicode 文字列
 として『L』がないとマルチバイト文字列となります。
・これからは文字列の記述を TEXT() マクロを使って記述することをお勧めします。
 また『L』の付かない文字列(マルチバイト文字列)として正常にコンパイルするには
 プロパティの『全般』→『文字セット』を『マルチ バイト文字セットを使用する』に
 変更して下さい。
・以上。→『LPCTSTR』『TCHAR』

参考URL:http://www.wisdomsoft.jp/dev/api/windows/003
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

WinAPIは全然勉強したことなかったので、
これがうまくいったら勉強してみたいと思います!

ホント初歩的な質問ばかりしてしまってると思いますが、
すみません。もうちょっと付き合って下さい。

教えていただいた通り、TEXT("RESULT")と全てなおしたのですが、
今度は下のようなエラーが出てしまいました。

0.obj : error LNK2019: 未解決の外部シンボル __imp__PathIsDirectoryW@4 が関数 _main で参照されました。
C:\Documents and Settings\宮澤駿太\デスクトップ\suraisu\Debug\suraisu.exe : fatal error LNK1120: 外部参照 1 が未解決です。

ダブルクリックしても、エラー場所に飛ばないので何が悪いのかもよくわからなくて・・・

この前教えていただいた、Shlwapi.hのインクルード方法のあたりが間違っているのでしょうか??

一応、ヘッダーファイルののところに、Shlwapi.hはインクルードしてあります。

後、オプションのVC++ディレクトリのところの実行可能ファイルのところに、Shlwapi.hがあった辺りの、Includeフォルダ、Binフォルダ、Libフォルダは追加しました。
ライブラリ ファイルの方は、Libフォルダだけ追加しました。

すみませんが、よろしくお願いします。

お礼日時:2007/07/23 14:11

★インポートの追加について。


>インポートの方法というのを教えて下さい。
 ↑
 (1)『ソリューション・エクスプローラ』で右メニューから『追加(D)』を選択します。
 (2)『既存項目の追加(G)...』を選択します。
 (3)ダイアログから『ShLwApi.Lib』があると思われるフォルダに移動します。
 (4)『ShLwApi.Lib』を入力して『開く(O)』を押す。
 これだけですが VC6.0 でソリューション・エクスプローラと呼びましたっけ?
 構造プロパティを出すときのペインです。
 またはプロジェクトを管理しているペインといえば分かりますか。
 そのペインで右メニューすれば『追加(D)』があるのでそれを選択します。
・あとインポート・ライブラリの場所ですが
 VC++2003 では
 『C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Lib\ShLwApi.Lib』
 VC++2005 では
 『C:\Program Files\Microsoft Visual Studio .NET 2005\Vc8\PlatformSDK\Lib\ShLwApi.Lib』
 かな。VC6.0 も似たような場所にあると思います。
 つまり
 『C:\Program Files\Microsoft Visual Studio … \PlatformSDK\Lib\ShLwApi.Lib』
 という感じで。探して下さい。
>ちなみに、VC6.0ではWinAPI使えないのであれば、
>VisualStudio 2005 も持っています。
 ↑
 VC6.0 でも Win32API は使えます。
 VC++2005 でも無料版では SDK が無いのでダウンロードしてインストールする必要があります。
 無料版でなければ SDK は入っていると思いますのでフォルダを探せば『ShLwApi.Lib』が
 見つかるはずです。
・以上。
    • good
    • 0
この回答へのお礼

毎回回答してくださり、ありがとうございます。

試してみたのですが、
VS2005の方は、インポート方法がわかりました!!
ありがとうございました!!
VC6.0++はちょっと追加方法わからなかったのですが、
とりあえずVS2005の方でインポートは出来たので、
そっちでコンパイルしてみたのですが、
エラーが出てしまいました。

追加して書いた内容は、
#include <shlwapi.h>
#include <windows.h>

if(PathIsDirectory("RESULT")){
CreateDirectory("RESUTL",NULL);
}

これだけです。
エラーが出た場所は、if文の2行で、内容は

error C2664: 'CreateDirectoryW' : 1 番目の引数を 'const char [7]' から 'LPCWSTR' に変換できません。

error C2664: 'PathIsDirectoryW' : 1 番目の引数を 'const char [7]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)

というものでした。
ヘルプで、PathIsDirectoryWと検索してみたのですが、何もヒットせず
どうすればいいのか解りません。

何がいけないのか解りますでしょうか??

ちなみに、VS2005は有料版です。

お礼日時:2007/07/22 23:02

★回答者 No.1 です。


・コンパイラは何でしょうか?
 無料版の VC++2005 なら SDK もインストールしないと使えないようですね。
 その場合は下の『参考URL』をどうぞ。
・以上。

参考URL:http://freepg.fc2web.com/cpp/topic_vce_001.html

この回答への補足

今、ShLwApi.Libというのの追加をしようと思ったのですが、

スミマセン。やり方わからないです。
教えて頂けますか?

ちなみに、VC6.0ではWinAPI使えないのであれば、
VisualStudio 2005 も持っています。

多分、こっちなら間違えなく使えると思うのですが、

すみません。どっちでもいいので、
インポートの方法というのを教えて下さい。

よろしくお願いします。

補足日時:2007/07/20 20:59
    • good
    • 0
この回答へのお礼

今回も回答いただき、ありがとうございます!!

今ちょっと、家ではないので、教えていただいたものを
試せないのですが、

環境だけ書けるので、書いておきます!

WinXP HomeでVC++6.0を使ってます。

また、家に帰って教えていただいたもの試したら連絡します!!

ありがとうございます!

お礼日時:2007/07/20 18:06

お使いの環境を教えてください。


VC2003、VC2005などの場合、WINAPIを使用するには
PlatformSDKが必要です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

上記に環境書いておきました!

何かわかるようであれば、よろしくお願いします。

お礼日時:2007/07/20 18:07

★前回アドバイスした者です。


>もしかして、WinAPIを使うには、何かインストールしないとマズイのでしょうか??
 ↑
 インポート・ライブラリとして『ShLwApi.Lib』をリンクに追加して下さい。
 総合環境ならプロジェクトなどに追加します。
 このライブラリをインポートしないと
>構文エラー : 識別子 'DECLSPEC_IMPORT' がシンタックスエラーを起こしました。
 というエラーが出ます。ここを補足するのを忘れてました。
・あとインポート・ライブラリの場所を探して下さい。
 私の環境では
 『C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Lib\ShLwApi.Lib』
 にあります。

>ちなみにもう一つお聞きしたいのは、フォルダのpath指定のところは
>相対パスでもいいのでしょうか?
>例えば、現在Cファイルがある場所にDATAというフォルダを作りたかったら、
>path指定のところは、
>PathIsDirectory(DATA) で問題ないのでしょうか?
 ↑
・相対パスでも使えますがプログラムを実行したカレント・ディレクトリを基準に
 指定することになります。これはプログラムのあるフォルダの下に『DATA』という
 フォルダを作成したい場合は PathIsDirectory("DATA") で出来ます。
・重要なのは現在のカレント・ディレクトリの位置です。
 質問では C ファイルがある場所となっていますが、C ソースとプログラムの場所が
 同じなら "DATA" だけでフォルダが作成できます。もし、違うのならば適当なパスか
 カレント・ディレクトリを変更するなどして下さい。

図式:
■Cファイルがあるフォルダ
├DATA ←これを作成
└Release ←プログラム

この場合、カレント・ディレクトリがプログラム起動時の『Release』フォルダに
位置しています。よって『..\DATA』と指定すればフォルダの有無や作成ができます。
また、カレント・ディレクトリを『Cファイルがあるフォルダ』に移動してから
『DATA』とすればフォルダの有無や作成ができます。

その他:
・カレント・ディレクトリの取得/設定は Win32 API の
 GetCurrentDirectory();
 SetCurrentDirectory();
 で行えます。この2つの関数は windows.h だけインクルードすれば使えます。
・使い方は
 TCHAR szPath[ MAX_PATH ];
 
 // 取得
 GetCurrentDirectory( MAX_PATH, szPath );
 printf( "カレント・ディレクトリは %s です。\n", szPath );
 
 // 設定
 SetCurrentDirectory( "C:\\Windows" );
 など。
・以上。下の『参考URL』をどうぞ。

参考URL:http://wisdom.sakura.ne.jp/system/winapi/win32/w …
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。

QC ファイル出力で、フォルダがない場合でも作成する方法

先日、皆さんに教えていただき

Cで出力ファイルを指定のフォルダに出す方法が上手く出来ました。
具体的には、↓こうやって指定しました。
sprintf( buff, "%s\\%s", path, filename );

やっていて思ったのですが、
この方法だと、指定フォルダが最初から無いとエラーが出てしまいます。
フォルダが無かったら、作成し、その中にファイルを出力していってくれる。という方法はできるものなのでしょうか?

もしできるようなら教えて下さい!!
よろしくお願いします!

Aベストアンサー

★回答ではないが余談。
・koko_u_ さんありがとう。
 気づくとアンダーバーの関数名で置き換わっているみたいですね。
 他にも気づくといろいろ置き換わっていますね。
 C 関数、最近使っていないのでアンダーバーの関数名で調べてみます。
・ありがとうございました。

●質問者さんへ。
・_mkdir() 関数が使える場合はその関数でもフォルダ(ディレクトリ)が作成できます。
 それでは。

参考URL:http://www5c.biglobe.ne.jp/~ecb/c/12_14.html

QDWORDの実際の型は何でしょうか

VC++.NETの環境です。
DOWRD dw1 = 1;
int i = 2; と定義し
ここで
if ( i > dw1 ){
何かの処理;
}
とコーディングすると
warning C4018: '>' : signed と unsigned の数値を比較しようとしました。
のワーニングがでます。
これは、DWORDがint型でなくunsigned int型のようにも見えます。
ある本によれば(VC++.V.NET逆引き大全500の極意)
DWORD はint型であると記述されています。
もし、int型ならこのワーニングはでないはずなのですが、
なぜでるのでしょうか。又、DWORDの実際の型は何なのでしょうか。ご存じのかたおりましたら、教えていただけませんでしょうか。

Aベストアンサー

型定義が知りたいのならば、宣言ファイルを見れば疑問を挟む余地もありません。
DWORD型はwindef.hで
"typedef unsigned long DWORD;"
と宣言されています。

Visual Studioを使っているのならば、知りたい型の上にマウスポインタを置いて右クリック、ポップアップメニューの「定義へ移動」または「宣言へ移動」で簡単に知ることが出来ます。

QPathIsDirectoryを使って

#include <windows.h>
#include <stdio.h>
//#include <Dbghelp.h>
#include <shlwapi.h>

void main(void)
{
char *Path = "c:\\windows\\system32\\";

if(PathIsDirectory(Path))
printf("'%s'は正しいディレクトリである。\n",Path);
else
printf("'%s'は正しいディレクトリでない。\n",Path);
}

をボーランドC++5.5でコンパイルすると

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.cpp:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル 'PathIsDirectoryA' が未解決(C:\BORLAND\test.OBJ が参照)

というエラーがでました。
どうしたらいいのでしょうか?

#include <windows.h>
#include <stdio.h>
//#include <Dbghelp.h>
#include <shlwapi.h>

void main(void)
{
char *Path = "c:\\windows\\system32\\";

if(PathIsDirectory(Path))
printf("'%s'は正しいディレクトリである。\n",Path);
else
printf("'%s'は正しいディレクトリでない。\n",Path);
}

をボーランドC++5.5でコンパイルすると

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.cpp:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
...続きを読む

Aベストアンサー

リンク時のエラーのようなので、shlwapi.libをリンクに含まればいいように思います。

Borland C++は持っていないので動作確認できまんので間違いかも・・・
shlwapi.hは、Borland C++に含まれているんですか?

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。

QcharからLPTSTRへの変換方法

リストコントロールにchar型の変数の値を数値として表示させたいのですが、charからLPTSTRへの洗練された変換方法がよくわからないです。

char tempChar;
CString tempString;
tempString.Format("%s", tempChar);
LPTSTR lpsz = new TCHAR[tempString.GetLength()+1];
_tcscpy(lpsz, tempString);

こんなプログラムを考えてみたのですが、汚いような気がします。もっと簡単で洗練された変換方法はないのでしょうか?

Aベストアンサー

wsprintfを使ってはどうでしょうか?

char tmpChar = 100;//表示する数値
TCHAR buf[5];
wsprintf(buf, "%d", tempChar);

QLPCWSTRとchar

質問なのです・・・

現在、私は[Visual Stdio.Net 2005]を使って、C++のプログラミングをしようと思いまして、今日参考書を見てやってみたのですが、

charの配列を使って、文字列を格納しそれを使おうとしたら、LPCWSTRのキャストが必要というエラーがでました。
参考書だと普通に通るらしいのですが・・・Visual Stdio.Net 2003と2005の違いなのでしょか?わかる方教えていただけませんでしょうか??

Aベストアンサー

補足です。
2005デフォルトのUNICODEを変更する方法は
プロジェクト->プロパティ->構成プロパティ->全般 の中にある
文字セットを[Unicode 文字セットを使用する]から[マルチバイト文字セットを使用する]
に変更することで可能です。

QCString から LPCTSTRの型に変換

visual studio 2013 VC++を使用していますが、WINDOWSの関数に渡すためにCString からLPCTSTRに変換する必要があります。実際にどのようにするのかわかりません。
例えば、以下のサンプルは他の質問コーナーの回答をアレンジしたものです

CString str = _T("ABC");
int siz = str.GetLength()+1;
LPCTSTR pszFName = new TCHAR[siz];
_tcscpy_s( pszFName, siz, str );

で変換するのですが
LPCTSTRからwchar_t*へ変換できませんとエラーがでます
_tcscpy_s()は使用できないのでしょうか

Aベストアンサー

>APIはCStdioFile の Open()でファイル名を与えるところ

APIではないようですが……。

http://msdn.microsoft.com/ja-jp/library/ee247566.aspx
ならば、そのままCStringの変数渡せば、よろしく処理してくれると思いますけど。

QVC++から引数付きexeファイルの実行

タイトルの通り、VC++から外部ファイルを実行したいのですがどのような関数を使えばよいのでしょうか?
exeファイルを実行中は親プロセスであるVCのプログラムの方を止めておきたいのです。
出来ればexeファイルは引数付きで実行したいと思いますので、よろしくお願いします。
開発環境はVisualStudio2005です。

Aベストアンサー

#1です。こちらで作成したサンプルです。
呼び出し側
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
intret;
printf("system試験開始\n");
ret = system("C:\\VCSTUDY\\printarg\\Debug\\printarg.exe XXX YYY ZZZ");
if (ret == 0){
printf("system成功\n");
}else{
printf("system失敗\n");
}
return 0;
}
----------------------

呼び出される側(c:\\test.exeに相当)
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
inti;
for (i = 0; i < argc; i++){
printf("ARGV[%d]=%s\n",i,argv[i]);
}
return 0;
}
以下、実行結果です。
コマンドプロンプト画面に下記の文字が出力されます。
------------------------
system試験開始
ARGV[0]=C:\VCSTUDY\printarg\Debug\printarg.exe
ARGV[1]=XXX
ARGV[2]=YYY
ARGV[3]=ZZZ
system成功
Press any key to continue
---------------------------

#1です。こちらで作成したサンプルです。
呼び出し側
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
intret;
printf("system試験開始\n");
ret = system("C:\\VCSTUDY\\printarg\\Debug\\printarg.exe XXX YYY ZZZ");
if (ret == 0){
printf("system成功\n");
}else{
printf("system失敗\n");
}
return 0;
}
----------------------

呼び出される側(c:\\test.exeに相当)
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
inti;
for (i = 0; i < argc; i++){
p...続きを読む

QCStringからchar*への型変換について教えてください。

以前の質問に

int型 → CString型/char型

がありましたが、

CString型をchar*型に変換する方法を
教えていただければありがたいです。

MSDNで「LPCTSTRキャスト」が説明されていましたが、
例が載ってないのでよくわかりませんでした。

よろしくお願いします。

Aベストアンサー

目的にもよりますが一時的にchar配列として使いたいならCString::GetBuffer()が利用できます。
char配列としての利用が終わったらCString::ReleaseBuffer()する必要がありますが。

直接CString内の文字列を扱う必要があるならCString::operator LPCTSTRで文字列ポインタが得られます。
ただし、CStringオブジェクトをいじると無効ポインタなる可能性があるので気をつけてください。

MSDNのMicrosoft Foundation Classリファレンス→CString→クラスメンバで確認してください。


人気Q&Aランキング