c++ - 如何在 MSVC 中获取成员函数指针?

标签 c++ excel winapi visual-c++

我不打算深入探讨 Excel 方面的太多细节,我基本上是从这个示例中获取代码:

C++ app automates Excel (CppAutomateExcel)
解决方案1.cpp

所以我在 MSVC 中尝试了这段代码,它编译成功了:

class foo { public: virtual void bar(){} };

int main()
{
    void (foo::*p)() = &foo::bar;
}

但是在Excel中捕获移动函数地址的类似代码不起作用:

int main()
{
    Excel::_ApplicationPtr spXlApp;
    HRESULT hr = spXlApp.CreateInstance(__uuidof(Excel::Application));
    Excel::WorkbooksPtr spXlBooks = spXlApp->Workbooks;
    Excel::_WorkbookPtr spXlBook = spXlBooks->Add();
    Excel::_WorksheetPtr spXlSheet = spXlBook->ActiveSheet;
    HRESULT(Excel::_Worksheet::*pMove)(...) = &spXlSheet->Excel::_Worksheet::Move;

    <... irrelevant code ...>

    return 0;
}

这有以下编译器错误:

error C2276: '&': illegal operation on bound member function expression

如果我删除了 &,它说我应该把它加回去:

error C3867: 'Excel::_Worksheet::Move': non-standard syntax; use '&' to create a pointer to member

如果您能提供有关此处操作的任何帮助,我们将不胜感激。

最佳答案

你在你的问题中说“但是类似的代码......”然后你展示了你没有做同样事情的代码。尝试使用与在较小示例中设置 p 时相同的语法来设置 pMove 。尝试类似 &Excel::_Worksheet::Move;(没有“spXlSheet->”)。

如果您可以在设置函数指针时指定要为其调用函数指针的对象的特定实例,那么我不知道这种功能。从您设置变量的位置删除 spXlSheet-> 后,在您想要调用函数指针的位置使用它。

关于c++ - 如何在 MSVC 中获取成员函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38336209/

相关文章:

c++ - 如何使用C++ 11声明静态查找表

c++ - 用现代 C++ 替换宏

go - Windows 10 上未定义的 : syscall. Mmap

multithreading - 将 ThreadFunction 传递给 CreateThread API 的正确方法是什么

c++ - 编写 SEH 翻译器

c++ - 从缓冲区中删除第 n 位,然后移动其余位

C++ 全局重载运算符=

SQL-Server 用 NULL 值替换空单元格

vba - Excel VBA中的列类型转换

xml - 如何将 XSD 文件转换为 XLS