Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ListEntry类用法 #包括 #包括“stdafx.h” #包括“List.h” 类型定义结构列表\u节点 { 列表\条目列表; int val1; }列表节点,*PLIST节点; int _tmain(int argc,_TCHAR*argv[] { int i=0; PLIST_节点pNewnode; pNewnode=新列表\节点; 列表输入头; 初始化头部和头部; 对于(i=0;ival1=i; InsertTailList(&head,&pNewnode->list); pNewnode=NULL; } 而(!IsListEmpty(&head)) { PLIST_ENTRY removeNode=RemoveHeadList(&head); PLIST_节点mydatanode=(PLIST_节点)包含_记录 (removeNode,LIST_节点,val1); printf(“%d\n”,mydatanode->val1); } 返回0; }_C_Winapi - Fatal编程技术网

ListEntry类用法 #包括 #包括“stdafx.h” #包括“List.h” 类型定义结构列表\u节点 { 列表\条目列表; int val1; }列表节点,*PLIST节点; int _tmain(int argc,_TCHAR*argv[] { int i=0; PLIST_节点pNewnode; pNewnode=新列表\节点; 列表输入头; 初始化头部和头部; 对于(i=0;ival1=i; InsertTailList(&head,&pNewnode->list); pNewnode=NULL; } 而(!IsListEmpty(&head)) { PLIST_ENTRY removeNode=RemoveHeadList(&head); PLIST_节点mydatanode=(PLIST_节点)包含_记录 (removeNode,LIST_节点,val1); printf(“%d\n”,mydatanode->val1); } 返回0; }

ListEntry类用法 #包括 #包括“stdafx.h” #包括“List.h” 类型定义结构列表\u节点 { 列表\条目列表; int val1; }列表节点,*PLIST节点; int _tmain(int argc,_TCHAR*argv[] { int i=0; PLIST_节点pNewnode; pNewnode=新列表\节点; 列表输入头; 初始化头部和头部; 对于(i=0;ival1=i; InsertTailList(&head,&pNewnode->list); pNewnode=NULL; } 而(!IsListEmpty(&head)) { PLIST_ENTRY removeNode=RemoveHeadList(&head); PLIST_节点mydatanode=(PLIST_节点)包含_记录 (removeNode,LIST_节点,val1); printf(“%d\n”,mydatanode->val1); } 返回0; },c,winapi,C,Winapi,有了这段代码,我无法正确获取val1数据,它给了我垃圾值?我做错了什么吗?请阅读。第三个参数描述为: 字段[输入] 地址指向的字段的名称,包含在类型的结构中 我怀疑您的代码: #include <windows.h> #include "stdafx.h" #include "List.h" typedef struct List_Node { LIST_ENTRY list; int val1; }LIST_NODE, *PLIST_N

有了这段代码,我无法正确获取val1数据,它给了我垃圾值?我做错了什么吗?

请阅读。第三个参数描述为:

字段[输入]

地址指向的字段的名称,包含在类型的结构中

我怀疑您的代码:

  #include <windows.h>
  #include "stdafx.h"
  #include "List.h"

  typedef struct List_Node
  {
     LIST_ENTRY list;
     int val1;
  }LIST_NODE, *PLIST_NODE;

  int _tmain(int argc, _TCHAR* argv[])
  {

     int i = 0;

     PLIST_NODE pNewnode;
     pNewnode = new LIST_NODE;


     LIST_ENTRY head;

     InitializeListHead(&head);

     for (i = 0; i < 3; i++)
     {

         pNewnode = new LIST_NODE;
         pNewnode->val1 = i;
         InsertTailList(&head, &pNewnode->list);
         pNewnode = NULL;
     }

     while (!IsListEmpty(&head))
     {

         PLIST_ENTRY removeNode = RemoveHeadList(&head);

         PLIST_NODE mydatanode = (PLIST_NODE)CONTAINING_RECORD   
                                                  (removeNode,LIST_NODE,val1);

         printf("%d\n", mydatanode->val1);
     }


     return 0;
   }
这是不正确的。这是因为包含_RECORD的
的第三个参数与您要传递的地址的类型不同。将其设置为
val1也没有意义。它需要做的是从
列表节点
中包含的
列表项
的地址中找出
列表节点
的地址

我认为:

PLIST_ENTRY removeNode = RemoveHeadList(&head);

PLIST_NODE mydatanode = (PLIST_NODE)CONTAINING_RECORD(removeNode,LIST_NODE,val1);

应该可以解决您的问题。

请阅读,直到您表明您至少花费了一些精力来调试自己的代码-1。是的,我尝试过调试。。。当我看到地址时,RemoveHeadList会为我提供正确的节点地址。但问题是,当我使用CONTAINING_RECORD宏时,节点地址不是我插入的地址。好的开始。我想你已经读过了
PLIST_ENTRY removeNode = RemoveHeadList(&head);

PLIST_NODE mydatanode = (PLIST_NODE)CONTAINING_RECORD(removeNode,LIST_NODE,list);