繁体   English   中英

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

[英]Definitions in windows standard libraries not accessible

我正在玩Web服务示例。 我有传递给各种功能的错误变量。

WS_ERROR* error = NULL;

我想知道如何构造此错误。 我在WS_ERROR上按F12 WS_ERROR ,现在在WebServices.h具有以下定义:

typedef struct _WS_ERROR WS_ERROR; 

好吧, WS_ERROR是结构_WS_ERROR 通过按_WS_ERRORF12深入到_WS_ERROR并停止! 我无法深入到_WS_ERROR定义。 为什么? 那么,如何定义_WS_ERROR

因为它是一个不透明的类型 ,即程序员不希望您(无论出于何种原因)投入使用的某种类型。

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

并确保您最终不会了解它们的内部数据类型(除非您使用了某些反向操作或有人得到了错误的公共调试版本)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM