gpt4 book ai didi

c++ - Windows 标准库中的定义不可访问

转载 作者:太空宇宙 更新时间:2023-11-04 13:44:43 26 4
gpt4 key购买 nike

我正在玩 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是怎么定义的呢?

最佳答案

因为它是一个 opaque type ,即程序员不希望您插手的东西(无论出于何种原因)。

一个伪代码示例:假设一家公司有一个库,他们希望您通过公共(public) 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..
}

并确保您最终不会查看它们的内部数据类型(除非您使用了一些逆向或某人公开了错误的调试版本)。

关于c++ - Windows 标准库中的定义不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26438755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com