gpt4 book ai didi

c++ - 在启动时创建我的应用程序的快捷方式

转载 作者:行者123 更新时间:2023-11-28 07:07:19 25 4
gpt4 key购买 nike

我想在启动时为我的应用程序创建一个快捷方式。我使用的是 Visual C++ 2010 和 Windows 7。

HRESULT CreateLink(LPCWSTR lpszPathObj, LPCSTR lpszPathLink, LPCWSTR lpszDesc){ 
HRESULT hres;
IShellLink* psl;

hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);

if (SUCCEEDED(hres))
{
IPersistFile* ppf;

psl->SetPath(lpszPathObj);
psl->SetDescription(lpszDesc);

hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);

if (SUCCEEDED(hres))
{
WCHAR wsz[MAX_PATH];

MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, wsz, MAX_PATH);


hres = ppf->Save(wsz, TRUE);
ppf->Release();
}
psl->Release();
}
return hres;

但是,当我在表演而不是在创作的时候。在线:

hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); 

得到错误。并且不执行仍然是我的程序。

最佳答案

返回的 HRESULT 不仅仅表示成功和失败。如果失败,HRESULT 会告诉您调用失败的原因。当您遇到失败时,您需要解码 HRESULT 以找出调用失败的原因。

在这种情况下,调用非常简单,只有一种明显的失败模式。您没有初始化 COM。概率非常接近 1,调用 CoCreateInstance 返回的值为 CO_E_FIRST,值为 0x800401f0,这表明 COM 尚未初始化。

您需要在启动时添加对 CoInitializeEx(NULL, COINIT_APARTMENTTHREADED) 的调用,并在完成时将其与对 CoUninitialize() 的调用相匹配COM.

就其值(value)而言,我认为如果所有参数都是宽字符串,您的函数会更好。像这样的函数不应该担心这种转换。如果您需要进行此类转换,请在您的代码中包含一些辅助方法来执行它们。您可以添加一个函数以将 std::string 转换为 std::wstring,这应该是您所需要的一切。

关于c++ - 在启动时创建我的应用程序的快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21601809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com