C#我想取得函数名的指针该怎么做

C#我想取得函数名的指针该怎么做,第1张

这个函数名的指针我不想委托 因为我要用这个指针作为参数调用一个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++重载函数 指针 或 地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9499195.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存