指向指针 C++/CLI 包装器的指针
Pointer to a pointer C++/CLI wrapper
我正在尝试将托管C++/CLI 包装器写入非托管类。类中的一个方法具有类似
audiodecoder::Decode(byte *pEncodedBuffer, unsigned int uiEncodedBufLen, byte **pDecodedAudio, unsigned int *uiDecodedAudioLen)
其中 *pEncodedBuffer 是指向编码音频样本的指针,**pDecodedAudio 是函数初始化内存并存储解码音频的位置。实际上,数据是音频应该无关紧要。
此方法的包装器会是什么样子?任何建议都会有所帮助。
托管代码的一个优点是它使用垃圾回收器并具有强类型数组。 因此,很好地支持将数组作为函数返回值。 这使得你理想的包装器功能是这样的:
array<Byte>^ Wrapper::Decode(array<Byte>^ encodedBuffer) {
pin_ptr<Byte> encodedPtr = &encodedBuffer[0];
Byte* decoded = nullptr;
unsigned int decodedLength
int err = unmanagedDecoder->Decode(encodedPtr, encodedBuffer->Length, &decoded, &decodeLength);
// Test err, throw an exception
//...
array<Byte>^ retval = gcnew array<Byte>(decodedLength);
Marshal::Copy((IntPtr)decoded, retval, 0, decodedLength);
free(decoded); // WATCH OUT!!!
return retval;
}
请注意// WATCH OUT
评论。 您需要销毁解码器分配的缓冲区。 正确执行此操作需要了解解码器如何管理其内存,并且通常使 C++/CLI 代码与解码器模块共享相同的 CRT 非常重要。 如果没有好的协议或您无法编译解码器源代码,这往往会严重出错。
相关文章:
- C结构,其指针将被包装在unique_ptr中
- 如何将 c++ 类包装到 python 中,以便我可以使用 pybind11 访问其成员的公共方法(成员是一个对象指针)
- 如何包装多级原始指针以赋予其容器语义
- SDL 包装标头中的智能指针
- 智能指针包装CoTaskMemAlloc和CoTaskMemFree
- 使用可变参数模板(gcc、clang)的成员函数指针包装器
- C 11 / 14-是否有针对其他地方管理的资源的原始指针包装器
- 字符指针包装器的运算符>>
- 用C++11中的智能指针包装旧的C结构并自动释放它们
- SDL 类型的智能指针包装器是否安全
- 如何在c++绑定中用不透明指针包装c库
- 由于多次释放而停止 std::shared_ptr 来自 SIGSEV 的 C 指针包装器
- 指针包装器,所以我可以重载运算符
- 使用可变参数模板将函数指针包装在C++中
- 将指针包装到迭代器中,以便复制到STL容器中
- 智能指针包装处罚.使用std::map进行记忆
- 指针包装类-行为就像一个原始指针
- 如何使用智能指针包装数组
- 如何将原始指针包装到shared_ptr中,并防止shared_ptr删除对象
- 是否有可能制作一个具有NULL检查的通用c++函数指针包装器?