说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

用C#调用packet.dll里的函数出错,请高手帮忙调一下!

编辑:说三道四文库 发布时间:2017-04-28 06:52
HTML文档下载 WORD文档下载 PDF文档下载
packet.dll里有个函数PacketGetAdapterNames,带两个参数sStr和bufferSize,一个是存放网卡信息的缓冲区,另一个是缓冲区大小。我写一段代码运行之后函数已经返回true了,bufferSize也被改了,但是sStr没变。代码贴在下面了,很着急,请哪位高手帮忙调一下,谢谢!




    public partial class Form1 : Form
    {
        [DllImport("packet.dll",EntryPoint="PacketGetAdapterNames",CharSet=CharSet.Ansi)]
        public static extern bool PacketGetAdapterNames([MarshalAs(UnmanagedType.LPStr)]string sStr, ref int BufferSize);
        
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            bool b = false;
            int length = 40;
            string an = new string('0',length);
            b = PacketGetAdapterNames(an, ref length);
            NetworkInterface[] ni = NetworkInterface.GetAllNetworkInterfaces();
            label1.Text = an;
        }
    }

你PacketGetAdapterNames函数的原型是什么? 

public static extern bool PacketGetAdapterNames([MarshalAs(UnmanagedType.LPStr)]string sStr, ref int BufferSize);

你这样的调用方式sStr肯定是不会改变的。、
你的C函数原型中该位置要么是char** sStr,要么是char*&.这样才能改变传进来的值。
C#中相应处也应该是类似ref string..
感谢!不过函数的原型是LPStr string,昨天晚上试了一晚上,忘了试的是ref string还是ref char[]了,好像都不行,中午回宿舍才能再试,呵呵!
什么叫 LPStr   string,我问你的C++函数的原型是什么?
以前只用过C++开发过WinPcap的东东

第一个参数可以用这个试试:


//声明:
[DllImport("packet.dll",EntryPoint="PacketGetAdapterNames",CharSet=CharSet.Ansi)]
public static extern bool PacketGetAdapterNames(StringBuilder adapterName, ref int BufferSize);

//使用:

while (1)
{
    StringBuilder sb = new StringBuilder(260);
    int bufLen = 260;

    if (PacketGetAdapterNames(sb, ref bufLen))
    {
        // 做你想做的事,比如把得到的网卡名放到一个List里
     }
    else
    {
        break;
    }
}
其实CharSet=CharSet.Ansi 这个不该设置,我拷贝楼主的代码时没注意
不设置应该默认Auto

还有可能用户机器会有不止一个网卡(比如用VM虚拟机),所以需要在一个循环里读取,直到枚举完为止
楼上的大哥,按你的方法还是没返回正确的结果,sb里面是空的,无奈啊。。。。。。
麻烦大家说说自己用的WinPcap都是哪一版的啊?我又试了4.01、02、03这三个版本的,都不行
为了解决你问题,你又不肯给出函数的原型,自己搜了一下
PacketGetAdapterNames ,。你的问题出在,string sStr 这个是WCHAR * 类型,所以是宽字符的,所以

([MarshalAs(UnmanagedType.LPWStr)]string sStr
楼上的大哥实在是不好意思,我在Packet32.h里面看到的sStr类型为PTSTR,试着用你的方法改我的程序,同样得不到网卡名字列表。我想知道这个函数返回的网卡名字到底是注册表中的那个键值?知道的话就可以用C#里面自带的函数了,我的目的很简单,就是要找到网卡的名字然后打开它用它给交换机发送数据包。
在WINDOWS头文件中定义如下,、
typedef LPWSTR PTSTR, LPTSTR;
typedef __nullterminated NWPSTR, *LPWSTR, *PWSTR;

所以PTSTR 就是WCHAR *。

奇怪。你的字符集CharSet=CharSet.Unicode,数据类型用StringBuilder也不行。。?
都试过了啊,就是不行,运行之后b的值能改成true,length能变成242,就是an不变,还有什么办法能得到网卡名字吗?
有个问题:
你的机器上要先安装同版本的WinPCAP驱动才行
否则光用dll是得不到的
还有没有发现楼主有初始化pcap lib啊?!
你看看.h头文件,应该先调用初始化库的函数  然后再调用其他功能函数
这个我记得不是很清了,也许你用的这个函数无需初始化pcap库
up
回palmax大哥,我装winpcap了,小弟才疏学浅,还不知道C#里面初始化库的函数怎么写,pcap lib库具体在什么地方
转化成byte数组再传过去吧

            //声明:


                        [DllImport("packet.dll",EntryPoint="PacketGetAdapterNames",CharSet=CharSet.Auto)]
public static extern bool PacketGetAdapterNames(ref byte[] adapterName, ref int BufferSize);

//使用:

while (1)
{

    if (PacketGetAdapterNames(sb, ref bufLen))
    {
      //把byte数组转化为你要的字符串
        // 做其他事
     }
    else
    {
        break;
    }
}
楼主:

昨天上网查了下,你的这个PacketGetAdapterNames函数是不用其他初始化的,它是第一个要调用的函数,它是读注册表的,返回的sStr是网卡名的连续字符串,中间用一定的字符来分隔的,我现在手里没PCAP的环境,要不你再试试:

//声明:
[DllImport("packet.dll",EntryPoint="PacketGetAdapterNames",CharSet=CharSet.Auto)]
public static extern bool PacketGetAdapterNames([MarshalAs(UnmanagedType.LPStr)]StringBuilder adapterName, ref int BufferSize);

//使用:
StringBuilder sb = new StringBuilder(4096);
int bufLen = 4096;

if (PacketGetAdapterNames(sb, ref bufLen))
{
    // 做你想做的事,比如把得到的网卡名放到一个List里
}
搞定,谢谢!
“扫描建模”速建AR应用 Vuforia 4.0 SDK更新 硅谷里的外星人:纵观Reddit十年风雨路 不见不散 Cloud Foundry Meetup活动将首次走进杭州 独立开发者:新手做2D手游该用哪些工具? 求安全化危机!Uber研发生物识别技术、聘请前亚马逊运营 JavaScript社区开发者调查:服务端JS盛行 AngularJS使用者最多 去中心化、去中介化,微信商业化路径清晰了吗? 微信企业号认证简化了,你造吗? 专访瀚思安信联合创始人:大数据技术助力企业实现主动智能防御 挑选IBM Bluemix作为云平台的10大理由 10年技术积累成就极光压缩引擎,欧朋流量宝5.0面世 【图文实录】12月19日CTO俱乐部走进杭州 mlpack:可伸缩C++机器学习库 本地项目托管将死?类GitHub站点永存! 2014年讨论最多的编程语言:JavaScript称霸 移动Web应用UI框架大比拼:Ionic vs. Famo.us vs. F7 vs. OnsenUI 面包旅行CTO薛亮:做旅游与社交有机结合的先行者 盘点开发者最喜爱的Swift技巧 2017年,开发者还能从移动广告中收获什么? 《近匠》茄子快传,让设备更好地连接 面向移动应用程序的DevOps五大挑战和十个最佳实践 Ruby 2.2.0发布,支持回收Symbol类型对象 听UnitedStack、IBM、HP专家如何谈“OpenStack 存储”技术 专访POWER 8编程挑战赛选手孙冬冬:从C语言到人工智能、深度学习的技术演变 盘点2014:十家最酷的大数据创业公司 盘点2014:最受关注的十大云服务创业公司 基于Kubernetes构建Docker集群管理详解 漫画:编程语言学习曲线 彩云天气: 328万元大奖背后的故事 iOS开发的22个奇谲巧技 谁是最受欢迎IT企业?技术、薪酬、发展空间、创新能力大评比 请教一下:现在windows平台上的网络编程一般用什么工具啊??? 问微软专家:关于Windows 服务应用程序问题 再问一个问题,word里怎样建立目录? 如何在不登陆NT的情况下实现每天定时准时关机? 唯一的希望,意大利! 我是VB初学者,几个关于VB的小问题,谢谢 如何唤醒调用了Sleep()函数在睡的线程?谢谢 我切底被搞晕了!关于调ORacle的存储过程。 《EJB Design Patterns II》的PDF可打印版本 LINUX里面有远程终端连接的工具吗? js中的反安装技术 请问在安装完jdk后,是否要自己设classpath(该怎么设?) BarCode控件(高分求解) 有谁在使用VC7.0? 高分求专用数据库驱动(MS SQL2000,IBM DB2) 十万紧急!哪位pdf2txt1.0的注册码能否告知,可以给我发邮件dpwei@metarnet.com,谢谢! 怎样取得一个季度得数据 有谁听说过 vality, torrent, metarecon? 这个查询怎么写? 经典问题 SQL语句问题 如何实现带有CheckBox的JTree 多文档中怎样写子窗口的OnSize()消息 火烧眉头,谁有pb6.5连接Access的补丁??? 谁有完整的MPEG2、MPEG4标准 vc中有没有处理ini文件的类,或请介绍处理ini文件的代码与函数.谢谢(最好有例程)!!! 初次接触lotus不知道从什么地方下手,请赐教 哪里有好的学习JAVA的网站或书. 问个送分的问题, 快来帮助,再线等待,高分相送 多文档中怎样写子窗口的OnSize()消息 关于报表的一个小问题? ??如何调用COM+对象? 微软专家:教我如何理解.Net的跨平台? 我真的想问,不精通编程就一定不能成为计算机人才吗? 如何在单文档工程的CMainFrame中得到CView指针阿? 哪位大侠使用VC和数据库比较完美地做过管理系统?交流一下,要分您说话。 各位大侠请进来提点意见把:关于统一认证平台的问题。 怎样设置多文档中子窗口的OnSize()消息 ?有关COM自动化类型Variant传递安全数组的一个问题 请问foreach这样的语句怎么转换成for或while语句? 请教高手,VB可否打开unix服务器上的数据文件,如何实现?谢谢!(无内容) CHOTKEY控件改变的消息如何得到? 请问哪里有关于c/s和b/s构架讨论,简介 等的文章?? 50分!!! 如何拆分一个字符串 SOS!!! 使用showModalDialog问题 有这么一个问题.... 栈的一个典型操作(计算表达式) 在PB65自带的installshield5中,怎么在开始菜单添加快捷方式阿? 多文档中怎样写子窗口的OnSize()消息 急啊!!!!!从ibm下载的websphere studio siteDev和appDev安装启动程序时,都出现The trial version license cannot be found!!!!!!! 钾离子浓度差主要控制静息点位,胞外钾离子浓度越大,静息点位越高.钠离子浓度差主要控制动作点位,胞内钾离子浓度越大,动作点位越高.细胞膜同侧钠钾浓度差越大,动作电位越大.如果在培 为什么蛋白包被ELISA板后热稳定性会提高?如题,为什么蛋白包被ELISA板后或者与胶体金结合后热稳定性会提高?一般来说蛋白在溶液里对高温是很敏感的,但是与固相载体结合后却能在室温甚至 高中生物:为什么人工湿地中流经该生态系统的总能量要大于该生态系统生产者所固定的全部太阳能? 两个电压值不同的电源并联时的电压怎么算 如图所示,水平放置的平行金属板A和B间的距离为d,极板长L=根号3d,极板间所加电压为U,B板的右侧边缘恰好是倾斜挡板NM上的一个小孔K,NM与水平挡板NP成60°,KN=a,现有质量为m带正电荷量q的粒子组 在一个封闭的生态系统中要使生物长时间的生存必须提供 A光能 B足够的有机物 C氧气 D水分 如果两个电压电源并联,怎么继续计算?就问问如何分析这样的电路.【顺便问个问题,骂一楼会不会被封号?】 如图所示,水平放置的长为l,距离为d的两平行金属板,极板所加电压为U.一质量为m(重力不计)的带电粒子,沿两极板的中心线以初速度v0射入,若粒子能落在A板上距左端为b的M点上,求:(1)粒子的带电 英语第七题 甲乙丙三辆车行驶在平直公路上,车速分别为6m/s、8m/s、9m/s.当甲乙丙三车依次相距5m时,乙驾驶员发现甲车开始以1米/平方秒的加速度做减速运动,于是乙也立即做减速运动,丙车也同样处理.若直 英语翻译2.Recognition and initial measurement All financial assets and liabilities are recognized when the entity becomes a party to the contract creating the item.Those financial items acquired or assumed in arm’s length transactions are initi 一个由六个三角形组成的正六边形,只知道其中一个三角形的高,求三角形的底边和斜边 用一个金属棒将两个完全相同的带有等量异种电荷的验电器的金属球连接起来,则这两个验电器的金属箔片将是 将一根15cm的细木棒放入长、宽、高为4cm、3cm、12cm的长方形无盖盒中,则细木棒露在盒外的最短长度是多少 一个正六边形能组成几个三角形,组成的三角形的顶点都是六边形的其中三个顶点 两根木棒分别是7cm、10cm,要选择第三根木棒,将他们钉成一个三角形框架,那么,第三根木棒长Xcm,X的范围是? 在下列长度的四根木棒中,能与4cm,9cm长的两根木棒钉成一个三角形的是( )A,4cmB,5cmC,9cmD,13cm 用三角形怎么组成一个正六边形如题 汽车的观后镜是凹面镜还是凸面镜 滑动平均法的原理是什么?为什么能去除季节性影响和随机影响? 小明有两根长度为4厘米,9厘米的木棒,他想钉一个三角形木框.桌子上有5厘米,12厘米,17厘米,10厘米,3厘米的木棒供他选择,他有几种选择呢 这里的氮气和二氧化碳要怎么鉴别?面队充气包装内的气体,1同学认为是氮气,2同学认为是二氧化碳,设计一个简单的方案来判断2同学的猜想是否正确.若正确,则现象是? 牛顿第二定律解决问题时的基本步骤 物理运动学与牛顿第二定律一个物体在倾角30度的斜面上刚好匀速下滑,若将斜面倾角增大到60度,则此物体在该斜面上由静止开始下滑6.88米需多少时间? 在汽车前面供驾驶员看左右和后面车辆是什么镜A凸透镜B凹面镜C凹透镜D凸面镜 牛顿第二定律应用题目 如图所示,L型木板P(上表面光滑)放置在固定斜面上,轻质弹簧两端拴接小球A和B,置于木板P上.A、B质量均为m,斜面倾角为θ,两小球始终与木板相对静止.不计空气阻力.下 试用牛顿第二定律及相关运动学的规律说明:在有空气阻力的情况下,质量大的物体比质量小的物体下落得快.(提示:假设两个物体的质量不同,所受空气阻力相同且恒定不变,下落高度相同,比较 汽车的后视镜由______制成(凹面镜,凸面镜),它的好处是__________ 关于牛顿第二定律的生活应用问题求解 牙医用来检查牙齿的镜子是凸面镜还是凹面镜啊? 设计一个对整数的滑动平均滤波程序,数据由用户输入80x86 软件用masm for windows 汇编语言 眼镜镜片不是凸面镜或凹面镜的眼镜?有没有装饰的眼镜 不是凸或凹的 镜片只是纯粹的平面玻璃?叫什么? 试用牛顿第二定律及相关运动学的规律说明,在有空气阻力的情况下试用牛顿第二定律及相关运动学的规律说明:在有空气阻力的情况下,质量大的物体比质量小的物体下落得快.(提示:假设两个 探究滑动摩擦力与压力的实验为什么多做几次数据好 凹面镜与凸面镜有什么特点?有许多实际应用:凸面镜:汽车后视镜;街头拐弯处的反光镜.凹面镜:手电筒,太阳灶,天文望远镜. 牙医看牙时的牙镜子是凹面镜还是凸面镜? 杯子向前滑动的过程中相对于地面做什么运动 一个六边形最多分成几个三角形?最少那? 牙医检查病人牙齿时,常把一面小镜子放在酒精灯上烤一下,然后再伸到病人口腔内,目的是?A对镜面进行消毒B去除镜面上附着的赃物C提高镜面温度防止空中的水蒸气液化D提高镜面温度防止液 为什么一对对滑动摩擦力做的功在数值一定不相等一正 一负 或者一负 不做功这两种情况肯定不相等 但是如果滑动摩擦力都做负功 可能相等啊比如 手持两快相同的砖 在竖直方向上匀速相对 关于金属性和非金属性金属性和非金属性的强弱判断都可以根据置换反应来判断,假如A置换出B,那么A到底是哪个性比B强比如Ca可以从MgcL置换出美,CL2可以从NaBr中置换出Br 牙医用来看牙齿的那种小镜子叫什么?就是伸到嘴巴里 看一些从正面无法看到的角度 的那种小镜子的名称叫什么? eviews通过自相关图和单位根检验怎么判断一组数据是来自自回归还是滑动平均?如题,具体怎么判断? 有四根长度分别为3cm,5cm,7cm和9cm的小木棒,任意取三根围成一个三角形,能围成几个? 运动会入场队形与表演我们部门有64个人参加大院的运动会,我是想把他们先排成六字形 然后迅速转换成未来的未字 但是怎么搞?服装,要什么要求?展板要不?要怎么搞? 沸程为30-60的石油醚 水浴锅多少度挥发 请问什么叫物质的金属性和非金属性?请具体说明,可适当举例. 运动会入场式运动会入场式帮忙设计一个12班的口号,要简短,朗朗上口.设计入场式表演,队形是6*9的.而且好的再加悬赏分,要有入场式表演.快啊...急用 两个不同值的电压源并联后电压值不管什么理想不理想,事实上总能办到的,我想要个理论上的计算.在3相电路中,就出现了这些情况.我想了解深入些.我大一的。对称3相电路中中线处电压为0不 什么是金属性,非金属性?我是个初中生,讲的通俗易懂些, 组成三角形的三根木棒中,有两根棒长分别为3cm和10cm,求第三根棒长的取值范围 这是今晚作业那位大虾帮帮忙 激素传递的信息和神经传导的兴奋速度上有没有差别?请简要说明, 元素金属性元素非金属性 10个同学站成4、3、2、1的三角形队形,现在只允许你改变其中3个同学的位置,把队形变成1、2、3、4的三角形五年级上册17页七巧板.谢谢【】【】【】【】【】【】】【哈】 交流电源和直流电源并联后,电压是多少? 改善该蛋白酶的热稳定性的最佳方案是哪个?27.某种微生物合成的蛋白酶与人体消化液中的蛋白酶的结构和功能很相似,只有对热稳定性较差,进入人体后容易失效.现要将此酶开发成一种片剂, 帮我想一下运动会出场队形.共28人,排成三角形能怎么排. 两个直流电源可以并联吗?并联后电流会比没并联时大吗?还有它的电压会变吗?共3个问题, 烟煤制作成型煤,用什么粘合剂可以提高型煤的热强度和热稳定性?用烟煤制作成型煤,如何提高型煤的热强度和热稳定性?要加入什么样的粘合剂? 生物种类和数量更多.水体中能固定太阳光能的藻类等各种绿色植物属于该生态系统成分中的 :
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘