我不打算深入探讨 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/