注册 登录
编程论坛 VC++/MFC

Windows API一个小程序的困惑

love云彩 发布于 2013-06-10 19:19, 1515 次点击
#include<windows.h>
/* *************************************

* 功能:获取系统目录信息,并存储到文件中

*************************************** */
int main(int argc,TCHAR argv[])
{
    //文件句柄
    HANDLE hFile;
    DWORD dwWritten;
    TCHAR szSystemDir[MAX_PATH]; //字符数组,用于存储系统目录
    GetSystemDirectory(szSystemDir,MAX_PATH);//获取系统目录
    hFile=CreateFile("systemroot.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);//创建文件systemroot.txt
    if(hFile!=INVALID_HANDLE_VALUE)
    {
        if(!WriteFile(hFile,szSystemDir,lstrlen(szSystemDir),&dwWritten,NULL))//将系统目录,系统信息写入文件中
        {return GetLastError();}
}
    CloseHandle(hFile);//关闭文件,返回
    return 0;
}
编译通过,但是运行的时候出错;提示的信息如下:
error LNK2001: unresolved external symbol _WinMain@16
Debug/was.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

was.exe - 2 error(s), 0 warning(s)
在VS2012中写代码的时候,这句代码显示出错 hFile=CreateFile("systemroot.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL)
主要是加颜色部分提示出错,提示信息:Error:"const char *"类型实参与"LPCWSTR"类型的形参不兼容
8 回复
#2
yuccn2013-06-10 19:58
_WinMain

gui应用程序,你写成cui控台程序了
#3
love云彩2013-06-10 20:04
不是在开始的时候创建一个win32控制台应用程序,然后在应用设置里面选择为Windows应用程序吗?(基于VS2012创建)
#4
love云彩2013-06-10 20:13
回复 2楼 yuccn
我是使用VS2012的,先创建一个Win32控制台应用程序,然后在应用程序设置里面选择为Windows应用程序,新创建一个源文件,然后把代码写进去
截图如下:
只有本站会员才能查看附件,请 登录

然后调试的时候就出错了,提示出错信息如下:
 error C2664: “CreateFileW”: 不能将参数 1 从“const char [15]”转换为“LPCWSTR”
1>          与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换。
这是为什么?
#5
yuccn2013-06-10 20:20
error C2664: “CreateFileW”: 不能将参数 1 从“const char [15]”转换为“LPCWSTR”

用WCHAR ,用unicode
#6
yuccn2013-06-10 20:22
吧char改成WCHAR就行了
或者你把CreateFile改成CreateFileA 就行了,不明白就百度一下他们的差别
#7
love云彩2013-06-10 21:49
回复 6楼 yuccn
我把CreateFile多加了一个A之后,编译通过了,但是运行之后就出错了
只有本站会员才能查看附件,请 登录

如果不加A的话,只是把TCHAR改为WCHAR,那CreateFile里面的第一个参数则提示出错
只有本站会员才能查看附件,请 登录

#8
azzbcc2013-06-11 14:25
程序代码:
#include<windows.h>
/* *************************************

* 功能:获取系统目录信息,并存储到文件中

***************************************
*/
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,     int nCmdShow)
{
    //文件句柄
    HANDLE hFile;
    DWORD  dwWritten;
    TCHAR  szSystemDir[MAX_PATH]; //字符数组,用于存储系统目录

    GetSystemDirectory(szSystemDir, MAX_PATH);//获取系统目录
    hFile = CreateFile(TEXT("systemroot.txt"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);//创建文件systemroot.txt

    if (hFile != INVALID_HANDLE_VALUE)
    {
        if (!WriteFile(hFile, szSystemDir, lstrlen(szSystemDir), &dwWritten, NULL))//将系统目录,系统信息写入文件中
        {
            return GetLastError();
        }
    }
    CloseHandle(hFile);//关闭文件,返回
    return 0;
}
#9
love云彩2013-06-12 03:11
谢谢版主
1