C++을 사용하여 Excel XLL 추가 기능을 작성하고 있습니다. 여기에서 함수는 미리 정의 된 XLOPER12를 사용하여 Excel로 문자열을 반환합니다.메모리 누수없이 Excel에 문자열을 반환하는 Excel C 추가 기능을 작성하는 방법은 무엇입니까?
필자가 이해했듯이 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를 정적 변수로 선언 할 수 있다고 제안하지만 실제로 초기화하는 방법을 모른다.
모든 제안을 환영합니다.
최저
샘플 코드도 대답도 좋지 않습니다. 두 경우 모두'res'가 스택에 선언되고 주소가 반환됩니다. 가장 좋은 경우에는 충돌이 발생하고 (문제가 있음을 즉시 알 수 있기 때문에) 최악의 경우에 합리적인 결과가 발생합니다 (코드에서 문제이므로 즉시 잡히지 않습니다). – prprcupofcoffee
@David 나는 그 문제를 발견했기 때문에 대답을 편집한다. BTW는 원래 코드에서 일부'xRes' 주소를 반환합니다. 난 그게 뭔지 모르겠다 – borisbn
메모리 관리는 여기에 문서화되어 있습니다 : http://msdn.microsoft.com/en-us/library/office/bb687840.aspx – indiv