C++正在修改作为指针传递给函数的结构
C++ Modifying struct passed to function as a pointer
我有以下结构:
typedef struct _wfs_result
{
REQUESTID RequestID;
HSERVICE hService;
SYSTEMTIME tsTimestamp;
HRESULT hResult;
union {
DWORD dwCommandCode;
DWORD dwEventID;
} u;
LPVOID lpBuffer;
} WFSRESULT, * LPWFSRESULT;
一个指向结构的指针被传递给这个函数:
int DLL_EXPORT WFSGetInfo ( HSERVICE hService, DWORD dwCategory, LPVOID
lpQueryDetails, DWORD dwTimeOut, LPWFSRESULT * lppResult)
然而,当我试图修改函数内部的结构时,它不允许我(不编译(这就是我试图在函数内部访问它的方式:
lppResult->RequestID = 123;
or
(*lppResult).RequestID = 123;
第二个正在编译,但我在调试器中遇到了访问冲突。有什么想法吗?
编辑:这是我在代码块中得到的错误:
'RequestID' in 'lppResult', which is of non-class type '_wfs_result**'|
||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|
第二个没有在Wandbox:上使用gcc 4.8.2编译时出现此错误
错误:请求"*lppResult"中的成员"RequestID",该成员的指针类型为"LPWFSRESULT{aka_wfs_result*}"(可能您打算使用"->"?
由于WFSRESULT
是类型WFSRESULT**
,请尝试以下操作:(*lppResult)->RequestID = 123;
您有一个指向指针的指针,因此需要取消引用它两次。(*lppResult)->RequestID
会起作用。
然而,在Windows上,这种签名通常意味着被调用的函数需要分配内存并将其分配给lppResult
。在这种情况下,你需要这样做。
LPWFSRESULT * lppResult
是指向结构指针的指针。通常这意味着它是一个输出参数。您将一个指针传递给一个变量,该变量应存储结果。
变量的类型是WFSRESULT*
,而不是WFSRESULT
。这意味着该函数需要为WFSRESULT
分配一个内存,并将指向WFSRESULT
结构的指针放入输出变量中。
您的问题是假设*lppResult
包含有效指针,而实际上它包含垃圾。
通过指针取消引用,可以避免在堆上创建新对象
int DLL_EXPORT WFSGetInfo ( HSERVICE hService, DWORD dwCategory, LPVOID lpQueryDetails, DWORD dwTimeOut, WFSRESULT & lppResult);
然后,您可以毫无问题地传递和修改输出参数。
LppResult是一个级别2的指针,这就是访问冲突的原因。试着多给它一点时间。
相关文章:
- 使用不带参数的函数访问结构元素
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 链表,反向函数,数据结构
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 需要帮助将结构数组传递给函数
- 使用cpp中的结构和函数的多个学生条目
- 如何传递带有通过引用传递的结构参数的函数?
- 在类构造函数中使用结构变量
- 在 c++ 中将变量作为结构构造函数中的引用传递
- 在类构造函数中定义结构变量的参数
- 如何在模板类函数中分配结构值?
- 我应该在C++中将这些结构用作参数化构造函数吗?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 在结构外部调用指向函数的指针
- 函数:结构的数组
- C++错误:只能为对象和函数结构指定存储类
- 将libuv与函数结构一起使用,而不是函数回调
- 从c#调用c++函数-结构体,指针,函数指针
- 函数结构数组输入cin问题