在编写Win32C/C++代码时,使用lstrcpyn或CopyMemory等Windows特定函数代替相应的CRT函数是否有任何优势(例如性能?)(除了CRT功能的可移植性)? 最佳答案 至少一些CRT函数在内部使用Win32函数。此外,CRT需要额外的初始化(例如strtok等函数的线程特定数据)和清理,您可能不希望发生这些事情。你可以创建一个普通的Win32应用程序,而不依赖于任何其他东西,包括CRT(很像你可以使用NTDLL.DLL创建一个普通的NT应用程序-我想想Windows的smss.exe就是这样一个进程BTW)。话
我是C++的新手,但我以前使用过C。用C编写的程序必须与CRT链接(在Windows中,它是文件libcmt.lib),其中包含C函数(例如:printf()).但我想知道,是否存在“C++RT”(与CRT相反)这样的东西,我的意思是C++函数和类在哪里(例如:std::ofstream)存储。我还有一个问题,如果我使用一些C函数(例如:printf()),我的C++程序是否会同时与CRT和“C++RT”链接,还是“C++RT”包含CRT? 最佳答案 这取决于C++standardlibrary的具体实现你正在使用。GCC附带lib
在分发Windows原生应用程序时,我们还需要为vcredist.exe烦恼吗?这些是否与Win-7捆绑在一起?如果不是,是否有任何技术原因,这些没有通过例如Windows更新-而不是让我们用另一件必须工作的东西给客户带来负担?(好吧,这听起来可能有争议,但我真的很想知道为什么这些库没有默认安装/更新在Windows机器上) 最佳答案 我认为这取决于您链接的方式/内容。如果您直接链接到kernel32.dll等,那没关系,当然(即嵌入了c运行时库),但Microsoft不推荐这种分发方法。如果您通过msvcr80/90/whatev
在窗口中;有2个选项可以链接到CRT:多线程,静态链接多线程,动态链接有人可以阐明这里的最佳做法是什么吗?我应该“静态”链接到CRT还是动态链接?如果我做一个动态链接,并且我编写了一个程序,该程序使用我的DLL+另一个第3方DLL(它正在做一个到CRT的静态链接),这是一个问题吗? 最佳答案 当您在应用程序中使用DLL时,这是一件大事。EXE和DLL使用相同的内存分配器是非常重要的。如果您从需要由调用者释放的DLL函数返回指针或C++对象(如std::string)。要获得相同的分配器,所有模块必须使用相同的CRT实例。如果您使用/
当通过LoadLibrary加载外部DLL(不受我们控制)时,我们遇到了一个问题,即这些DLL中的静态链接CRT无法分配光纤本地存储。这类似于mskb193462,除了这是FLS,而且只有128个。有什么有用的方法可以解决这个问题吗?CRT无论如何都在使用GetProcAddress来查找FlsAlloc(因为它在XP中显然不存在),所以它真的需要它吗?(这是在Vista上,FlsAlloc实际存在;DLL似乎正在使用MSVC8) 最佳答案 坦率地说,除了加载更少的dll之外,这里没有解决方案。您可以Hookdll的导入地址表-但那
这不是关于标准本地化的问题-我知道如何本地化应用程序、使用资源、Uid等等-这非常有效。问题是该应用程序包含在bundle中,因此当用户安装该应用程序时,它仅涵盖在设备/手机设置中选择的语言。但我想在设置中提供一个选项,允许选择有关设置的语言。为此,我可以使用ApplicationLanguages.PrimaryLanguageOverride,当通过VS部署时效果很好,但正如我所提到的-商店中的版本缺少资源,因为并未安装所有资源。有人知道如何绕过这种捆绑行为吗?问题还在于我使用的是MAT(多语言应用程序工具包)并且我的翻译带有xliff文件。我花了很多时间寻找将它们转换为resw文
我正在尝试使用以下代码从View构造函数中检索StatusBar对象:boolmobile=Windows.Foundation.Metadata.ApiInformation.IsApiContractPresent("Windows.Phone.PhoneContract",1,0);如果(手机){varstatusbar=Windows.UI.ViewManagement.StatusBar.GetForCurrentView();}使用VisualStudioCommunity2015,我收到以下错误:错误CS0731程序集“Windows”中类型“Windows.UI.Vie
例如,这个应用程序:#define_WIN32_WINNT0x0500#includeint__stdcallNoCRTMain(void){intresult;PWSTRlpCmdLine=GetCommandLine();for(;;){if(*lpCmdLine==L'"'){lpCmdLine++;for(;;){if(*lpCmdLine==L'"')break;if(*lpCmdLine==L'\0')break;lpCmdLine++;}}if(*lpCmdLine==L'')break;if(*lpCmdLine==L'\0')break;lpCmdLine++;}wh
很抱歉打扰任何人这个问题,但我已经研究了几个小时,还没有解决方案:我正在将一个相当庞大的应用程序移植到VisualStudio2010中的10.0CRT(编译器)。该应用程序是使用/clr的托管C++/CLI。大部分代码是原生的(95%),其中有一些托管部分。所以我的工作是在.vcxproj中进行切换以针对较新的10.0CRT(即编译器)。我们以前使用的是v90,或者使用VS2008SP1附带的VC编译器。好吧,这么重大的变化?实际上看起来像一堆。我修复了一些处理集合的迭代器问题,这一切都非常简单。但是这些链接器错误让我很难受。任何帮助将不胜感激:1>MSVCMRTD.lib(loca
我试图在不使用CRT或在任何情况下除kernel32.lib之外的任何其他导入的情况下构建控制台应用程序。我得到了要编译的代码,但无法将链接器包装在一些问题上:unresolvedexternalsymbol@__security_check_cookie@4unresolvedexternalsymbol"int__cdeclFreeLibrary(void*)"(?FreeLibrary@@YAHPAX@Z)unresolvedexternalsymbol"void*__cdeclLoadLibraryW(wchar_t*)"(?LoadLibraryW@@YAPAXPA_W@Z)