Windows标准库中的定义无法访问

时间:2014-10-18 10:28:01

标签: c++ winapi visual-c++

我正在玩网络服务示例。我有传递给各种函数的错误变量。

WS_ERROR* error = NULL;

我想知道这个错误是如何构建的。我在F12上按WS_ERROR,现在我WebServices.h有定义:

typedef struct _WS_ERROR WS_ERROR; 

好吧,WS_ERROR是结构_WS_ERROR。按_WS_ERROR上的F12更深入_WS_ERROR并停止!我无法深入_WS_ERROR定义。为什么?那么,如何定义_WS_ERROR

1 个答案:

答案 0 :(得分:0)

因为它是一个opaque type,即程序员不希望你把它放进去(无论出于何种原因)。

伪代码示例:想象一家公司有一个他们希望您通过公共API使用的库,但是不要让您知道他们如何处理引擎盖下的东西,他们只是手你是一个库文件和一个头文件来链接它,例如

  • Header.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,并将FakeStruct个对象(由其他API函数创建)传递给某些public_api_function

公司内部可能会做类似

的事情
// 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..
}

并确保您不会最终查看其内部数据类型(除非您使用了某些反转或有人将错误的调试版本公开)。