質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

2回答

4007閲覧

VB6をC++ MFCに書き換えています。Visual Studio2013での記述が不明です。

m24yama

総合スコア38

MFC

MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

1クリップ

投稿2017/05/23 05:57

VB6で、FreeFile を使ってファイル番号を取得していましたが、
C++ では、どのように記述したらいいのでしょうか?

また、
if (file.Open(strFile, CFile::modeWrite)){ ・・・
と記述すると、
file.Open の 「.」の部分で、下記のようなエラーになってしまいます。
「オーバーロードされた関数のインスタンスが引数リストと一致しません」
これは、どういうことなのでしょうか?
C++ MFC は初めてなので、全くわからず大変困ってます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

VB6からC++/MFCへの作り変えですか。プログラム処理内容にもよりますが、それは大変ですね。

質問内容に対する回答ではありませんが・・・

昔、VB.NETが出た時にVB6からの変換や書き換えを試みましたが私は挫折しました。(笑)

コンバータというのが有るのですが、ほとんど使い物にならなかったのと、見た目だけでも同じにしようとしましたがそれすらできなかったためです。業者でそういうのを請け負ってるところもあるみたいです(いくら掛かるのかわかりませんが)。

なので未だにVB6を使い続けています。(Windows10でもまだ動くみたいですが、そろそろなんとかしないとは思ってるのですが・・・)

今、書き換えるとしたらC#で一から書き直すと思います。そっくりそのまま書き換えるのではなく新しい考え方や操作内容で一新しますね。(かなり規模の大きなソフトなのではじめの一歩がなかなか踏み出せないですが・・・)

個人的な好みでもあるのですが、MFCは私は基本的に好きではありません。ライブラリがでかすぎるのがその一つです。その代替策としてWin32++というライブラリがあります。MFCとほぼ同じ名前のクラスが用意されていて、全てヘッダファイルだけで構築されています(なので軽量)。サンプルも豊富についてくるのでちょっとしたプログラムなら軽量なWindowsアプリを簡単に作ることが可能です。

まあ、でも豊富なコントロールを使いたいのであればC#でしょうね。

投稿2017/05/23 08:33

PineMatsu

総合スコア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();

のように、変数自体のメソッドを呼び出せば、そのファイルを対象に操作がなされます。

CFileのメンバー(一部誤訳あり)


MFCをお使いになられる理由がおありなのだと思いますが、そうでもないようでしたらVBからの移植には .NET Framework (VB.NET) をおすすめしたいです。VisualBasicを引き継いだライブラリも存在します(FreeFileもあります)し、現在の著名度と将来性ははるかに高いです。

※別件のエラーハンドリングに関しては、別の質問をたてられることをお勧めします。

投稿2017/05/23 06:37

編集2017/05/23 08:09
hsk

総合スコア728

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m24yama

2017/05/23 07:31

こんにちは。 回答ありがとうございます。 file とstrFile についてですが、 CFile file; std::string strFile; ・・・ strFile = g_strLogPath + g_strLogName; としております。 お忙しいところ恐れ入りますが、どうかよろしくお願いしたします。 また、FreeFile につきましては、自作するしかないということでしょうか。
m24yama

2017/05/23 07:35

別件ではありますが、VB6では、 On Error Resume Next という記述があるのですが、これについでも、C++ MFC では どのようにコーディングしたらいいのか不明です。 何か、ヒントでもございましたら、ご教授お願い致します。
m24yama

2017/05/23 07:38

申し訳ありませんが、もう一つお聞きさせて下さい。 VB6 で Variant varNow という宣言がありますが、 これは、C++ MFC ではどのようになるのでしょうか? 色々とサイトを検索してみたものの、コレというものが見当たりません。
hsk

2017/05/23 08:30 編集

余談になりますが C言語の文字列変換に関する情報がまとまっていましたので、ご紹介します。 https://codezine.jp/article/detail/25 これらとは別で、 std::... は「標準C++ライブラリ」と呼ばれるC++言語の標準規格で、std::stringもこちらで提供されているものです(Wikipediaなどにも情報があります)
m24yama

2017/05/23 09:29

色々とご丁寧な回答を、本当にありがとうございました。 参考にさせて頂き、何とか作ってみます。 感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問