[英]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_ERROR
的F12
深入到_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.