VB6で、FreeFile を使ってファイル番号を取得していましたが、
C++ では、どのように記述したらいいのでしょうか?
また、
if (file.Open(strFile, CFile::modeWrite)){ ・・・
と記述すると、
file.Open の 「.」の部分で、下記のようなエラーになってしまいます。
「オーバーロードされた関数のインスタンスが引数リストと一致しません」
これは、どういうことなのでしょうか?
C++ MFC は初めてなので、全くわからず大変困ってます。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
VB6からC++/MFCへの作り変えですか。プログラム処理内容にもよりますが、それは大変ですね。
質問内容に対する回答ではありませんが・・・
昔、VB.NETが出た時にVB6からの変換や書き換えを試みましたが私は挫折しました。(笑)
コンバータというのが有るのですが、ほとんど使い物にならなかったのと、見た目だけでも同じにしようとしましたがそれすらできなかったためです。業者でそういうのを請け負ってるところもあるみたいです(いくら掛かるのかわかりませんが)。
なので未だにVB6を使い続けています。(Windows10でもまだ動くみたいですが、そろそろなんとかしないとは思ってるのですが・・・)
今、書き換えるとしたらC#で一から書き直すと思います。そっくりそのまま書き換えるのではなく新しい考え方や操作内容で一新しますね。(かなり規模の大きなソフトなのではじめの一歩がなかなか踏み出せないですが・・・)
個人的な好みでもあるのですが、MFCは私は基本的に好きではありません。ライブラリがでかすぎるのがその一つです。その代替策としてWin32++というライブラリがあります。MFCとほぼ同じ名前のクラスが用意されていて、全てヘッダファイルだけで構築されています(なので軽量)。サンプルも豊富についてくるのでちょっとしたプログラムなら軽量なWindowsアプリを簡単に作ることが可能です。
まあ、でも豊富なコントロールを使いたいのであればC#でしょうね。
投稿2017/05/23 08:33
総合スコア3579
0
ベストアンサー
こんにちは。
FreeFileをはじめとする種のファイルI/O機能は、VisualBasic(BASIC言語古来から)の機能であって、残念ながら MFC にずばりの機能はない(はず)です。
お示しの
if (file.Open(strFile, CFile::modeWrite)){ ・・・
の変数 file とstrFileをどのようにおつくりになっているかご提示いただければ、こちらの件もご回答できるかもしれません。
http://www.g-ishihara.com/mfc_fi_01.htm
CFile file;
LPCTSTR strFile = _T("C:\fileTest.dat");
などのように作られたものでしょうか?
(コメントをいただいて)
「オーバーロードされた関数のインスタンスが引数リスト...」ですが、引数の「型」が異なるためと思われます。
C言語(こと Windowsコンポーネント)の文字列の管理体系(型)には、複数種類あります。
そして異なる型にするには、変換が必要です。
CFile.Open 関数の第一引数は、LPCTSTR型を要求しています。
ただLPCTSTR型は、C言語特有の処理(バッファ確保、文字列結合の作法)が必要です。
MFCには、CString 型と呼ばれる、std::string型とLPCTSTR型の両方の利点をもつ文字列クラス(型)が用意されていますので、こちらを使われると便利です。
(詳しくはお調べいただくか、別の質問をたてていただければと思います)
std::string型の変数からCString型の変数に変換して、CFile::Openを呼び出す場合は
http://faithandbrave.hateblo.jp/entry/20070708/1183907088
C
1CString filePath = strFile.c_str(); 2CFile file; 3 4file.Open(filePath, ...ほかの引数...); 5
のようにします。
順番が逆になってしまいました。
BASIC(VisualBasic)では、ファイルの操作対象としてFreeFileで得られる整数値で識別をしていました。MFCのCFileクラス(型)では、CFile型で作成した変数そのものが、この識別番号を内包しています。
C
1CFile file; 2file.Open(_T("C:\\DIR\\TEST.TXT"), ...);
としたとき、file変数自体に C:\DIR\TEST.TXT ファイルを操作する識別ができています。
あとは
C
1file.Write("ABCD", 5); 2file.Close();
のように、変数自体のメソッドを呼び出せば、そのファイルを対象に操作がなされます。
MFCをお使いになられる理由がおありなのだと思いますが、そうでもないようでしたらVBからの移植には .NET Framework (VB.NET) をおすすめしたいです。VisualBasicを引き継いだライブラリも存在します(FreeFileもあります)し、現在の著名度と将来性ははるかに高いです。
※別件のエラーハンドリングに関しては、別の質問をたてられることをお勧めします。
投稿2017/05/23 06:37
編集2017/05/23 08:09総合スコア728
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/23 07:35
2017/05/23 07:38
2017/05/23 08:16 編集
2017/05/23 08:30 編集
2017/05/23 09:29
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。