当前位置:编程学习 > C#/ASP.NET >>

C#中向 MFC DLL 中的PostThreadMessage 传递参数

用MFC编写的一个DLL,其中有一个函数是这样的 
Void SendData(CWinThread *p)
{
  p->PostThreadMessage(WM_GetData,0,0)
}
现在需要在C#中启动一个线程,接收这个DLL发出的数据,该如何传递参数p呢? --------------------编程问答-------------------- 需要在C#添加引用
[DllImport("XXX.dll", CharSet = CharSet.Auto)]
public static extern void SendData(ref CWinThread p)

然后调用 --------------------编程问答-------------------- [DllImport("XXX.dll", CharSet = CharSet.Auto)]
public static extern void SendData(IntPtr p)

p应该是一个指向CWinThread 类的指针. --------------------编程问答-------------------- 谢谢楼上二位的回复,问题是我在C#中启动了一个接收线程,如何把这个线程的信息(比如线程ID等)格式化成CWinThread *的形式作为参数传给SendData呢? --------------------编程问答-------------------- 你MFC的DLL就不应该这样写成这样的,Void SendData(CWinThread *p)其中的CWinThread 类是MFC自已封装的一个类,C#平台是不识别的,这样不是平台通用的DLL.

如果你的DLL中封装了一个方法能够返回一个CWinThread 类的指针,让你可以传递给SendData方法才有可能调用成功.如果没有,现在你可以直接在你的接收线程中调用PostThreadMessage这个API试试.
--------------------编程问答-------------------- 我现在是想在C#的接收线程中调用WIN32 API中的GETMESSAGE来接收消息,但是DLL中发送消息用的是CWinThread 的PostThreadMessage,不是标准的API中的PostThreadMessage,因此必须要把接收线程的信息作为参数传给DLL的函数中去啊,问题是怎么样才能把在C#中创建的接收线程的信息格式化成CWinThread 格式的,然后传给DLL中的函数呢? --------------------编程问答-------------------- C#平台是不识别CWinThread 的,所以是创建不出来的.要想跨平台调用你应该只使用C语言的基本数据类型才可以的

你可能需要修改DLL的源码让它可以使用标准的API中的PostThreadMessage.

你C#中的线程现在可以接收到DLL中发出的消息不?
看你的SendData只是发送了一个消息,可不可以直接就在SendData方法中创建一个CWinThread实例,直接发送消息?
--------------------编程问答-------------------- 这个DLL中的内容是不能更改的,所以只能在转换上想办法了啊! --------------------编程问答-------------------- 你需要使用MFC再封装一个DLL来调用你这个DLL中SendData的方法,然后用C#再调用你封装后的DLL.
想直接调用成功是不行的
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,