C++ C++;修改作为指针传递给函数的结构

C++ C++;修改作为指针传递给函数的结构,c++,pointers,struct,C++,Pointers,Struct,我有以下结构: typedef struct _wfs_result { REQUESTID RequestID; HSERVICE hService; SYSTEMTIME tsTimestamp; HRESULT hResult; union { DWORD dwCommandCode; DWORD dwEventID; } u;

我有以下结构:

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;
但是,当我试图修改函数内部的结构时,它不允许我(不编译) 这是我试图在函数中访问它的方式:

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时出现此错误:

错误:请求“*lppreslt”中的成员“RequestID”,该成员的指针类型为“LPWFSRESULT{aka wfs_result*}”(可能您想使用“->”


由于
WFSRESULT
是类型
WFSRESULT**
,请尝试以下操作:
(*lppreslt)->RequestID=123;

您有一个指向指针的指针,因此需要将其解引用两次。
(*lppreslt)->RequestID
可以工作


但是,在Windows上,这种类型的签名通常意味着被调用的函数需要分配内存并将其分配给
lppResult
。在这种情况下,您需要这样做。

lppResult是一个二级指针,这就是为什么您会遇到访问冲突。请尝试更多时间解除它。

LPWFSRESULT*lppResult
是指向结构指针的指针。通常意味着它是一个输出参数。您传递一个指向应存储结果的变量的指针

变量的类型是
WFSRESULT*
,而不是
WFSRESULT
。这意味着函数需要为
WFSRESULT
分配内存,并将指向
WFSRESULT
结构的指针放入输出变量中

您的问题是假定
*lppResult
包含有效指针,而实际上它包含垃圾

通过指针取消引用,可以避免在堆上创建新对象

int DLL_EXPORT WFSGetInfo ( HSERVICE hService, DWORD dwCategory, LPVOID lpQueryDetails, DWORD dwTimeOut, WFSRESULT & lppResult);

然后,您可以毫无问题地传递和修改输出参数。

我们可以猜测您收到的诊断吗?此诊断会在调试器中引发访问冲突。中没有出现分段错误。请检查内存分配或指针获取代码。@msbir如果您发布了一个完整的可编译示例,其他人将更容易找到它o重现您的问题。@AlanStokes感谢您的帮助,不幸的是,我只能访问我发布的代码,我正在尝试模拟一个DLL,以便在我反转主应用程序的代码时,其余操作在调试器中发生。因此,基本上我需要在函数中自己创建结构,并存储指向在传递的指针地址处的结构?是的。但是我建议取消传递指针,只传递一个指向结构的指针。在这种情况下,结构的内存是由调用方分配的。很抱歉,我无法使其工作,请您用几行代码描述一下您的意思好吗?