windows标准库中的定义不可访问

Definitions in windows standard libraries not accessible

本文关键字:访问 定义 标准 windows      更新时间:2023-10-16

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

WS_ERROR* error = NULL;

我想知道这个错误是怎么造成的。我在WS_ERROR上按F12,现在在WebServices.h上有定义:

typedef struct _WS_ERROR WS_ERROR; 

WS_ERROR是结构_WS_ERROR。按下_WS_ERROR上的F12,继续深入_WS_ERROR并停止!我无法更深入地了解_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,并将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..
}

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