Articles of visual c ++

如何在Windows上构buildgnu`libiconv`?

我想在Windows上构build一个静态库(* .LIB文件) GNU libiconv ,与Visual C ++中的其他库一起使用。 我正在使用的其他库是使用“multithreadingDLL”(/ MD)运行时选项构build的。 所以,我需要使用相同的选项来构buildlibiconv。 问题是libiconv使用GNU构build系统,我想用/ MD选项编译。 你可以在这里看到libiconv的源代码结构: http ://cvs.savannah.gnu.org/viewvc/libiconv/?root=libiconv Zlatkovic先生维护libxml2的GNU libiconv的Windows端口 你可以在这里看到他们: ftp://xmlsoft.org/libxml2/win32/iconv-1.9.2.win32.zip ftp://xmlsoft.org/libxml2/win32/iconv-1.9.2.win32.zip 我不能使用他的端口。 我需要从最新版本的libiconv-1.13开始构build。 我不知道这个人是如何移植它的? 有人可以告诉我如何从这个build立* .lib并使用MSVC编译它? 编辑: 其实,我需要build立几个相同的设置GNU库。 所以,如果我得到一个库的解决scheme。 我可以为所有其他人做同样的事情。

在.NET中获取目录数据的最快方法

我正在使用文件同步服务来同步不同机器上的两个文件夹之间的文件。 我需要find一个非常快速的方式来枚举一个目录,并从中获取以下信息: 该目录中所有文件path和子目录path的数据结构或结构,包括每个文件或子目录的最后写入时间。 对于当前目录下任何级别的每个子目录,与上述相同。 到目前为止,我已经想出了这个: static void Main(string[] args) { List<Tuple<string, DateTime>> files = new List<Tuple<string, DateTime>>(); List<Tuple<string, DateTime>> directories = new List<Tuple<string, DateTime>>(); Stopwatch watch = new Stopwatch(); while (true) { watch.Start(); while (!CheckFolderRecursiveSingleThreaded("C:\\", out files, out directories)) { // You can assume for all intents and purposes that drive C does exist and […]

WinAPI函数LoadLibrary()在执行错误期间导致函数失败

以下代码使用LoadLibrary()在运行时加载dll。 boolean Load_Internals_dll() { boolean result = true; //LOG_INIT; HINSTANCE hApexRLIO = LoadLibrary(L"APEX_RLIO_Internals.dll"); printf("Checking getlasterror after loadlibrary:\n",GetLastError()); if(NULL == hApexRLIO) { result = false; printf("[ERR]: Unable to load dll\n"); LOG_PRINT(" [ERR]: Unable to load dll.\n" ); } result = InitRSIDComm_Lib_Func(); //LOG_EXIT; return result; } 加载DLL后,发现句柄hApexRLIO不为空,但函数GetLastError()返回系统错误代码1627(函数在执行期间失败)。 这个错误可能是什么原因造成的? 这个错误代码在网上没有太多的文档,VC ++十加仑的头请帮我解决这个问题。

OpenThread()返回NULL Win32

我觉得这个问题有一个明显的答案,但这个问题一直困扰着我。 我在C ++中有一些遗留代码,当它尝试调用OpenThread()时会中断。 我在Visual C ++ 2008 Express Edition中运行它。 程序首先获取调用线程的ThreadID,并尝试打开它,如下所示: ThreadId threadId = IsThreaded()? thread_id::: GetCurrentThreadId(); HANDLE threadHandle = OpenThread(THREAD_ALL_ACCESS,FALSE,threadId); 现在这是我不明白的:如果线程ID是当前线程的ID,是不是已经打开? 那可能是为什么它返回NULL? 对于任何反馈,我们都表示感谢。

使用MSVC2010使用/ MT编译静态QT库

我正在试图静态构buildQT库和/ MT(运行时静态链接)。 我按照下面的步骤进行:1.在qmake.conf文件中,在release和debugconfiguration中修改/ MD到/ MT 2.运行configure命令,如下所示:configure -static -opensource 3.运行nmake 问题是nmake在运行几秒后失败。 这是最后的输出: [……….] qjson.cpp qjsondocument.cpp qjsonobject.cpp qjsonarray.cpp qjsonvalue.cpp qjsonparser.cpp qjsonwriter.cpp Generating Code… cl -c -nologo -Zm200 -Zc:wchar_t -O2 -MT -W3 -w34100 -w34189 -GR -DUNICO DE -DWIN32 -DQT_BOOTSTRAPPED -DQT_LITE_UNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_COD ECS -DQT_NO_DATASTREAM -DQT_NO_LIBRARY -DQT_NO_QOBJECT -DQT_NO_SYSTEMLOCALE -DQT _NO_THREAD -DQT_NO_UNICODETABLES -DQT_NO_USING_NAMESPACE -DQT_NO_DEPRECATED -DQT _NO_TRANSLATION -DQT_QMAKE_LOCATION=\"F:/utils/Qt/5.0.0/Src/qtbase/bin/qmake\" – DQT_NO_CAST_FROM_ASCII -DQT_BUILD_BOOTSTRAP_LIB […]

64位Windows API:C / C ++“DWORD”的大小是多less?

我只安装了32位Windows,所以我无法自己validation。 如果我理解正确,那么在Microsoft API的各个地方使用的DWORD是参考原来的16位字,而与当前的硬件架构无​​关? 因此,即使当我最终编译并链接我的应用程序以在64位Windows中运行时,似乎是32位的DWORD也将保持32位? 或者将DWORD变成128位宽?

将const wchar_t *转换为const char *

我想要使​​用GetHostByName()这需要一个const char *。 我有我的URL在一个成本wchar_t *格式的variables。 我怎样才能转换这个GetHostByName可以使用它? 代码。 BSTR bstr; pBrowser->get_LocationURL(&bstr); std::wstring wsURL; wsURL = bstr; size_t DSlashLoc = wsURL.find(L"://"); if (DSlashLoc != wsURL.npos) { wsURL.erase(wsURL.begin(), wsURL.begin() + DSlashLoc + 3); } DSlashLoc = wsURL.find(L"www."); if (DSlashLoc == 0) { wsURL.erase(wsURL.begin(), wsURL.begin() + 4); } DSlashLoc = wsURL.find(L"/"); if (DSlashLoc != wsURL.npos) { wsURL.erase(DSlashLoc); } wprintf(L"\n […]

C ++目录监视 – 如何检测复制已结束

我有一个文件夹复制到文件。 我想看它,并将文件复制到目录后立即处理。 我可以检测文件在目录中的位置,无论是通过轮询(我当前的实现),还是在一些使用Windows API的testing中,我都可以在线find一些样本。 问题是,我检测到文件第一次创build时,它仍然被复制。 这使得我的程序需要通过错误来访问文件(因为文件还没有完成)。 复印何时开始,复印何时结束? 我在Windows上使用C ++,所以答案可能依赖于平台,但如果可能的话,我宁愿它是平台不可知的。

获取由Windows 8及以上版本的NetWkstaUserEnum API返回的给定Microsoft帐户的本地login名

我正在使用NetWkstaUserEnum()来获取本地用户的名称和它的域的详细信息。 直到Windows 7它用于返回只有login名,它工作正常。 从Windows 8开始,Microsoft帐户被添加,对于这种types的帐户,API开始返回Microsoft帐户名称而不是本地login名称。 例如,它返回的是username@outlook.com而不是usern_0000 ,这是实际的Windows本地login名。 我不能使用NetUserEnum()因为它不返回用户的域名。 所以我需要获取由NetWkstaUserEnum() API返回的给定Microsoft帐户的本地login名。 任何帮助将不胜感激。

LoadLibrary()一个EXE?

我有一个可执行文件(我使用Visual C ++ 10创build的),我需要使用我写的其他程序(相同环境)的function。 由于复杂的部署要求,我不会去,从所需的functionbuild立一个DLL,并加载到这两个程序是不是我能做的事情。 所以我以为我可以在EXE中使用__declspec(dllexport)函数,然后LoadLibrary()会让我GetProcAddress()它们。 显然这是不可能的,但是当我开始看时,这看起来是可行的。 特别是,当你在一个EXE项目中使用__declspec(dllexport)函数时,Visual C ++也会生成一个用于dynamic链接的lib文件 – 所以你甚至不需要使用LoadLibrary() – 只需要链接到结果库并调用函数。 不幸的是,主要的问题是,当你将结果文件声明为EXE时,Visual C ++将“CRTmain”入口点添加到生成的文件中,而不是DLL获取的“CRTDLLmain”。 当Windows(自动) LoadLibrary()从您的主程序的EXE,它不调用“CRTDLLmain”入口点(因为它不存在),该模块的C运行时不会被初始化,并作为结果所有有趣的工作(例如内存分配)失败,有趣的(*)运行时exception。 所以,如下所示,我的问题是:是否有一种方法可以使Visual C ++在生成的文件中构build“CRTmain”入口点和 “CRTDLLmain”入口点? (*)像“中国古老的诅咒”中的“有趣”