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

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

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

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1444閲覧

QStringをchar文字列にしても文字化けしない方法

BeatStar

総合スコア4958

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/02/12 04:50

趣味でC++やっています。

Qtというライブラリを使っています。

で、7-Zip32.dllでZIPファイルの圧縮・解凍をしたいのですが引数が合いません。

C++

1namespace Original{ 2 void checkX( void ){ 3 using SEVENZIP = int(WINAPI*)(const HWND,const char*,char*,const DWORD); 4 LibLoader::DynamicLink dll( "7-Zip32.dll" ); 5 if( dll.isEnabled() ){ 6 SEVENZIP SevenZip = (SEVENZIP)dll.call( "SevenZip" ); 7 if( SevenZip == NULL ){ 8 cout << "error 2" << endl; 9 }else{ 10 char r[2000]; 11 QString cmd; 12 cmd = QString("a -tzip ") + QString("maker.zip") + QString(" ") + QString("著作権.txt") + QString(" -hide"); 13 14 SevenZip(NULL,cmd.toStdString().c_str(), r, 2000 ); 15 } 16 }else{ 17 cout << "error 1" << endl; 18 } 19 return; 20 } 21}

7-Zip32.dll内の SevenZip関数の第二,第三引数がcharになっています。( 厳密には const char や char*をtypedefした型ですが。 )

これを実行すると圧縮ファイルに追加したいファイル名が文字化けするようで失敗します。

( 実際に cmd.toStdString().c_str() を見てみると文字化けしていました。 )

直接 配列やクラス等に入れずにそのまま

SevenZip(NULL,"a -tzip maker.zip 著作権.txt -hide", r, 2000 );

やっても空のZIPファイル... ( つまり失敗... )

元 ( DLL内の関数 ) がwchar_tをtypedefしたものならよかったのに...

[環境]
言語: C++
Qt: あり
Windows API: あり

宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

文字列リテラルにu8prefixをつけるとか、Qtに含まれる文字コード変換関数でwchar_t系から変換するという方法があるかもしれない

投稿2018/02/12 05:49

yumetodo

総合スコア5850

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

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

BeatStar

2018/02/17 03:46

おお、Reply忘れていた...orz 一応QStringに入れるときに u8をつけましたが、これでも以前と変わらず... >> Qtに含まれる文字コード変換関数でwchar_t系から変換する これって もしかして QString( Qt 用String ) -> wstring -> wchar_t* -> char* っていうことでしょうか? それは試していませんね。 一応 QString -> whar_t* は試しましたが、もしかするとここで誤作動かなんかがあるのかもしれないですからねぇ。 もう一度試してみます。
guest

0

ベストアンサー

7-zip32.dll/7-zip64.dll/7z.dll文字化け対策版
を使ってみたらどうでしょう?

投稿2018/02/12 05:05

unz.hori

総合スコア1057

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

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

BeatStar

2018/02/17 03:42

おお、Replyするの忘れていました...orz 一応試してみたのですが、これって使い方が7-zip32.dllのときと違いますよね? C++のコードはそのままに、実行ファイルと同じディレクトリに置くDLLだけを差し替えてみましたができませんでした... (今は外出先なのでどういうエラーだったか忘れましたが... 多分 SevenZipなるものがない...みたいなエラー ( if文での表示 ) だった気がします。 )
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問