プロが教えるわが家の防犯対策術!

いつもお世話になっています。
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は上記の同フォルダにあります。)

このエラーの対処、及び、これからすべきことを
ご指導頂けませんでしょうか。

お手数ですが、よろしくお願い致します。

A 回答 (7件)

 こんにちは。

補足頂きました。

 ・「ソリューションエクスプローラ」のプロジェクト名を右クリックし、「プロパティ」を選択。
 ・「構成プロパティ」-「リンカ」-「入力」をクリック。
 ・「追加の依存ファイル」に「C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.LIB」

 の手順で追加した「C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.LIB」のパスを「追加の依存ファイル」から削除して見て下さい(初期状態に戻すと言う事)。
 その後、「ソリューションのリビルド」で出来ませんか。

この回答への補足

ご回答、ありがとうございます。
毎回のご教授、本当にありがとうございます。

ビルドできました!
UNLHA32の導入がこんなに大変だったとは思いませんでした。
しかも、導入の仕方の説明がされているサイトもありませんし、、、
(もしかしたらテキストに書いてあったのかも、、、)
しなしながら、やっとスタート地点に立てた感じです。

これ以降は、C#などを参照して、目的であるファイル圧縮、解凍の
コードを記述していけば宜しいのでしょうか。

補足日時:2009/08/28 15:00
    • good
    • 0
この回答へのお礼

一度、本件の質問を閉じさせていただきます。

ご対応、ありがとうございました。

お礼日時:2009/09/27 21:37

 こんばんは。



 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")

 その後「ソリューションのリビルド」を実行して出来ませんか。

この回答への補足

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

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行にして書いております。。

その後は、どのようにしたら宜しいでしょうか。
お手数ですが、よろしくお願いします。

補足日時:2009/08/28 09:27
    • good
    • 0

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

この回答への補足

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

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

補足日時:2009/08/27 09:14
    • good
    • 0

UNLHA32.H の先頭にあるコメントに


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

この回答への補足

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

某サイトを参照すると、
MFCの場合、以下のインクルードが必要とありました。
#include <windows>
#include <iostream>
#include <stdio.h> // sprintf()のために必要
#include <string.h>
#include <time.h> // UNLHA32.Hの前に必要
#include "UNLHA32.H"

C++/CLI(CLRプロジェクト)の場合は、どうなるでしょうか。

本当に初心者ですみません。

補足日時:2009/08/26 16:03
    • good
    • 0

ダウンロードしてみた.


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

この回答への補足

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

このような内容を書いています。
*********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のインクルードを
除けば、ビルドでき、プログラムを実行できています。

補足日時:2009/08/26 14:45
    • good
    • 0

それだけの情報で回答できたらほとんど超能力者だよ....


「どんなエラーが出ていて」「どんなプログラムなのか」を知っているのは今のところあなただけです.

この回答への補足

ご指摘、ありがとうございます。

以下のような、エラーが出力が延々と続いています。
*******
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 を既定値としてサポートしていません
*******

補足日時:2009/08/26 13:42
    • good
    • 0

>・「追加の依存ファイル」に「C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.LIB」を記入。


>この時点で、エラーが発生しています。

Cの文字列とは違うんだから、ファイルを指定する場合のパス区切り記号は「\」のように「¥1つ」で良い。「\\」と書いたらエラーになる。

C:\\Program Files\\ArchiverDll\\UNLHA32\\UNLHA32.LIB
と記入しないで
C:\Program Files\ArchiverDll\UNLHA32\UNLHA32.LIB
と記入しよう。

この回答への補足

ご回答、ありがとうございます。
毎回のご教授、感謝しております。

ご指摘頂いたとおりにしましたが、エラー 300、 警告 0
が出力され、ビルドできませんでした。

他に問題のありそうなところはどこでしょうか。

補足日時:2009/08/26 12:29
    • good
    • 0

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