在C++中声明一个常量BYTE *

4

我目前正在尝试调用这个函数。以下是声明:

const void* WINAPI CertCreateContext(
  __in      DWORD dwContextType,
  __in      DWORD dwEncodingType,
  __in      const BYTE *pbEncoded,
  __in      DWORD cbEncoded,
  __in      DWORD dwFlags,
  __in_opt  PCERT_CREATE_CONTEXT_PARA pCreatePara
);

如您所见,第三个输入参数要求一个 const BYTE * 类型的变量,该变量代表您正在尝试创建的编码证书。我应该如何在c++中定义这样的变量?

4个回答

8
您不需要这样做。函数参数是一个指向const BYTE的指针,这意味着函数不会改变它所指向的字节。下面是一个简单的示例:
void f( const BYTE * p ) {
    // stuff
}

BYTE b = 42;
BYTE a[] = { 1, 2, 3 };

f( & b );
f( a );

当然,您需要包含声明BYTE类型的头文件。

@GMan 我知道,这就是为什么他们是我唯一向之询问的人,因为我希望那个点踩者可能会解释一下。 - anon
同意-答案完全有效。 - Puppy
@Neil:也许是一个老派的微软狂热者想要用匈牙利语回答问题。或者可能是因为漏了一个“;”而受到惩罚。无论如何,因为正确而加一分。 - Mike Seymour
@Mike 我通常在发布代码之前编译真实的代码,但对于这样的问题,我依靠我的代码写作技巧 - 谢谢 :-) - anon

0

你只需要声明一个 BYTE*,编译器会自动将非const转换为const


0
根据文档

pbEncoded是指向包含要复制的现有编码上下文内容的缓冲区的指针。


0

传递一个指向BYTE的常规指针。这里的const表示指向的对象在函数内部不会被修改。


谢谢你发现了这个问题,尼尔。我本来想说指向的对象不会被修改。当以传值方式传递指针时,指针本身肯定不能被修改,无论是const还是其他方式。已修复。 - bta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接