C++ 无法访问windows标准库中的定义

C++ 无法访问windows标准库中的定义,c++,winapi,visual-c++,C++,Winapi,Visual C++,我正在使用web服务示例。我有一个传递给各种函数的错误变量 WS_ERROR* error = NULL; 我想知道这个错误是如何构造的。我在WS_错误上按F12,现在我在Web服务上。h有定义: typedef struct _WS_ERROR WS_ERROR; 嗯,错误是结构错误。通过按F12打开_WS_ERROR并停止,深入到_WS_ERROR!我无法深入讨论错误定义。为什么?那么,错误是如何定义的呢 因为这是一个,也就是说,程序员不想让你因为任何原因而插手的事情 一个伪代码示例:

我正在使用web服务示例。我有一个传递给各种函数的错误变量

WS_ERROR* error = NULL;
我想知道这个错误是如何构造的。我在WS_错误上按F12,现在我在Web服务上。h有定义:

typedef struct _WS_ERROR WS_ERROR; 
嗯,错误是结构错误。通过按F12打开_WS_ERROR并停止,深入到_WS_ERROR!我无法深入讨论错误定义。为什么?那么,错误是如何定义的呢

因为这是一个,也就是说,程序员不想让你因为任何原因而插手的事情

一个伪代码示例:假设一家公司有一个库,他们想让你通过公共API使用,但不想让你知道他们是如何在幕后处理事情的,他们只会给你一个库文件和一个头文件来链接它,例如

标题.h

// Public header to link against something
#pragma once

typedef struct FakeStruct* FakeStructPtr; // Opaque type

DLL_PUBLIC void public_api_function(FakeStructPtr obj);
您将使用API引用中解释的FakeStructPtr,并将由其他API函数创建的FakeStruct对象传递给一些公共函数

公司内部可能会采取类似的措施

// Internals
#include "Header.h"

struct RealDataType {
    int realdata1;
    float realdata2;
    // whatever..
};

void public_api_function(FakeStructPtr obj) {
    RealDataType* ptr = reinterpret_cast<RealDataType*>(obj); // Cast to real data
    // use the real data through RealDataType..
}

并确保您不会查看它们的内部数据类型,除非您使用了一些反转或有人获得了错误的调试构建公共版本。

我认为不允许您查看内部数据类型。MSDN表示用于引用错误对象的不透明类型。这是一个不透明的类型,你不应该知道它看起来像什么。它包含丰富的错误,这是一种发现函数失败时到底出了什么问题的方法。必须使用WsCreateError创建错误对象。并在调用失败后使用WsGetErrorString查询它。之后,您可能会使用WsResetError再次清除它,以便下次调用时可以使用它。