| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1671 人关注过本帖
标题:__in_ecount(nLength) LPCWSTR lpCharacter
只看楼主 加入收藏
yu965634383
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:119
专家分:195
注 册:2017-9-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
__in_ecount(nLength) LPCWSTR lpCharacter
WriteConsoleOutputCharacterW(
    __in HANDLE hConsoleOutput,
    __in_ecount(nLength) LPCWSTR lpCharacter,
    __in DWORD nLength,
    __in COORD dwWriteCoord,
    __out LPDWORD lpNumberOfCharsWritten
    );

这个函数里面 __in_ecount(nLength) LPCWSTR lpCharacter, 这个是什么数据类型的
搜索更多相关主题的帖子: DWORD 函数 数据类型 
2017-10-01 19:57
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:10 
MSDN:
An LPCWSTR is a 32-bit pointer to a constant string of 16-bit Unicode Charactor, which may be null-terminated.
This type is declared as follows:
typedef const wchar_t* LPCWSTR;
2017-10-01 20:03
yu965634383
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:119
专家分:195
注 册:2017-9-1
收藏
得分:0 
void out (void)
{
    HANDLE H = GetStdHandle (STD_OUTPUT_HANDLE);
    COORD WriteCoord = {0 , 0};
    char region[] = "nihao";
    int n = strlen (region);
    WriteConsoleOutputCharacter (H , region , n , WriteCoord , 0);
}
我这样写为什么不对呢

菜鸟一枚,求各位大神多多关照。
2017-10-01 20:12
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:0 
#include <windows.h>
#include <string.h>

void out (void)
{
    HANDLE H = GetStdHandle (STD_OUTPUT_HANDLE);
    COORD WriteCoord = {0 , 0};
    char region[] = "nihao";
    int n = strlen (region);
    //WriteConsoleOutputCharacter (H , region , n , WriteCoord , 0);
    int num=0;
    WriteConsoleOutputCharacter (H , region , n , WriteCoord , &num);
}

void main(void)
{
    out();
}
2017-10-01 20:47
yu965634383
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:119
专家分:195
注 册:2017-9-1
收藏
得分:0 
有点明白了,还要转换的。

菜鸟一枚,求各位大神多多关照。
2017-10-01 21:14
yu965634383
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:119
专家分:195
注 册:2017-9-1
收藏
得分:0 
WriteConsoleOutput这个函数能输出汉字吗

菜鸟一枚,求各位大神多多关照。
2017-10-02 10:58
yu965634383
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:119
专家分:195
注 册:2017-9-1
收藏
得分:0 
回复 4楼 吹水佬
大佬,我在vs2010上运行不了的。后来我直接用wchar_t类型才可以用。
    wchar_t Wstr[100] = L"你好";
    int n = wcslen(Wstr);
    WriteConsoleOutputCharacter (H ,Wstr , n , WriteCoord , 0);

菜鸟一枚,求各位大神多多关照。
2017-10-02 11:11
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:10 
以下是引用yu965634383在2017-10-2 10:58:50的发言:

WriteConsoleOutput这个函数能输出汉字吗

试过好象没问题,不知是否与控制台在关。
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-10-02 15:52
yu965634383
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:119
专家分:195
注 册:2017-9-1
收藏
得分:0 
# include <stdio.h>
# include <conio.h>
# include <windows.h>
# include <stdlib.h>
# include <string.h>
# include <time.h>

void OutputAttribute (void)//给指定的字符填充属性
{
    HANDLE H = GetStdHandle (STD_OUTPUT_HANDLE);
    COORD cursorposition = {30 , 1};
   
    WORD Attribute = FOREGROUND_RED | FOREGROUND_INTENSITY;
    DWORD UL;
    SetConsoleCursorPosition (H , cursorposition);
   
    for (int i = 1; i <= 200; i++)
    {
        printf ("0");
    }
    printf ("你好啊");
    FillConsoleOutputAttribute (H , Attribute , 200 , cursorposition , &UL);
    printf ("%d" , UL);
}

void OutputCharacter (void)
{
    HANDLE H = GetStdHandle (STD_OUTPUT_HANDLE);
    COORD cursorposition = {25 , 5};
    DWORD UL;
    char str[] = "你好,欢迎来到这里!";
    int n;
    PWCHAR Wstr;
    n = MultiByteToWideChar (CP_ACP , 0 , str , -1 , NULL , 0);
    Wstr = (PWCHAR)malloc (n*sizeof (WCHAR));
    MultiByteToWideChar (CP_ACP , 0 , str , -1 , Wstr , n);
    WriteConsoleOutputCharacter (H , Wstr , n-1 , cursorposition , &UL);
    free (Wstr);
}

void OutputCharacterAttribut (void)
{
    HANDLE H = GetStdHandle (STD_OUTPUT_HANDLE);
    COORD Buffersize = {80 , 25};
    COORD cursorposition = {25 , 8};

    CHAR_INFO info , infoarray[80*25];
    info.Attributes = FOREGROUND_RED | FOREGROUND_INTENSITY;
///这里将char类型转换为wchar_t类型
    char greeting[] = "您好,欢迎光临125!";
    int n;
    PWCHAR Wstr;
//    n = strlen (greeting);
    n = MultiByteToWideChar (CP_ACP , 0 , greeting , -1 ,NULL , 0);//这个也是求出长度。
//    printf ("%d" ,n);//char 与 wchar_t 类型的字符串长度不一样的。
    Wstr = (PWCHAR)malloc (n*sizeof (WCHAR));
    MultiByteToWideChar (CP_ACP , 0 , greeting , -1 , Wstr , n);
    n = wcslen (Wstr);//求字符串长度
//    printf ("%d" ,n);//
///////////////////////////////
    for (int i = 0; i < n; i++)
    {
        info.Char.UnicodeChar = Wstr[i];
        infoarray[80*8+(25+i)] = info;
    }
    SMALL_RECT rc1 = {25 , 8 , 25+n-1 ,8};
    WriteConsoleOutput (H , infoarray , Buffersize , cursorposition , &rc1);
    free (Wstr);
}

void BufferSize (void)
{
    HANDLE H = GetStdHandle (STD_OUTPUT_HANDLE);
    COORD SIZE = {100 , 25};
    SetConsoleScreenBufferSize (H ,SIZE);
    SMALL_RECT cr = {0 , 0 , 100-1 , 25-1};
    SetConsoleWindowInfo (H , true , &cr);
    CloseHandle (H);
}

int main (void)
{
//    BufferSize ();
    OutputAttribute();
    OutputCharacter ();   
    OutputCharacterAttribut ();
    getchar ();
   
    return 0;
}
请教下,为什么缓冲区的大小改变后什么都输出不了了

菜鸟一枚,求各位大神多多关照。
2017-10-02 19:56
yu965634383
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:119
专家分:195
注 册:2017-9-1
收藏
得分:0 
以下是引用吹水佬在2017-10-1 20:47:21的发言:

#include <windows.h>
#include <string.h>

void out (void)
{
    HANDLE H = GetStdHandle (STD_OUTPUT_HANDLE);
    COORD WriteCoord = {0 , 0};
    char region[] = "nihao";
    int n = strlen (region);
    //WriteConsoleOutputCharacter (H , region , n , WriteCoord , 0);
    int num=0;
    WriteConsoleOutputCharacter (H , region , n , WriteCoord , &num);
}

void main(void)
{
    out();
}

这样写的话总是不行
图片附件: 游客没有浏览图片的权限,请 登录注册

菜鸟一枚,求各位大神多多关照。
2017-10-02 20:07
快速回复:__in_ecount(nLength) LPCWSTR lpCharacter
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017016 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved