我在DLL中,写入了完成端口的框架代码,然后导出标准函数给.Net
.Net 调用 Nativa Win32 Dll非常简单,我导出的函数大致为:
1.初始化函数 监听初始化并AcceptEx,启动工作者线程池
2.停止监听
3.向某SOCKET发送数据
4.设置某SOCKET的回调,当数据WSARecv的时候,调用此回调将数据传递给.Net处理
问题:
1. .Net没有函数的概念,那么当一个操作完成的时候,我怎样才能用回调的方式调用.Net某静态方法呢?2. 数据类型转换的问题. 我收到的数据都是内存BYTE数据。对于int long 之类都能找到.Net的数据类型对应。 但对于WCHAR的字符串应该用什么数据类型对应?
.Net 调用 Nativa Win32 Dll非常简单,我导出的函数大致为:
1.初始化函数 监听初始化并AcceptEx,启动工作者线程池
2.停止监听
3.向某SOCKET发送数据
4.设置某SOCKET的回调,当数据WSARecv的时候,调用此回调将数据传递给.Net处理
问题:
1. .Net没有函数的概念,那么当一个操作完成的时候,我怎样才能用回调的方式调用.Net某静态方法呢?2. 数据类型转换的问题. 我收到的数据都是内存BYTE数据。对于int long 之类都能找到.Net的数据类型对应。 但对于WCHAR的字符串应该用什么数据类型对应?
而回调是函数指针的方式怎么可以把委托作为函数指针传递呢??
-
WCHAR肯定是2byte, 但是怎样把他转到string类型呢
在.Net里面一下要写unsafe代码才能做到, 所以还是采用DLL + .Net的机制
DLL负责通信底层
.Net负责业务处理
2、WCHAR 用String,要加上自定义属性:CharSet=CharSet.Unicode 。
--------我只见过 委托能关联到 COM的回调接口但我现在是函数指针, 怎么自动转换?
i.e.
typedef VOID (*PFN_OnDataRecv)( _int32 nMsgType, _int32 nSize, LPBYTE * lpBuf); 导出标准函数 SetRecvFun( LPVOID lpFun)那如何将委托传递进去?
2 没看清
WCHAR 用 STRING ,注意参数的编码给是
charset
在C#中这样定义:
SetRecvFun(Delegate lpFun)