Я создал пользовательскую функцию XLL+, sum1, и она может работать плавно в Excel после добавления этой надстройки. Но теперь я строю еще один XLL, скажем, sum2. Мне жаль, что я не могу назвать sum1 в этом добавлении в sum2. Поскольку sum1 и sum2 находятся в разных XLL, они не могут быть вызваны напрямую и для этого требуются некоторые коды. Кто-нибудь встречает эту проблему раньше и любой хороший способ сделать это?
Я искал проблему и нашел коды ниже, которые выполняются с помощью функции оценки и UDF. Но, похоже, код очень старый и подходит для visual studio 2005, но не для 2012 года, и я могу получить ошибку #Name при запуске.
Будет действительно признателен, если кто-то может мне помочь в этом. Большое спасибо.
// Function: CalDaysInYear2
// Purpose: Calls a function in another XLL
//{{XLP_SRC(CalDaysInYear2)
// NOTE - the FunctionWizard will add and remove mapping code here.
// DO NOT EDIT what you see in these blocks of generated code!
IMPLEMENT_XLLFN2(CalDaysInYear2, "RI", "CalDaysInYear2",
"DayCount", "Date & Time", "Calls a function in another XLL,"
" which returns number of days in a year according to the"
" day count", "Day count convention\000", "\0appscope=1\0",
1)
extern "C" __declspec( dllexport )
LPXLOPER CalDaysInYear2(short DayCount)
{
XLL_FIX_STATE;
CXlOper xloResult;
//}}XLP_SRC
static int xlfEvaluate = 257;
static int xlUDF = 255;
CXlOper xloName, xloRef;
int rc = 0;
xloName = "CalDaysInYear";'enter code here'
if (!rc)
rc = xloRef.Excel(xlfEvaluate, 1, &xloName);
if (!rc)
rc = xloResult.Excel(xlUDF, 2, &xloRef, &CXlOper(DayCount, 0));
return xloResult.Ret();
}
Первым важным моментом является то, что XLL - это DLL.
Когда вы создаете XLL (DLL), Visual Studio также должна создавать файл LIB с тем же самым базовым именем (т.е. Если первый называется project1.XLL, тогда он также должен создавать project1.LIB).
Если вы добавите файл заголовка с соответствующим определением функции во второй проект, а также добавьте библиотеку, созданную с первым проектом, в свой второй проект, тогда VS должен позаботиться о грязных битах вызова GetProcAddress() и т.д.
extern "C" __declspec( dllimport )
LPXLOPER CalDaysInYear2(short DayCount);
Обратите внимание, что заголовок для второго проекта использует dllimport, а не dllexport.
xll
как если бы вы вызывали функциюdll
(используяGetProcAddress
и т. Д.). ЯWinApi
тэгиdll
иWinApi
для вас, чтобы привлечь другие ответы.