趣味で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: あり
宜しくお願い致します。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/17 03:46