1

こんにちは私はUniCODEと/clrを使用してVisualC++ 2010(スペイン語)でプログラミングしています。「fileFuncs.h」というヘッダーファイルがあります。

#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
#include <string>

using namespace std;

std::wstring s2ws(const std::string& s)
{
    int len;
    int slength = (int)s.length() + 1;
    len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); 
    wchar_t* buf = new wchar_t[len];
    MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
    std::wstring r(buf);
    delete[] buf;
    return r;
}

void callSystem(string sCmd){
std::wstring stemp = s2ws(sCmd);
LPCWSTR params = stemp.c_str();

    ShellExecute(NULL,L"open",L"c:\\windows\\system32\\cmd.exe /S /C ",params,NULL,SW_HIDE); 
}

しかし、コンパイルすると、次のエラーが発生します。

  • エラーLNK2028:未解決のシンボル(トークン)を参照(0A0004A5) "extern" C "struct HINSTANCE__ * stdcall ShellExecuteW(struct HWND *、wchar_t const *、wchar_t const *、wchar_t const *、wchar_t const *、int)"(? ShellExecuteW @@ $$ J224YGPAUHINSTANCE_ @@ PAUHWND _ @@ PB_W111H @ Z)関数 "void __cdecl callSystem(class std :: basic_string、class std :: allocator>)"(?callSystem @@ $$ FYAXV?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@

  • エラーLNK2019:外部シンボル "extern" C "struct HINSTANCE__ * stdcall ShellExecuteW(struct HWND *、wchar_t const *、wchar_t const *、wchar_t const *、wchar_t const *、int)"(?ShellExecuteW @@ $$ J224YGPAUHINSTANCE_ @@ PAUHWND _ @@ PB_W111H @ Z) "void __cdecl callSystem(class std :: basic_string、classstd :: allocator)"関数(?callSystem @@ $$ FYAXV?$ basic_string @ DU?$ char_traits @ D @ std @ @V?$ allocator @ D @ 2 @@ std @@@ Z)

ある種の構成ですか?

4

2 に答える 2

1

ソリューションエクスプローラー、プロパティ、リンカー、入力でプロジェクトを右クリックします。shell32.libを追加の依存関係設定に追加します。

このコードを/clrオプションを使用してコンパイルしてもほとんど意味がないことに注意してください。マネージ・コードは記述していません。ShellExecute()関数に相当するのはProcess :: Start()です。

于 2011-04-16T01:01:23.700 に答える
1

std::string余談ですが、この状況では からにstd::wstring手動で変換する必要がないことをご存知でしょうか? 文字列パラメーターを持つほとんどの API 関数と同様に、ShellExecute() には Ansi と Unicode の両方のフレーバーが用意されています。OS に変換を任せます。

#include <string> 

void callSystem(std::string sCmd)
{
    ShellExecuteA(NULL, "open", "c:\\windows\\system32\\cmd.exe /S /C ", sCmd.c_str(), NULL, SW_HIDE);
} 
于 2011-04-19T20:21:55.970 に答える