gpt4 book ai didi

c++ - 如何将 fstream 读入 LPSAFEARRAY?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:30:24 27 4
gpt4 key购买 nike

我正在尝试在 C++ 中的托管 dll 上调用方法。其中一个参数是字节数组,库导入将其转换为 LPSAFEARRAY。字节数组/LPSAFEARRAY 旨在成为文件的内容。如何将文件读入 LPSAFEARRAY 以传递给该方法?

这是生成的库头文件中的函数签名:

virtual HRESULT STDMETHODCALLTYPE AlterDocument(
LPSAFEARRAY document/*[in]*/,
LPSAFEARRAY* pRetVal/*[out,retval]*/) = 0;

第二个参数是另一个字节数组,当它从方法返回时我需要使用它。

最佳答案

您最初可以创建一个 SAFEARRAYBOUND 并将其初始化为 C 数组,例如SAFEARRAYBOUND sabdBounds[2] = { {10, 0}, {20, 0\} }; 然后使用 SafeArrayCreate (http://msdn.microsoft.com/en-us/library/windows/desktop/ms221234(v=vs.85).aspx) 使用适当的类型和尺寸以获得所需的 LPSAFEARRAY

更新:

这是一段代码,展示了如何创建 LPSAFEARRAY,如您所见,我在创建数组之前确定了文件的大小,以便能够将数据读入其中直接,您也可以将文件内容存储在一些中间缓冲区中,然后稍后创建 SAFEARRAYBOUND:

    #include <Windows.h>
#include <fstream>
#include <cstdlib>

int main(int argc, char** argv)
{
std::streampos fileSize = 0;
std::ifstream inputFile("file.bin", std::ios::binary);
fileSize = inputFile.tellg();
inputFile.seekg( 0, std::ios::end );
fileSize = inputFile.tellg() - fileSize;
SAFEARRAYBOUND arrayBounds[1] = { {fileSize, 0}}; // You have one dimension, with fileSize bytes
LPSAFEARRAY safeArray = SafeArrayCreate(VT_I1, 1, arrayBounds);
SafeArrayLock(safeArray);
char* pData = reinterpret_cast<char*>(safeArray->pvData); // This should be the pointer to the first element in the array, fill in the data as needed
// Do your stuff
SafeArrayUnlock(safeArray);
SafeArrayDestroy(safeArray);
inputFile.close();
}

关于c++ - 如何将 fstream 读入 LPSAFEARRAY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13034585/

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