• ベストアンサー

【VC++2005(CLR)】C++/CLIへのUNLHA32の導入、及び、lzh圧縮解凍の実行の仕方について

いつもお世話になっています。 VC++初心者です。 以前の質問と同様になってしまいますが、 再度質問させて頂きたいと思います。 やりたいことは、VC++2005(CLR)で ボタンを押しすと、lzh圧縮、解凍するようにさせたいです。 ↓こんなイメージです。 private: System::Void button_Form1_Click(System::Object^ sender, System::EventArgs^ e) {   String^ strFileName = "aaa.txt"//ファイル名   String^ strCompressFileName = "aaa.lzh"//圧縮されたファイル名   //ここにlzh解凍(べつのボタンでlzh圧縮)をしたい } ※先頭行に全角スペースを使用しています。 現在、他の方からアドバイスを頂いて、以下の状態まで来ました。 ・UNLHA32をダウンロードしました。  (格納先:C:\Program Files\ArchiverDll\UNLHA32) ・Form1.h内のボタンに実装するので、以下のコードを  Form1.h内の「#pragma once」の下に追加しました。 #include "C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.H" ・LIBの追加ができていません。  LIBの追加は、  ・「ソリューションエクスプローラ」のプロジェクト名を右クリック    し、「プロパティ」を選択。  ・「構成プロパティ」-「リンカ」-「入力」をクリック。  ・「追加の依存ファイル」に「C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.LIB」    を記入。  この時点で、エラーが発生しています。 (UNLHA32.LIBは上記の同フォルダにあります。) このエラーの対処、及び、これからすべきことを ご指導頂けませんでしょうか。 お手数ですが、よろしくお願い致します。

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

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

 こんにちは。補足頂きました。  ・「ソリューションエクスプローラ」のプロジェクト名を右クリックし、「プロパティ」を選択。  ・「構成プロパティ」-「リンカ」-「入力」をクリック。  ・「追加の依存ファイル」に「C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.LIB」  の手順で追加した「C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.LIB」のパスを「追加の依存ファイル」から削除して見て下さい(初期状態に戻すと言う事)。  その後、「ソリューションのリビルド」で出来ませんか。

yuki7091
質問者

お礼

一度、本件の質問を閉じさせていただきます。 ご対応、ありがとうございました。

yuki7091
質問者

補足

ご回答、ありがとうございます。 毎回のご教授、本当にありがとうございます。 ビルドできました! UNLHA32の導入がこんなに大変だったとは思いませんでした。 しかも、導入の仕方の説明がされているサイトもありませんし、、、 (もしかしたらテキストに書いてあったのかも、、、) しなしながら、やっとスタート地点に立てた感じです。 これ以降は、C#などを参照して、目的であるファイル圧縮、解凍の コードを記述していけば宜しいのでしょうか。

その他の回答 (6)

回答No.6

 こんばんは。  stdafx.hの中に以下を追加。 // TODO: プログラムに必要な追加ヘッダーをここで参照してください。 #include <windows.h> #include <stdio.h> // sprintf()のために必要 #include <time.h> // UNLHA32.Hの前に必要 #include"C:\Program Files\ArchiverDll\UNLHA32\UNLHA32.H" #pragma comment(lib, "C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.LIB")  その後「ソリューションのリビルド」を実行して出来ませんか。

yuki7091
質問者

補足

ご回答、ありがとうございます。 Form1.hに追加した下記のincludeを削除し、 #include <windows> #include <iostream> #include <stdio.h> // sprintf()のために必要 #include <string.h> #include <time.h> // UNLHA32.Hの前に必要 #include "C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.H" stdafx.hにご指摘いただいたとおり、下記をincludeしました。 #include <windows.h> #include <stdio.h> // sprintf()のために必要 #include <time.h> // UNLHA32.Hの前に必要 #include"C:\Program Files\ArchiverDll\UNLHA32\UNLHA32.H" #pragma comment(lib, "C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.LIB") その後、「ソリューションのリビルド」をすると、 エラーが一件がでてきました。 >LINK : fatal error LNK1104: ファイル 'C:\Program Files\ArchiverDll\UNLHA32\UNLHA32.LIB >/ASSEMBLYRESOURCE:.\Debug\ProjectAAA.Form1.resources >/ASSEMBLYRESOURCE:.\Debug\ProjectAAA.FormXXX.resources >/ASSEMBLYRESOURCE:.\Debug\ProjectAAA.FormYYY.resources' を開くことができません。 ※1行として出力された内容を、4行にして書いております。。 その後は、どのようにしたら宜しいでしょうか。 お手数ですが、よろしくお願いします。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

CLI な部分は知りませんが, とりあえず「やってから考える」という方針でいいのでは?

yuki7091
質問者

補足

ご回答、ありがとうございます。 実行してみますと、 以下のエラーが一件出力されました。 >LINK : fatal error LNK1104: ファイル 'C:/Program.obj' を開くことができません。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

UNLHA32.H の先頭にあるコメントに 「このヘッダファイルを読み込む前に, windows.h 等, 基本的なヘッダを前もって読み込んでおく必要があります」 と書かれています. 確かに他のドキュメントに書かれていないのはちょっと不親切ですが....

yuki7091
質問者

補足

ご回答、ありがとうございます。 某サイトを参照すると、 MFCの場合、以下のインクルードが必要とありました。 #include <windows> #include <iostream> #include <stdio.h> // sprintf()のために必要 #include <string.h> #include <time.h> // UNLHA32.Hの前に必要 #include "UNLHA32.H" C++/CLI(CLRプロジェクト)の場合は、どうなるでしょうか。 本当に初心者ですみません。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

ダウンロードしてみた. ちょっと気になったんだけど, インクルードしているヘッダファイルをインクルードしている順番の通りに挙げてもらえますか? ちなみに C/C++ 的には #include "c:/Program Files/ArchiverDll/UNLHA32/UNLHA32.H" の方が安全.

yuki7091
質問者

補足

ご返答、ありがとうございます。 このような内容を書いています。 *********Form1.hの先頭********** #pragma once #include "C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.H" #include "Common.h" //自分で追加した.hファイル #include "Progress.h"//別フォームの内容が記述されている.hファイル namespace MyProject {  using namespace System;  using namespace System::ComponentModel;  using namespace System::Collections; 以下省略 ******************* ちなみに、 UNLHA32.LIBファイルの追加、とUNLHA32.Hのインクルードを 除けば、ビルドでき、プログラムを実行できています。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

それだけの情報で回答できたらほとんど超能力者だよ.... 「どんなエラーが出ていて」「どんなプログラムなのか」を知っているのは今のところあなただけです.

yuki7091
質問者

補足

ご指摘、ありがとうございます。 以下のような、エラーが出力が延々と続いています。 ******* C:\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.H(38) : error C2146: 構文エラー : ';' が、識別子 'ULHA_INT64' の前に必要です。 C:\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.H(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません C:\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.H(38) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません C:\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.H(46) : error C2146: 構文エラー : ';' が、識別子 'HARC' の前に必要です。 C:\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.H(46) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません C:\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.H(46) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません *******

回答No.1

>・「追加の依存ファイル」に「C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.LIB」を記入。 >この時点で、エラーが発生しています。 Cの文字列とは違うんだから、ファイルを指定する場合のパス区切り記号は「\」のように「¥1つ」で良い。「\\」と書いたらエラーになる。 C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.LIB と記入しないで C:\Program Files\ArchiverDll\UNLHA32\UNLHA32.LIB と記入しよう。

yuki7091
質問者

補足

ご回答、ありがとうございます。 毎回のご教授、感謝しております。 ご指摘頂いたとおりにしましたが、エラー 300、 警告 0 が出力され、ビルドできませんでした。 他に問題のありそうなところはどこでしょうか。

関連するQ&A

専門家に質問してみよう