Tag: windows

Windows等效于sys / mman.h

我在尝试在Win64上编译我的C代码时遇到了问题。 更具体地说,编译器找不到sys/mman.h头文件,我理解只能在Unix环境中找到它。 我已经知道这是内存分配的处理。 是否有一个等效的Windows我可以用来移植代码(第一次尝试)? 代码导致问题: /* Allocate memory required by processes */ buf = (int*) malloc (sizeof(int)); if (!buf) { perror(“Error”); free (buf); return -3; } /* Lock down pages mapped to processes */ puts(“Locking down processes.”); if(mlockall (MCL_CURRENT | MCL_FUTURE) < 0) { perror("mlockall"); free (buf); return -4; }

Windows CreateFile可能的错误代码

我正在使用将Windows,Linux和Mac文件IO调用抽象为宏(以避免C运行时,因此没有fopen , fclose等……)。 我实际上有相当多的工作,但我遇到了绊脚石。 我试图将每个平台可能抛出的所有可能错误归结为常见的错误:未找到,存在,无效访问等。 Linux显然是很好的文档,Mac甚至有最常见的文档,但Windows没有指定为其本机文件I / O函数抛出哪些错误。 我们显然需要使用GetLastError() ,但我找不到可能值的引用。 这个怎么样? 我正在编写Windows应用程序并使用CreatFile() API。 我想尽可能优雅地处理任何错误,并且可能从错误中恢复而不是告诉用户“废话!不能那样做”。 但是MSDN文档没有列出可能生成的错误代码。 有没有人引用Windows文件函数可能生成的错误代码,特别是(现在) CreateFile() ?

XP嵌入式CRT版本问题.. LoadLibraryEx失败

我在我的应用程序中使用第三方DLL,它注定要在Windows XP嵌入式SP1系统上运行。 然而,它在我的开发盒上运行正常,但是当我尝试在目标平台上运行它时,它会失败并发生以下事件。 当我调用LoadLibraryEx加载第三方DLL时,会发生此事件。 Event Type: Error Event Source: SideBySide Event Category: None Event ID: 32 Date: 9/8/2011 Time: 9:42:28 AM User: N/A Computer: OEM-J1XMVGHGNVX Description: The description for Event ID ( 32 ) in Source ( SideBySide ) cannot be found. The local computer may not have the necessary registry information or message DLL […]

DLL更新后重建EXE?

我看到主题和微软官方文档( https://docs.microsoft.com/en-us/cpp/build/determining-which-exporting-method-to-use ),说我们在向我们的dll添加导出function之后,我们必须重建DLL(逻辑) 和 EXE。 我不明白他们为什么这么说,经过测试后不是这样,我不需要在我添加函数到dll之后重建我的exe。 我的函数使用__declspec导出,并且有基本的C函数。 他们(链接)建议我们使用带有序数的.def文件来重建,但即使没有这个.def文件,我也不必重建。 __declspec是否也使用序数来链接dll函数或它是否使用函数命名? 你能解释一下他们为什么这么说,我哪里错了? 谢谢

如何读取输出并从c程序输入程序?

这是参考以下问题: 从C程序中执行程序 如何在Windows上使用Tiny C编译器执行相同的操作? 我需要执行一个.exe来自c程序,并通过使用文件或字符串作为源从同一个C程序中输入它,并将其输出读取到字符串或文件中。我一直在使用system()frunction。 任何建议或例子都是受欢迎的。谢谢

Win32 / C:将行结尾转换为DOS / Windows格式

我在Windows API项目中具有以下C函数,该项目读取文件并基于行结尾(UNIX,MAC,DOS),它用Windows的右行结尾替换行结尾( \r\n ): // Standard C header needed for string functions #include // Defines for line-ending conversion function #define LESTATUS INT #define LE_NO_CHANGES_NEEDED (0) #define LE_CHANGES_SUCCEEDED (1) #define LE_CHANGES_FAILED (-1) /// /// If the line endings in a block of data loaded from a file contain UNIX (\n) or MAC (\r) line endings, this […]

如何使用命令提示符运行.exe文件?

我在网上做裁判。 这是我的学校项目。 我正在从用户那里获取.c文件。 我能够使用命令提示符编译.c文件。 但我不知道如何运行这个文件。 我需要运行此文件,从文本文件中获取输入并将输出保存在文本文件中。 编译代码是: gcc main.c -o HelloWorld

Visual Studio使用下划线前缀为符号构建OpenSSL

我正在尝试向Visual Studio 2013中添加一个项目,该项目将在Visual Studio GUI中构建OpenSSL。 我正在使用“makefile”项目设置作为起点。 我已经成功地在Visual Studio命令行窗口上构建OpenSSL,并且它可以工作。 但是,当我尝试使用我在命令行中使用的完全相同的命令通过项目构建OpenSSL时,我得到链接错误(LNK2001)。 使用dumpbin查看生成的.lib文件,我看到当我通过GUI构建OpenSSL时,下划线(’_’)会附加到所有导出(因此,一个名为BIO_read的函数将变为_BIO_read )。 微软有关于LNK2001的说法: https ://msdn.microsoft.com/en-us/library/f6xx1b1z.aspx ? f = 255 & MSPPError = -2147217396 具体来说,它说: 当符号未解析时,您可以通过以下准则获取有关该function的信息: 在x86平台上,用C编译的名称或C ++中的extern“C”名称的调用约定装饰是: __cdecl 函数具有下划线(_)前缀。 我认为使用稍微不同的参数调用cl会使它发出下划线前缀,但我无法弄清楚究竟有什么不同 – 命令行没有区别,如果环境变量存在差异,我找不到一个相关的。 有什么想法在这里发生了什么?

Visual-C ++内联汇编程序两个偏移量的差异

我正在将一大堆代码从MASM移植到C内联汇编程序(x86,Windows,MS VC)。欺骗不是真正的代码,只是欺骗提出一个想法。 假设我将一些数据定义为静态数组,甚至是两个标签之间的代码块,我需要获得它的大小。 label1: bla bla bla label2: …. mov eax, (offset label2 – offset label1) 这样的代码在MASM中像魅力一样工作,但在CI中得到以下错误消息:“错误C2425:’ – ‘:’第二个操作数’中的非常量表达式”我可以编译: mov eax, offset label1 mov eax, offset label2 我希望编译器在编译时评估(偏移label1 – 偏移label2),但看起来我错了。 我也不能添加偏移量(为什么?这些只是在编译期间添加的两个整数……?)当然,我可以获得mov eax,offset label2 mov edx,offset label1 sub eax,edx编译,但这是一个额外的代码只是为了计算常数。 有人可以解释一下,我的代码有什么问题吗? 这可能是搬迁造成的吗? 如何推动它? 期待一个答案,谢谢。

Visual Studio 2010中的Langinfo.h

如何将我的Visual Studio 2010 C项目包含在langinfo.h中。 我试过#include ,但似乎VS 2010环境中没有这样的头文件。 我需要获取语言环境的开始工作日,但我现在只使用这个库。 所以,问题是如何解决我的问题:如何包含langinfo.h,或如何从工作日开始获取当前的语言环境。