Как вызвать функцию надстройки в одном XLL из другого XLL

Я создал пользовательскую функцию 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();
}

0

Решение

Первый важный момент, на который следует обратить внимание: XLL — это DLL.

При сборке XLL (DLL) Visual studio также должна создать файл LIB с тем же базовым именем (т. Е. Если первый называется project1.XLL, то он также должен создать project1.LIB).

Если вы добавляете файл заголовка с соответствующим определением функции во второй проект, а также добавляете библиотеку, созданную с помощью первого проекта, во второй проект, VS должен позаботиться о грязных битах вызова GetProcAddress () и т. Д.

extern "C" __declspec( dllimport )
LPXLOPER CalDaysInYear2(short DayCount);

Обратите внимание, что заголовок для второго проекта использует dllimport, а не dllexport.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]