C++ 如何从一个XLL调用另一个XLL中的外接程序函数

C++ 如何从一个XLL调用另一个XLL中的外接程序函数,c++,winapi,visual-studio-2012,dll,xll,C++,Winapi,Visual Studio 2012,Dll,Xll,我制作了一个XLL+用户定义函数sum1,在我添加此加载项后,它可以在Excel中顺利运行。但现在我正在构建另一个XLL,比如sum2。我希望我能在这个外接程序sum2中调用sum1。由于sum1和sum2位于不同的XLL中,因此无法直接调用它们,需要一些代码来实现这一点。以前有人遇到过这个问题吗?有什么好办法吗 我搜索了这个问题,找到了下面的代码,这是通过evaluate和UDF函数完成的。但这段代码似乎非常旧,适用于VisualStudio2005,但不适用于2012,运行它时可能会出现名称

我制作了一个XLL+用户定义函数sum1,在我添加此加载项后,它可以在Excel中顺利运行。但现在我正在构建另一个XLL,比如sum2。我希望我能在这个外接程序sum2中调用sum1。由于sum1和sum2位于不同的XLL中,因此无法直接调用它们,需要一些代码来实现这一点。以前有人遇到过这个问题吗?有什么好办法吗

我搜索了这个问题,找到了下面的代码,这是通过evaluate和UDF函数完成的。但这段代码似乎非常旧,适用于VisualStudio2005,但不适用于2012,运行它时可能会出现名称错误

如果有人能在这方面帮助我,我将非常感激。多谢各位

// 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

构建XLLDL时,Visual studio还应创建一个具有相同基本名称的库文件,即如果第一个文件名为project1.XLL,则还应创建project1.LIB

如果将具有适当函数定义的头文件添加到第二个项目中,并将使用第一个项目创建的库添加到第二个项目中,那么VS应该处理调用GetProcAddress等的脏部分

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

注意,第二个项目的标题使用dllimport而不是dllexport。

只需在xll中调用导出的函数,就像使用GetProcAddress等调用dll函数一样。。我将为您添加dll和WinApi标记,以吸引其他答案。