gpt4 book ai didi

c++ - 无法存储/检索 SafeArray 中的值

转载 作者:行者123 更新时间:2023-11-30 01:48:03 25 4
gpt4 key购买 nike

我是 SAFE ARRAY 概念的新手 MSDN没有太大帮助。我试图将安全数组传递给函数。

这是我的代码

void func2(__int64 *a)
{
*a = 100000;
}
void func1(SAFEARRAY **saOfmem )\
{
LONG rgIndex = 0;
__int64 memVal;
func2(&memVal);
SafeArrayPutElement(*saOfmem,&rgIndex,&memVal);

}

int _tmain(int argc, _TCHAR* argv[])
{
SAFEARRAY *saOfmem;
SAFEARRAYBOUND rgsabound[1];
__int64 val;

rgsabound[0].lLbound = 0;
rgsabound[0].cElements = 1;
saOfmem = SafeArrayCreate(VT_UI8 | VT_BYREF, 1, rgsabound);

func1(&saOfmem);

SafeArrayGetElement(saOfmem,0,&val);
return 0;
}

不幸的是,该值未在安全数组中更新。我做错了什么?

最佳答案

  1. 你不应该使用 VT_BYREF,它意味着通过引用传递值。你有一个简单的 int64 数组,没有引用。

  2. 你应该使用非空索引(见评论)。 SafeArrayGetElement 需要一个指针来索引数组,而不是整数作为第二个参数。

    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = 1;
    saOfmem = SafeArrayCreate(VT_UI8, 1, rgsabound); ///<< remove VT_BYREF

    func1(&saOfmem);

    LONG rgIndex = 0; // <<< use non-null as parameter
    SafeArrayGetElement(saOfmem, &rgIndex, &val);

关于c++ - 无法存储/检索 SafeArray 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30730559/

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