C++修改结构传递到用作指针
我有以下结构:C++修改结构传递到用作指针
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)
然而,当我尝试修改函数里面的struct,它不会让我(不编译) 这是我试图在函数里面访问它的:
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)) ===|
LPWFSRESULT * lppResult
是指向结构的指针。通常这意味着它是一个输出参数。您将一个指针传递给应该存储结果的变量。
变量的类型是WFSRESULT*
,而不是WFSRESULT
。这意味着该功能预计会为WFSRESULT
分配一个内存,并将一个指向WFSRESULT
结构的指针放入输出变量中。
你的问题是,你认为*lppResult
包含有效的指针,而实际上它包含垃圾。
可避免指针在堆上创建新的对象解引用
int DLL_EXPORT WFSGetInfo (HSERVICE hService, DWORD dwCategory, LPVOID lpQueryDetails, DWORD dwTimeOut, WFSRESULT & lppResult);
然后,你可以通过和修改输出参数没有任何问题。
第二个与此错误上Wandbox没有编译用gcc 4.8.2:
error: request for member 'RequestID' in '* lppResult', which is of pointer type 'LPWFSRESULT {aka _wfs_result*}' (maybe you meant to use '->' ?
由于WFSRESULT
是类型WFSRESULT**
,请试试这个:(*lppResult)->RequestID = 123;
你有一个指针指针,所以你需要对它进行两次取消引用。 (*lppResult)->RequestID
会起作用。
但是,在Windows上,这种签名通常意味着被调用的函数需要分配内存并将其分配给lppResult
。在这种情况下,您需要这样做。
LppResult是一个2级指针,这就是为什么你有访问冲突。尝试让它更多的时间。
我们是否猜测您收到的诊断信息? –