如何编写一个Excel C加载项函数,在不泄漏内存的情况下向Excel返回字符串
How to write a Excel C add-in function that return a string to Excel without memory leak?
我正在使用C++编写一个Excel XLL插件,我希望我的函数使用预定义的XLOPER12将字符串返回到Excel。
据我所知,Excel要求函数返回一个指向内存的指针,然后它制作一个浅拷贝,然后在不清除函数中分配的内存的情况下离开。所以如果我写这样的东西:
extern "C" LPXLOPER12 WINAPI strgen() {
XLOPER12 res;
res.xltype = xltypeString;
res.val.str = (XCHAR*)malloc(2*sizeof(XCHAR));
res.val.str[0] = (XCHAR)1;
res.val.str[1] = L"X";
return (LPXLOPER12)&xRes;
}
但显然这会导致内存泄漏。有人建议我可以将res声明为静态变量,但我真的不知道如何初始化它
欢迎所有建议。
最佳
省去一些麻烦并使用https://xll.codeplex.com.注册和定义功能的完整代码是
static AddIn12 xai_strgen(
L"?strgen", L"STRGEN",
XLL_LPOPER12, L"");
LPOPER12 WINAPI strgen()
{
#pragma XLLEXPORT
static XLOPER12 xRes(L"X");
return &xRes;
}
您可以尝试声明静态数组并返回其地址
XCHAR s_res[3] = {0};
XLOPER12 res;
extern "C" LPXLOPER12 WINAPI strgen() {
res.xltype = xltypeString;
res.val.str = (XCHAR*)s_res;
res.val.str[0] = (XCHAR)1;
res.val.str[1] = L"X";
return (LPXLOPER12)&res;
}
请注意,您不应该在函数内移动s_res
,因为它将有一个堆栈存储,当函数返回
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 尽管遵循了规则,内存泄漏在哪里
- 为什么调用堆栈数组会导致内存泄漏
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 使用模板类的自定义列表类型中的内存泄漏
- 为什么以下C++代码中存在内存泄漏?
- Klocwork Inside的资源泄漏
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我是否生成线程并导致内存泄漏?
- 多线程程序中出现意外的内存泄漏
- 为什么此函数会导致内存泄漏?
- 在 C++ 库中使用cythonized python时内存泄漏
- 需要帮助查找内存泄漏
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 瓦尔格林德的内存泄漏使用新的
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- 如何编写一个Excel C加载项函数,在不泄漏内存的情况下向Excel返回字符串