1

您好,我正在使用 UNICODE 和 /clr 在 Visual C++ 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 添加到 Additional Dependencies 设置。

请注意,使用 /clr 选项编译此代码没有什么意义,因为您没有编写任何托管代码。ShellExecute() 函数的等价物是 Process::Start()。

于 2011-04-16T01:01:23.700 回答
1

附带说明:您确实意识到在这种情况下您不需要手动转换,对吗std::stringstd::wstring与大多数带有字符串参数的 API 函数一样,ShellExecute() 具有 Ansi 和 Unicode 两种风格。让操作系统为您进行转换:

#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 回答