获取运行时错误:“program.exe不是有效的win32应用程序”

时间:2016-01-12 12:20:43

标签: c windows visual-studio-2015

我对Windows编程和这个论坛相对较新。正如标题所说,每当我尝试运行我编写的特定C程序时,我都会收到此错误。该程序编译为在64位计算机上运行的x64。编辑:按下弹出窗口上的确定按钮后,我收到“访问被拒绝”消息。代码,我认为与此问题没有任何关系如下:

// CrtFil2.cpp : Defines the entry point for the console application.
//


#include "stdafx.h"
#include "string.h"

//#include BasInc2.c
//#include FilMst2.c

FILE * Opn(char PthNam[], char OpnMod[]);


void main()
{
    FILE    * FilMstFilPtr = NULL;

    FilMstFilPtr = Opn("\\temp\\test.file", "wb");
    printf("filptr=0x%p\n", FilMstFilPtr);
    return;
}

//******************************************************************************
//  Open a file.
//******************************************************************************
FILE * Opn(char PthNam[], char OpnMod[])
{
    FILE    * FilPtr = NULL;

    errno = fopen_s(&FilPtr, PthNam, OpnMod);
    if (errno != 0) {
        printf("%s\n", PthNam);
        perror("Could not open file");
        return NULL;
    }
    printf("file opened for mode %s\n", OpnMod);
    return FilPtr;
}

我在构建中获得了以下输出:

1>------ Build started: Project: CrtFil2, Configuration: Debug x64 ------ 1> CrtFil2.cpp 1> CrtFil2.vcxproj -> C:\$SmpSysLib\$QsysS\CrtFil2\x64\Debug\CrtFil2.exe ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

直到大约一小时前才开始工作。然后我评论了一些线条,它就退出了工作。我查看了搜索提供的前50个答案,其中大多数都涉及在XP或特定的第三方.exe上运行。如果这是一个重复的问题,请告诉我。我试过的一些建议是关闭Visual Studio并重新启动它,还关闭并重新启动PC。一个答案指向了这个链接:https://superuser.com/questions/358434/how-to-check-if-a-binary-is-32-or-64-bit-on-windows。根据答案,.exe被编译为x86应用程序。但是,在VS显示屏的顶部,它表示x64以及Property-> Configuration Manager。这是在Visual Studio-2015 Community Edition Update 1上。

即使源代码保持不变,我仍然可以使用原始程序。但是在不同的C程序上出现了同样的错误。我尝试重新安装VS但是当我尝试这样做时出错,所以我有点卡住了。

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:0)

此头文件:#include“stdafx.h”实际上是来自该源文件(及其依赖项)的所有头文件的复合编译头。

如果您在编辑期间删除了#include语句,Visual Studio可能已删除该复合头文件。

所有#include语句必须位于源文件中。

有几种方法可以使visual studio删除已编译的头文件。一种方法是注释掉#include语句。

答案 1 :(得分:0)

最好编写可移植代码,即使只是在Windows上运行。

如此强烈建议您编写C函数:

#define _CRT_SECURE_NO_DEPRECATE
//#include "stdafx.h
#include <stdio.h>
#include <string.h>
#include <errno.h>


FILE * Opn(char PthNam[], char OpnMod[]);


int main( void )
{
    FILE    * FilMstFilPtr = NULL;

    FilMstFilPtr = Opn("\\temp\\test.file", "wb");
    printf("filptr=0x%p\n", (void*)FilMstFilPtr);
    return 0;
}

//*****************************************************************
//  Open a file.
//*****************************************************************
FILE * Opn(char PthNam[], char OpnMod[])
{
    FILE    * FilPtr = NULL;

    #if 0
    errno = fopen_s(&FilPtr, PthNam, OpnMod);
    if (errno != 0) {
        printf("%s\n", PthNam);
        perror("Could not open file");
        return NULL;
    }
    #else
    if( NULL == (FilPtr = fopen( PthNam, OpnMod ) ) )
    {
        fprintf( stderr, "fopen failed for %s with mode: %s due to: %s\n", 
                 PthNam, OpnMod, strerror( errno ) );
    }
    else
        printf("file opened for mode %s\n", OpnMod);
    #endif
    return FilPtr;
}