親子におすすめの新型プラネタリウムとは?

VC++6.0で作成したプログラムをVC++.NET2005に移植しました。
ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。
ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。
どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。

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

A 回答 (9件)

VC++.NET2005のエディションをお教えください。


Express Editionでは、リソースエディタがない、
ATL, MFCが使えないなどの制限がいくつか存在します。

また、VC2005などでは.NET Frameworkの開発が前提となっており
WIN32APIを使用する場合などについては、Platform SDKを
インストールする必要があります。

この回答への補足

回答ありがとうございます。
VC++.NET2005のエディションは「Professional Edition」です。

現在、開発はクライアントPC(WindowsXP Pro)で行っているのですが
クライアントPCにPlatform SDKをインストールすればよいのでしょうか?
それともサーバーにPlatform SDKをインストールしビルドはサーバーで行わなければならないのでしょうか?

補足日時:2007/06/22 11:46
    • good
    • 0

>『C:\Program Files\Microsoft Visual Studio 8


\VC\atlmfc\include』に変更しビルドしてみましたがダメでした。
どうダメだったのか、教えてください。

Platform SDKはWindows2003Serverの物をXPに入れてビルド可能です。

この回答への補足

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

>>『C:\Program Files\Microsoft Visual Studio 8
>\VC\atlmfc\include』に変更しビルドしてみましたがダメでした。
>どうダメだったのか、教えてください。
これまでと同様に『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。

>Platform SDKはWindows2003Serverの物をXPに入れてビルド可能です。
分かりました。早速試してみます。

補足日時:2007/06/26 13:43
    • good
    • 0

No.4/5です。


私が言った、「VC6のヘッダ」というのはMFCを
使用する場合に検索パス内にあるMFC用のヘッダの事を言っています。
検索パスがVC6のものになっていると、これが常にインクルードされてしまう
可能性があるので、リンクしていないのにご質問のようなエラーが出る可能性があります。(言い方が悪くて申し訳ないです。。。)
上記の場合検索パスその物をVC2005に変更する必要があります。

なお、Platform SDKのほうですが、ビルドする環境に入っていれば
問題ありません。(逆に言えばビルドする可能性のあるマシンには必要です)

この回答への補足

回答ありがとうございます。
>私が言った、「VC6のヘッダ」というのはMFCを使用する場合に検索パス内にあるMFC用のヘッダの事を言っています。検索パスがVC6のものになっていると、
>これが常にインクルードされてしまう可能性があるので、リンクしていないのにご質問のようなエラーが出る可能性があります。
そういうことだったのですね。理解できなくて申し訳ありません。
検索パスとはソリューションのプロパティのどこの部分でしょうか?「リンカ」の「全般」の「追加のライブラリディレクトリ」のところでしょうか?
現在の設定は『C:\Program Files\Microsoft Visual Studio\VC98\ATL\Include』となっています。
これを『C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include』に変更しビルドしてみましたがダメでした。どう設定すればいいのでしょうか?

>なお、Platform SDKのほうですが、ビルドする環境に入っていれば問題ありません。(逆に言えばビルドする可能性のあるマシンには必要です)
Platform SDKをダウンロードする為に検索してみたのですが、Windows2003Server用のものしか見つかりませんでした。
ということはやはりローカルPC(WindowsXP Pro)ではビルド出来ないのですね。

補足日時:2007/06/25 13:47
    • good
    • 0

★回答者 No.1 です。


・拡張子が vcproj のファイルをエディタで開いて回答者 No.4 さんのアドバイスにある
>単純にリンクライブラリのところから"42"という文字列を"80"に変更してください。
 を行いましたか?
 拡張子が vcproj のファイルは『プロジェクト名.vcproj』というファイル名ですよ。
 このファイルの MFC『42』をMFC『80』に編集するわけです。
>この方法が分かりません。
 ↑
 という事は、まだ vcproj のファイルは編集していないのですよね。
 vcproj のファイル内を grep などで検索すれば見つかるはずですが…。
・以上。

この回答への補足

回答ありがとうございます。
『プロジェクト名.vcproj』のファイル内は検索しましたが「mfc42.lib」は見つかりませんでした。
ソリューションのプロパティを見ても『プロジェクト名.vcproj』のファイルをテキストエディタで直接開いても「mfc42.lib」が見つからないので「mfc80.lib」に変更ができずに困っています。
またgrepで検索しても『.lib』と『.obj』ファイルにしか記述が見つかりません。

補足日時:2007/06/25 09:34
    • good
    • 0

この状況が再現できる 最低の手順ってわかりませんか?



VC6側のプロジェクトの作成方法
VC2005側でのプロジェクトの取り込み方、または作成方法

-----

VC6側でMFCアプリ、共有DLL使用

ここで行った手順 ...

VC2005でVC6で作成した dswファイルを指定して開く
変換ウィザードが起動して VC2005noソリューションに変換
    • good
    • 0

>ソリューションのプロパティのどこを見ても「mfc42d.lib」という記述が見つからない。


インクルードパスにVC6 の MFC をインクルードパスに指定して
いませんか?
もしそうなら、VC6のヘッダにリンクの記述があるかもしれません。
VC2005のMFCのインクルードパスに変更してみてください。

この回答への補足

何度も回答ありがとうございます。
ご指摘に従いVC6のヘッダを見てみたのですが記述は見つかりませんでした。
またgrepで検索したのですが『.lib』と『.obj』ファイルにしか記述が見つかりません。
私の見てるところが違っているのでしょうか?

補足日時:2007/06/22 18:07
    • good
    • 0

エディションの問題ではなさそうですね。



VC2005にMFC42が単純に未対応のようですので、
VS2005ではMFC8.0のmfc80d.libにしてください。
単純にリンクライブラリのところから"42"という文字列を"80"に変更してください。これはデバッグ用なので、リリース用も忘れずに修正してください。

プロジェクトの中(ソリューションのツリーの中)に明示的にmfc42d.libを登録している場合はvcのプロジェクトは"プロジェク名.vcproj"で、単なるテキストファイルなので、その中も上記の変更を入れてください。

ライブラリをリンクするプリプロセッサがVC6のヘッダファイルにある
場合はLIBC.lib を特定のライブラリを無視に指定しビルドすれば、
いけると思います。(この方法はあまりお勧めできないので、
上記の2つ目までを新規プロジェクトで作る事をお勧めしますが。。。)

この回答への補足

回答ありがとうございます。
ご指摘のとおりVS2005ではMFC8.0のmfc80d.libを使用するというのは分かったのですが、
"単純にリンクライブラリのところから"42"という文字列を"80"に変更してください。"
この方法が分かりません。
ソリューションのプロパティのどこを見ても「mfc42d.lib」という記述が見つからないのです。もちろんプログラム内で明示的に記述しているところもありません。

補足日時:2007/06/22 13:48
    • good
    • 0

VC2005でVC6から変換したプロジェクトを開いて


メニューの プロジェクト > プロパティ
表示されたダイアログの 左ペイン(Tree)の中から
構成のプロパティ > リンカ > 入力の追加の依存ファイルの項目に
『mfc42.lib』が記述されていませんか?

この回答への補足

回答ありがとうございます。
ご指摘の箇所にも他のプロパティにも『mfc42.lib』は記述してありません。

補足日時:2007/06/22 13:08
    • good
    • 0

★アドバイス


・ソリューションの構造プロパティ→全般に『MFC の使用』という項目があります。
 ここの設定で
 (1)標準 Windows ライブラリを使用する
 (2)スタティック ライブラリで MFC を使用する
 (3)共有 DLL で MFC を使用する
 が選択できます。
・なお、当方は VC++.NET 2003 ですけど。参考にどうぞ。
・以上。

この回答への補足

アドバイスありがとうございます。
VC++.NET2005でも
 (1)標準 Windows ライブラリを使用する
 (2)スタティック ライブラリで MFC を使用する
 (3)共有 DLL で MFC を使用する
が選択できます。
VC++6.0で作成したプログラム、VC++.NET2005へ移植したプログラムとも(3)を設定しています。
VC++6.0では「mfc42.lib」を使用していてVC++.NET2005では「mfc80.lib」を使用しているというのは分かったのですが
移植した場合、「mfc42.lib」の参照定義を「mfc80.lib」へ変更すればいいのか、またどう変更すればいいのか分かりません。

補足日時:2007/06/22 10:52
    • good
    • 0

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

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) {
// ここに処理を書く
}
という関数が必要なようです。

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→クラスメンバで確認してください。

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

Qmfc42.dllファイルってなんですか?

こんにちは。
最近、プログラムの勉強をしている物ですが、例えばVBであるシステムを開発して、SetUpを作った際に、色々なプラットフォームで検証するのですが、mfc42.dllというファイルが絡んだエラーが良く出ます。

そもそも「mfc42.dll」とは何でしょうか?
OSインストール時に最初から入っているものなのでしょうか?

dllファイルとはダイナミックリンクライブラリの事で、OSが色んな時に使用する共通の関数が詰まっている、VBでいう標準モジュールのようなものの事ですよね?(合ってますか(^^;)?)

mfc42.dllがそうなら、どういうときに使用されるのでしょうか?
また、Aというソフトをインストールした後で、Bというソフトをインストールして、互いのmfc42.dllの更新日時(バージョン?)が違う場合、Bをインストールする事によってAが動かなくなる・・・というのもありえるのでしょうか??
だとしたらとても怖い事ですよね!?
でもSetUp作成ソフトやVB標準のディストリビュージョンでSetUp.exeをつくると勝手にmfc42.dllが紐付かれてしまう場合が多々あります。
これを回避する方法はあるのでしょうか?

どなたかご教授下さい。

こんにちは。
最近、プログラムの勉強をしている物ですが、例えばVBであるシステムを開発して、SetUpを作った際に、色々なプラットフォームで検証するのですが、mfc42.dllというファイルが絡んだエラーが良く出ます。

そもそも「mfc42.dll」とは何でしょうか?
OSインストール時に最初から入っているものなのでしょうか?

dllファイルとはダイナミックリンクライブラリの事で、OSが色んな時に使用する共通の関数が詰まっている、VBでいう標準モジュールのようなものの事ですよね?(合ってますか(^^;...続きを読む

Aベストアンサー

Visual C++ 4.2~6.0 で作成したランタイムライブラリプログラムの実行に必要なDLL で、最新版をダウンロードしてエラーが直る場合もあるようです。

参考URL:http://www.vector.co.jp/soft/win95/util/se040499.html

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() を使えとか書いてあるけど。

Q「fatal error C1189」を回避するには?

かなりの初心者でございますm(__)m。

先日のことですが「Visual Studio .net 2003」から「Visual Studio 2005」へアップグレード(というよりは切り替え)を行いました。

すると2003では問題なくビルド出来たものが2005では「fatal error C1189」が出てしまい困っております。

エラーメッセージ
fatal error C1189: #error : Need to include strsafe.h after tchar.h

確かにtchar.hはインクルードしているので、これを文字通りに解釈して後にstrsafe.hをインクルードしたのですが、メッセージは変わらず(--;)。

どの辺りをチェックしたら良いか教えていただけると助かります。

OSはXP、VisualStudioのSP1はあてていません(エラーでSP1がインストール出来ないため)。

Aベストアンサー

C1189 はコンパイル指令 #error によるものらしいので
Fatal Error C1189 (C++)
http://msdn2.microsoft.com/en-us/library/y0tzt8e0(VS.80).aspx

#error Need to include strsafe.h after tchar.h

というのを検索してみると、
vc/include/tchar.h に

#ifdef _STRSAFE_H_INCLUDED_
#error Need to include strsafe.h after tchar.h
#endif

というのが見つかりました。

tchar.h, strsafe.hのほかにどんなファイルを includeしているか
わかりませんが、間接的にでもどこかから strsafe.h をすでに
読みこんでしまっているということはありませんか?
そうでもなければこのシンボルが定義されることはないように思うのですが。

ざっと見たところ、vc8/include と vc8/PlatformSDK/include には
strsafe を独自に取り込むようになっているファイルはないですね。
#まあ当然か

C1189 はコンパイル指令 #error によるものらしいので
Fatal Error C1189 (C++)
http://msdn2.microsoft.com/en-us/library/y0tzt8e0(VS.80).aspx

#error Need to include strsafe.h after tchar.h

というのを検索してみると、
vc/include/tchar.h に

#ifdef _STRSAFE_H_INCLUDED_
#error Need to include strsafe.h after tchar.h
#endif

というのが見つかりました。

tchar.h, strsafe.hのほかにどんなファイルを includeしているか
わかりませんが、間接的にでもどこかから strsafe.h をす...続きを読む

QLPCWSTRとchar

質問なのです・・・

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

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

Aベストアンサー

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

Qfatal error LNK1120: 外部参照 1 が未解決です

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
  char tel[20];
  char address[20];
};

void message( void );
void input( FILE *fp, int cnt , struct meibo *a, int *end );

void main( void )
{
  struct meibo a[20];
  FILE *fp;
  int cnt, end;

  if( (fp=fopen( "meibo.dat", "w" ) ) == NULL ){
    printf( "Can not open the meibo.dat.\n" );
    exit( 1 );
  }

  message();

  fprintf( fp, "番号, 名前, TEL, 住所\n" );
  fflush( fp );

  cnt = 0;
  end = 0;
  while( end == 0 ){
    input( fp, cnt, &a[cnt], &end );
    cnt++;
    fflush( fp );
    if( cnt == 20 ){
      printf( "人数が一杯です.終了します.\n" );
      end = 1;
    }
  }
  fclose( fp );
}

void message( void )
{
  printf( "名前, TEL, 住所, endを入力してください.\n" );
  printf( "継続の時はend=0," );
  printf( "中止の時は,end=1と入力してください.\n" );
}

void input( FILE *fp, int cnt, struct meibo *a, int *end )
{
  printf( "名前-->" );
  scanf( "%s", a->name );
  printf( "TEL -->" );
  scanf( "%s", a->tel );
  printf( "住所-->" );
  scanf( "%s", a->address );
  printf( "Exit? Continue:0 Exit:1 -->" );
  scanf( "%d", end );
  printf( "\n" );
  fprintf( fp, "%2d, %s, %s, %s\n",
    cnt+1, a->name, a->tel, a->address );
}

またわからないことが・・・
教えて下さい。
以下をVC++2005でコンパイルすると、

MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
C:\Documents and Settings\tomato\My Documents\Visual Studio 2005\Projects\a\Debug\a.exe : fatal error LNK1120: 外部参照 1 が未解決です。

と警告がでて通りません。
何のことでしょうか。

#include<stdio.h>
#include<process.h>

struct meibo{
  char name[20];
...続きを読む

Aベストアンサー

http://www.a.math.ryukoku.ac.jp/~hig/course/compsci2_2005/man/faq.html
にある現象と同じではないでしょうか、一度お試しください。

QMFCアプリのコマンドラインでパラメータを使用した起動方法

VisualC++6.0を用いて、ダイアログの2つあるプログラムを
作ったのですが、
2つのダイアログを例えばAさん用、Bさん用として使い分けようと思ったときに
メニューでダイアログをそれぞれ指定して、実行しようと思ったのですが、
Aさん用を親ダイアログにしてしまうと、Bさんは起動時ごとにメニューで
切り替えなければいけなくなりますよね。
それで、切り替えをしなくても良いようにと思って、
コマンドラインからパラメータで「/A」「/B」などとしたときに、Aさん用
Bさん用として、起動させたいのですが、
コマンドラインのパラメータをどこで受け取って処理しているのか
分らないのですが、教えては頂けないでしょうか?
よろしくお願い致します。

Aベストアンサー

補足です。
WinAPPクラスInitInstance関数のなかで、
>CCommandLineInfo cmdInfo;
>ParseCommandLine(cmdInfo);
の記述があればそのあとでパラメータの解析を行います。>>m_lpCmdLineです。

もし、作成中のプロジェクトにこの記述がない
(InitInstance関数がない等の)場合は、
CCommandLineInfoクラスの継承クラスをつくって
仮想関数
virtual void CCommandLineInfo::ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast)
を実装しましょう。

たとえば・・・

CWinApp theApp;
using namespace std;


// コマンドライン解析クラス
class CMyClass : public CCommandLineInfo{
public:
virtual void ParseParam(LPCTSTR, BOOL, BOOL);
};

//コマンドラインの個々のパラメータを解析および解釈するために、フレームワークが呼び出します
void CMyClass::ParseParam( LPCTSTR lpszParam, BOOL bFlag, BOOL bLast )
{
CString strTemp = _T(lpszParam); // パラメータ、またはフラグ
return;
}

void
main()
{
CMyClass info;
theApp.ParseCommandLine(info);
}

では^^。

補足です。
WinAPPクラスInitInstance関数のなかで、
>CCommandLineInfo cmdInfo;
>ParseCommandLine(cmdInfo);
の記述があればそのあとでパラメータの解析を行います。>>m_lpCmdLineです。

もし、作成中のプロジェクトにこの記述がない
(InitInstance関数がない等の)場合は、
CCommandLineInfoクラスの継承クラスをつくって
仮想関数
virtual void CCommandLineInfo::ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast)
を実装しましょう。

たとえば・・・

CWinApp theApp;
using name...続きを読む

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...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング