VS2010 バイナリデータ 初心者

このQ&Aのポイント
  • VBで処理を作成し、バイナリデータを編集する処理を追加する予定。
  • VC++のDLL化によりデータのコンバートが可能になり、新しいプロジェクトを作成。
  • VC++のCFileを使用してバイナリデータをOPENする際にエラーが発生する。分かりやすい説明などのサイトを教えて欲しい。
回答を見る
  • ベストアンサー

VS2010 バイナリデータ 初心者

VBで処理を作成していたのですが、バイナリデータを編集する処理を追加する事になりました。 VC++なら、上手くデータをコンバート出来たのでVC++をDLL化して作成中です(もともとは6.0のVC++のプログラムです)。 新しくプロジェクト(VC++)を作成(WIN32プロジェクト)しVBから作成したDLLを呼び出す所までは上手く出来たのですが、肝心のバイナリデータをOPENする所が上手く行きません。 VC++の方でCFileを使用する際に#include <afx.h>でエラーになってしまいます。 先ほども投稿したのですが、結果惨敗だったので、再度質問するしだいですw バイナリのファイル:kalrt.bat #include <afx.h> wchar_t* pFileName; pFileName = L"kalrt.bat"; CFile fr;  ← エラー char buff[1000]; if (!fr.Open(pFileName, CFile::modeRead,NULL )){   while(fr.Read(buff,0x800)){ // ---処理--- } CFileを使用する場合は、MFCアプリケーションを使うとの内容を頂けたのですが、どのように構成したら良いか分かりません。いろいろとサイトを調べても見つけられませんでした。 分かりやすい説明があるサイトなどがありましたら、教えて下さい。 急いでいるので説明が上手く出来ていないので、説明が足りない場合は補足に記載します。 よろしくお願いします。

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

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

DLLファイルだったのですね。 VisualStudio2010で、メニューの[ファイル]-[新規作成]-[プロジェクト]を選択して、[Visual C++]-[MFC]-[MFC DLL]を選んで新規プロジェクトを作成しましょう。 あとは、 ・VC6のコードを新しいプロジェクトに追加する または ・新しいプロジェクトの設定やインクルードファイルの指定と同じになるように、VC6から移行したプロジェクトを変更する のどちらか簡単な方を行えばいいんじゃないでしょうか。

r32yokoyok
質問者

お礼

回答ありがとうございます。 大変助かりました。 もう少し調べてみます。 ありがとうございました。

r32yokoyok
質問者

補足

回答ありがとうございます。 説明が足りなくてすみませんでした。 MFC DLLを作成してコンパイルしたのですが、以下のようなエラーが出ましたが問題ありませんか?w IntelliSense: #error ディレクティブ: Please use the /MD switch for _AFXDLL builds c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxver_.h 81 3

その他の回答 (2)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

VC++2010はProfessional以上ですか? Express EditionではMFCは使えませんが。

r32yokoyok
質問者

お礼

回答ありがとうございます。 VC++2010はProfessional以上ですか? VS2010はProfessionalになります。 MFCは使えました。 参考にさせて頂きます。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

作成しなおしている VBってどの版なのでしょう? VB2010とかなのでしょうか そうなると MFCでってより VB2010の中でやってしまったほうが簡単かもしれないですよ 単なる MFCDLLですと VB側でDeclare宣言を追加しないと使えなかったような気がします データの受け渡しなどのマーシャリングとかも必要になってしまう場合があります 単機能だけのDLLでMFCを使うのですとそのためだけに必要なMFC関連のDLLもインストールしないといけないし あまりメリットがあるとは思えません 今ある VC6のDLLをそのまま流用は出来なかったのでしょうか 機能改善が必要とか ・・・

r32yokoyok
質問者

お礼

回答ありがとうございます。 一応タイトルにVS2010(VisualStudio2010の略) バイナリデータ 初心者と記載してあります。分かりづらかったですね。 ちなみにDllを呼び出すようにDeclare宣言してます。呼び出しは問題ありません。受け渡しも問題ありません。Dll側でバイナリデータを読む記述()CFileが分からなかったので、上記を踏まえ参考にさせて頂きます。

r32yokoyok
質問者

補足

VC6はもともとEXEで動いていたので、DLLは存在してはいません。 今回のようなVBからVCを呼び出す仕様になったのでDLL化するようになりました。

関連するQ&A

  • vs2010 VC++ Open 記述方法

    VS2010のVC++でバイナリデータをOpenしたいのですが、まったくコンパイルが通りません。 ヘルプで見ながら同じように作っているつもりですが、出来ませんでした。 エラーは・・・CFile::Openのインスタンスが引数リストと一致しませんと出てしまいます。 記述はこんな感じです! #include <afx.h> CFile fr; CFileException e; char* pFileName = "Kaltr.bat"; if(!fr.Open( pFileName, CFile::modeRead | CFile::typeBinary, &e)){   -/-/-/ 処理 -/-/-/ } 参考になるサイトがあったら教えて下さい。 よろしくお願いします。

  • バイナリファイル

    VBでバイナリファイルを読み込み、処理しようとしているのですが、VBではバイナリファイルを扱えないのでしょうか? APIしかないのでしょうか? 例) バイナリデータ:10(16進) 取扱データ:16(10進) 上記のことをしたいのですが、うまく扱えません。 CDecも"&H10"なら16として扱えるのですが、バイナリデータをそのまま数値化することができません。 何か良い方法があれば教えて下さい。

  • VisualStudio2010 DLL作成方法

    VisualStudio2010を使っています(初心者)。 VBで作成していたのですが、一部VC++を使わなければいけなくなりました。VC++はDLLで作成して、VBの方でDLLを参照して処理を行いたいと考えています。 そこで試しに作成したVC++で作成したDLLをVBで参照しようとしたらERRORになってしまい上手にできませんでした。※ERRORの内容までは詳しく覚えてません。VC++のDLLを作成~VBのDLLの参照までを説明しているサイトなどありましたら教えて下さい。 よろしくお願いします。

  • windows bat バイナリデータ処理

    <CSVデータの内容> 12345,XXXX,1192 CSVデータ 12345 の部分のみ windows batでバイナリデータに変換処理をしたいのですが、 どうしたらよいでしょうか?

  • バイナリデータ受信時のデータ順

    Winsockを用いてバイナリデータの送受信を行うプログラムを作成しました。 サイズは約4MBです。 データはすべて送受信できたようなのですが、バイナリエディタで確認したところ受信データがばらばらに入っているようなのです。完全にばらばらなのか、それとも塊ごとに後ろから順に入ってるのかまでは確認してません 受信方法としては BYTE buff; size_t fsize; recv( Recv, (char *)buff, sizeof(size_t), 0 ); memmove( &fsize, buff, sizeof(size_t) ); size_t Total = 0; BYTE *SubBuff = new BYTE[fsize*2]; BYTE *Buff = new BYTE[fsize]; while( Total < fsize ) { int n = recv(); memmove( &Buff[Total], SubBuff, n ); Total += n; } としています。 どのようにすれば、正しい受信ができるのかわかりません。教えていただけないでしょうか?

  • DLLでの例外処理(CException)

    Windows2000上でVC++6.0を使用し、DLLを作成しています。 (AppWizardのWin32DLL/単純なDLLプロジェクトより作成) その中のファイルアクセス時の例外処理で例外が起こっていて、 原因がわからず、困っています。 どなたかおわかりになれば助けてください。 CFileException ex; m_fp = new CStdioFile; if ( ! m_fp->Open( (LPCTSTR)m_csFileName,  //ファイルオープン   CFile::modeWrite    |        // 読み書き両用   CFile::modeNoTruncate |         // 切り捨てなし   CFile::modeCreate   |          // 新規作成(切り捨てなし)   CFile::typeText    |          // テキスト モード   CFile::shareExclusive ,         // 排他モード   &ex ) ) {                 // 例外     ex.ReportError( MB_OK | MB_ICONEXCLAMATION, 0 ); //エラーメッセージダイアログ表示     delete m_fp;     m_fp = NULL;     return FALSE; } の、CExceptionクラスのReportError関数の中でアサーションエラーが起きているようです。 深いところまで追っていくと、AfxLoadString(nIDS, szFormat)で、 このIDのメッセージリソースが見つからず、メッセージが空のため、アサートで引っかかっている模様。 そもそも、DLLでAfx~系の関数って使えるのでしょうか? 使えないのであれば、例外時のエラーメッセージをとってくる方法が他にあるでしょうか? 申し訳ありませんが、よろしくお願いいたします。

  • VS2008でVBとC++を一つのプロジェクトにすることができますか?

    VB6.0からの移行組です。現在VB6.0をメインにしてVC++6.0で作ったdllをVBで呼んでいます。VBでデバッグ中にC++で作ったdll内にバグがあった場合にどこにバグがあるかわからず不便です。 VS2008ではVBとVC++を一つのプロジェクトにまとめる事ができますか? そうすればデバッグ中にVBとVC++のコードを一連の流れで動かしてやれば、どこがおかしいのか分かりやすくて便利なんですが。 (C++がコンパイル型だから無理かな・・・) 素人な質問ですみませんがよろしくお願いします。

  • バイナリデータの取り方

    VB6を使用して、バイナリファイルをバイナリデータとして文字列にとりたいのですが、全角文字が絡んだ時の処理がうまくいきません。 バイナリファイルをString型の変数に丸ごと読み込んで、後は何バイトから何バイト目を抜き取り数値に変換…という処理をしようとしています。 本来は、バイナリでファイルをオープンして、Getコマンドで取得するのが手っ取り早いのですが、ファイルアクセス回数を減らすため、このような面倒な方法をとっております。 そこで仮に、 dim test as string dim i as integer test = "aあ" & chr(1) & "0 " For i = 1 to 6 Debug.Print Asc(Strconv( _ MidB(Strconv(test,vbFromUnicode),i,1), _ vbUnicode)) Next のようなソースを作ってみました。(本来は文字列は数100KByte…) しかしながら、この方法ですと上の例では2Byte目、つまり「あ」の文字の1Byte目が「&H00」になってしまいます。その次は「&HA0」、他の箇所も問題ないのですが… おそらくは根本的に違う方法で解決すべきではないかと思うのですがその方法がわかりません。 なお、この格納データはバイナリデータなので、意図的に全角文字にしていくてもその値によって(偶然)全角文字になったり制御文字になったりしますので前もって全角文字に対する処理は難しいと考えてます。 質問の仕方が良くなく、質問の内容がなかなかご理解いただけないとは思いますが、ご存知の方、ご経験者の方、ご教授お願いいたします。

  • VB6のプログラムをVS2017で開くには?

    VB6や、VC++で作成されたプログラムを VisualStduio2017へ移行することになりました。 VisualStduio2017で、VB6やVC++のプロジェクトを開いて コンパイルエラーになる部分を手修正していこうと思ったのですが、 そもそも開くことができません。 新たにプロジェクトを作成して、ソースコピーをして貼り付けし、 コンパイルエラーになる部分を手修正するようなやり方ぐらいしかないでしょうか?

  • VB6でバイナリ互換でDLL作成するには?

    VB6.0にてActiveX DLLで開発をしたいのですが、 プロジェクトのプロパティ.コンポーネントにてバイナリ互換を選択すると バージョン互換コンポーネントを設定できません。というエラーメッセージが出て、 DLLを作成できません。 プロジェクトはフォーム1画面、標準モジュール複数、クラスモジュールで構成されています。 DLL作成手順のアドバイスをお願いします。 もう1点、 ある程度、開発できたら単体テストを行います。 その際は現場で用意されているテスト起動画面を使用するように言われたのですが、 この方法だと自分の担当画面に修正を加えるたびに下記1~3の作業を行う 必要があると思うのですが、もっとスマートな方法はないのでしょうか? 1.修正したプロジェクトを保存してdllを作成する。 2.作成したdllを所定の場所(現場で指示された場所)に格納 3.テスト起動画面からそのdllを指定して単体テスト

専門家に質問してみよう