C++ 参数帮助字符串丢失函数向导中的最后一个字符(C+;+;XLL)
在注册XLL函数时,我有一个稍微奇怪的问题(虽然不是终端)。我使用xlfRegister调用,通常使用参数列表,但有两个问题:C++ 参数帮助字符串丢失函数向导中的最后一个字符(C+;+;XLL),c++,xll,C++,Xll,在注册XLL函数时,我有一个稍微奇怪的问题(虽然不是终端)。我使用xlfRegister调用,通常使用参数列表,但有两个问题: 函数描述和参数帮助字符串都附加了一个句号(“.”) 我似乎丢失了最后一个帮助字符串中的最后一个(可能是最后两个)字符 还有其他人遇到过这种情况吗?我担心在构造临时字节计数字符串时会发生意外情况。现在这不是一个大问题,如果后来发现我没有正确传递字符串,可能会产生一些意想不到的后果。我正在使用64位Excel,并编译一个64位xll(带有/D“_MBCS”编译器标志)。我将
Excel(xlfRegister, 0, 15, pDll,TempStr2("myUDF"),
TempStr2("PCCPPP"),
TempStr2("myUDF"),
TempStr2("Param1,Param2,Param3,Param4,Param5"),
TempStr2("1"),
TempStr2("My UDF functions"),
TempStr2(""),
TempStr2(""),
TempStr2("Returns a secret"),
TempStr2("Function Parameter 1"),
TempStr2("Function Parameter 2"),
TempStr2("Function Parameter 3"),
TempStr2("Function Parameter 4"),
TempStr2("Function Parameter 5"));
TempStr2函数(取自SDK中修改后的framewrk.cpp)实现为:
LPXLOPER TempStr2(LPSTR lpstr)
{
LPXLOPER lpx;
lpx = (LPXLOPER)GetTempMemory(sizeof(XLOPER));
int len = __min(255, lstrlen(lpstr));
lpx->xltype = xltypeStr;
lpx->val.str = GetTempMemory(len + 1);
strncpy(lpx->val.str + 1, lpstr, len);
lpx->val.str[0] = (BYTE)len;
return lpx;
}
UDF工作正常,但由于迂腐,这是函数向导中显示的内容:
前四个参数字符串附加了一个句号(.),该句号不在原始字符串中。没有太大的困难(这可能是故意的……如果我在琴弦上画上自己的句号,第二个就不会出现了)。如果我查看向导中的其他函数,所有参数帮助字符串似乎都以句号结尾,因此这可能是故意的
最后一个字符串“Function Parameter 5”丢失了最后一个字符('5'),并且没有额外的句号,这表明我可能丢失了两个字符
我很想听听关于可能发生的事情的任何建议。啊哈。。。我在已知SDK问题列表中发现: “函数向导中的参数说明字符串截断 pxArgumentHelp1参数和xlfRegister函数的所有后续参数都是与XLL函数的参数相对应的可选字符串。函数向导显示这些参数以在“参数构造”对话框中提供帮助。有时Excel会将与最终参数相对应的字符串截断一到两个c在对话框中显示时使用字符。可以通过添加额外的“空字符串”作为函数注册的最后一个“参数帮助”参数来避免此问题 所以,我将继续