如何编写一个Excel C加载项函数返回一个string到Excel没有内存泄漏?

我正在使用C ++编写Excel XLL插件,我希望我的函数使用预定义的XLOPER12将string返回给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; } 

但显然这会造成内存泄漏。 有人build议我可以将res声明为静态variables,但我不知道如何初始化它。

所有的build议都欢迎。

最好

省去一些麻烦,并使用https://xll.codeplex.com 。 完整的代码注册和定义的function是

 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函数中,因为它将有一个堆栈存储,当函数返回时将被清除