这个函数名的指针我不想委托 因为我要用这个指针作为参数调用一个C++的函数
//上面那句话没有因果关系, 委托就是函数指针,你定义一个和函数一样的委托, 将函数放入委托,然后将委托当作参数就可以了,效果就是调用那个函数
如果你仅仅是想试试C# 中的指针,那就用unsafe 关键字吧,用法去查MSDN就好了
WINDOWS *** 作系统总是将HWND窗口句柄同创建它的线程进行关联。并且在很多文档中再三强调,窗口处理函数应该放在一个线程中进行调用,这个线程就是创建窗口的线程。
诸如一些训诫指出--最好把所有的窗口创建都放在主线程中,不要在多个线程中进行窗口创建和函数处理,响应用户界面的消息处理在主线程中进行,将和用户界面无关的工作放在其他线程中进行,这些其他线程又派生出工作线程和后台线程的概念。不管如何叫法,其中心思想还是如开始所说,不要在多线程中处理HWND。
MFC也有这样的原则,因此简单将窗口类指针,如CWnd,CEdit传给新线程,其调用可能会正常,可能就会断言失败。
楼主看下MSDN的说明,里面明确提出,在新线程中,可以将HWND传给新线程,而不是窗口类指针。基于这样的说明正常处理应该是:
1)分配全局缓存,用来存储ListCtrl的文本信息。
TCHAR GlobalBuffer[200];
2)定义自定义消息
#define WM_GETMYTEXT (WM_USER + 10)
3)映射自定义消息函数
BEGIN_MESSAGE_MAP(CMyWindow, CDialog)
ON_MESSAGE(WM_GETMYTEXT, OnGetText)
END_MESSAGE_MAP
4)定义自定义消息函数
HRESULT CMyWindow::OnGetText(WPARAM wParam, LPARAM lParam)
{
this->m_listGetItemText((int)wParam, (int)lParam, GlobalBuffer, 200);
return 0L;
}
5)将窗口句柄传给新线程
6)在新线程中获取文本
int row = 3;
int col = 4;
SendMessage(hwndList, WM_GETMYTEXT, (WPARAM)row, (LPARAM)col);
以上是个大概的思想可以灵活使用,譬如WPARAM和LPARAM可以充分利用,另外就是SendMessage是有返回值的,这个返回值也可以利用,返回值就是CMyWindow::OnGetText中return 的HRESULT值。
#include <iostream>
using namespace std;
int Max(int x,int y){return x>yx:y;}
double Max(double x,double y){return x>yx:y;}
int(p)(int,int)=Max;
double(q)(double,double)=Max;
int main()
{
p(3,4);
cout<<(void)p<<endl<<(void)q<<endl;;
system("pause");
return 0;
}
虾米意思?是指类的成员变量是否可以指向类中的成员函数吗?如果这样子的,类的成员函数指针就是用来起这个作用,mfc消息路由机制也是机遇此原理。#include <stdioh>class A{public: A() \/\/ Ctor { m_pfn1 = A::foo; \/\/ 有没有取地址符号一样 m_pfn2 = &A::bar; (this->m_pfn1)(); (this->m_pfn2)(0); } void foo(){printf("foo\n");} \/\/ 类函数 virtual void bar(int){printf("bar\n");} void (A::m_pfn1)(); \/\/ 类函数指针成员变量 void (A::m_pfn2)(int); \/\/ 类函数指针成员变量};int _tmain(int argc, _TCHAR argv[]){ \/\/ 1 类函数指针成员变量的使用 A a; A p = &a; (a(am_pfn1))(); (a(am_pfn2))(0); \/\/ 多态 (p->(p->m_pfn1))(); (p->(p->m_pfn2))(0); \/\/ 多态 \/\/ 2 类外函数指针变量的使用 typedef void (A::MemFunPtr)(); MemFunPtr memPtr = &A::foo; (amemPtr)(); (p->memPtr)(); return 0;}\r\n补充:\r\n-> 和 是C++新增加的 *** 作符号,专用类成员指针变量取址(成员函数指针,成员变量指针)\r\n
直接用函数名调用可读性好一点,如果想写一个通用一点的方法来处理不同的函数,则调用不同函数的地方需要多次类似重复地使用不同的函数去调用。函数指针就可以避免这个问题,不管是普通调用或者是形参,只要参数类型和返回值一致即可,不必重复使用函数名,尤其是函数指针数组更是使用得广泛,比如虚函数表就是这样一个函数指针数组。
以上就是关于C#我想取得函数名的指针该怎么做全部的内容,包括:C#我想取得函数名的指针该怎么做、如何从全局的线程函数中获取文档类指针、如何获取 C++重载函数 指针 或 地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)