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

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

编辑:说三道四文库 发布时间:2017-08-21 03:20
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里
}
搞定,谢谢!
对于测试人员而言,TDD意味着什么? 年用电910亿度,那些庞大的数据中心该用什么支撑 走近黑客们的世界,感受网络空间的心跳 VMworld 2014 Day One:Docker、数据中心、混合云新举措 Docker和Kubernetes或将加速SDN发展 前端开发框架三剑客—AngularJS VS. Backone.js VS.Ember.js 【CTO俱乐部读书会】《流程的永恒之道》辛鹏:企业的本质就是流程运营 紧扣微信研发痛点 2014微信开发者大会吸引大量外地参会者 Mobile First!jQuery UI组件集Wijmo五年最大更新 首届TCL杯HTML5智能电视—应用开发大赛火热开启! MDCC智能硬件征集关键词:智能家居、机器人、健康生活 采集颜色、自动同步,还有比这更牛叉的儿童触控笔么? AppCan移动平台:为企业移动化进程加速 学生强则国强,访天猫推荐算法大赛Top 9团队 Mozilla与三星之子——Servo特性解读 360天巡启动公测 打造新一代企业级无线安全解决方案 继Storm和Spark之后,Hortonworks添加对Kafka的支持 一周消息树:国产操作系统最快10月发布,并支持应用商店 技术团队看板方法实践的难点分析 SAP云服务加速转型:调动资源瞄准中国市场 开发测试全承包!移动应用开发工具Telerik平台 火火火火火!看HomeKit如何改变物联网和智能家居? MDCC应用与工具关键词:平台、社交、垂直、解决方案 Leap Motion正式入华 将发布第二代软件SDK 120万操作/秒Redis Cloud 集群单一服务器非基准测试程序 2014微信开发者大会顺利结束 TOP10优秀微信开发商名单公布 【最佳实践】通过DevOps确保可靠和有效的信息安全 2048 Hello World:跨平台快速应用开发Python框架Kivy Forrester:关于私有云的10个事实 2014年8月操作系统份额:Win 8.x大涨,Linux继续下跌 0代码、不编程—交互式网页设计工具VXPLO 十万火急!谁知道怎么看sql都执行了哪些操作! 一个小问题? 哪有mandrake完整版下载? 他今天落荒而逃了!非常兴奋!!散分!!! 各位大虾帮忙,一个很菜的问题 请问如何在388手机上显示超过一屏幕的文本? 用vb6.0做的ftp下载的客户端程序 请问有为SUNPLUS16位机(MIUnSP™)开发平台的高手吗? 几经努力,没有经果.......(#if)真的很难吗? 涨分好机会,我有大问题:用什么方法可以实现——联接 电话网络(有线、无线)与电脑服务器,实现消息即时通信 欢迎多一些高手朋友提供 JAVA开发中的B/S方式,C/S方式到底是什么? 关于delphi中的查找赋值 >>>>>>关于new,delete 的简单问题《〈〈〈〈? 全国各地接吻比赛(想学习经验、姿势的进来) 数据挖掘关联规则算法的原代码能在哪里找到,譬如apriori算法? 请问16个主要颜色的RGB值。 使用过存储过程的大家帮忙呀。。。。。 websphere怎么啦? 救急:query回写 想学C#,有啥好书?? 如何动态地获得一个组件的属性、方法并调用? 请帮我看看这个小的asp程序为什么不能被网页调用?IE说这个网页不能显示 失业,散分!!! c++ builder 如何引用access数据据库的图片字段(ole对象),我用TDBimage控件不能看 CSS滤镜的使用!! 共同关注 失业了,散分!!! 大家有没有看网络小说啊!能提供几个经典些给小弟参考参考么? 失败!!失败!!! 失业了,散分!!! 怎样在java的桌面程序里打开浏览器呢 DataGrid如何实现鼠标放上去改变颜色? Foxpro数据库中,可否导出oracle可以操作的表呢?大虾指点啊! 请问调用存储过程中一个输入参数为nvarchar(24)的时侯,我在asp中的输入怎么会报错? 失业了,散分!!! 华工科技开目软件集成公司怎么样? 失业了,散分!!! 失业了,散分!!! 失业了,散分!!! 我用update更新互联网上的数据库,总数大约有700多条,在更新过程中程序窗口没响应了,无法最大化,最小化,关闭,但进度条仍然在走,更 水园公务帖[2003.03.11——2003.03.17] 无人回答的帖子,再发一次。up有分 快去微软件聊天室了,开聊了。 from表单中的参数无法传递? 急!急!急!急!急!我安装Visual studio 6.0中文版不能够成功,是什么原因?? 关于Oracle的数据类型问题? 请问在vc中怎样创建Outlook对象 关于Cable Modem,高手指点。 毕业论文怎么作??????????? 新手送分(解决即给分) 天生爱吃冰激凌! 遮光器上的光圈作用?是光亮度还是焦距 控制噪音不超过几分贝 物体向上运动后 又原路返回 问重力有没有做功 为什么我们能够闻到远处的花香? 竹子在一年四季里的姿态,并与其他植物做对比.马上要写作文 黄河水能主要分布在 游地区? 空气压缩机上的,触发器连接气压开关怎么接线,具体点 若一次函数y=4x-(2m-3)图像向上3平移个单位长度经过原点,则m=____. 我先是啜泣了一会,然后,我产生了一种巨大的成就感.啜泣的作用 靠旁路气压控制主路开关的阀门是什么阀门里走天然气,阀门上有另外一单独控制口,接空气,靠此空气压力控制阀门开关,能完成这个操作的 皮怎么组词 珠江闽江的分水岭?黄河水能最丰富地区( )A上游 B中游我国最重要运输方式是( )A公路运输B铁路运输C航空运输.在旅游资源分类中日月潭属于(民族风情还是自然风光?)根据各地( ),( 洗衣机气压开关拔掉管子用嘴吹一下,波轮就会转了,不过要用力吹,气压开关能修吗、换一个要多少钱,如果把上面连根线连起来,不使用气压开关会有什么后果 巴基斯坦位于什么处 春秋时期生产领域出现了什么情况 六氟化硫开关气压低如何处理 印度和巴基斯坦从地壳板块分布上来说位于哪个板块? 春秋时期各国交战和兼并情况 写出各国交战次数和每一次大国兼并小国数目 220kvsf6母联断路器气压到零的处理,对母联开关应如何处理 巴基斯坦地震与哪两个板块碰撞有关 轮胎国际标准汽车设计如何选择轮胎百度搜索也搜不到, 什么样的气动螺丝刀好用一. 半自动捶打式气动起子 二.全自动气动起子 三.手按式气动起子 四.下压式电动起子 请问哪种好用啊,万分感激. 巴基斯坦和印度尼西亚位于哪个板块? 走一步再走一步:爬下悬崖,实际上是一件小事,我为什么有一种巨大的成就感,并说这是我永远忘不了的经历? 修摩托车气动螺丝刀要用5H还是10h……气动螺丝刀5h和10h是什么意思 黄河中上游水能丰富的原因 如何证明1mol任何物质的量的计数都等于其相对分子质量的计数 黄土高原的土层一般厚多少米 直线y=4x+4向右平移2个单位长度,平移后直线怎么表示 除了太阳,土星太阳系中最大的引力源? 九年级所有元素的化合价是多少? 把直线y=-4x-3向右平移4个单位长度得到直线 关于太阳系的引力平衡各行星对太阳也有引力,那么太阳与行星不同的是,太阳不公转,也就无惯性离心力与引力平衡,那么该是什么与引力平衡了 我们能闻到花香是---------现象说明了什么 如图,木块竖立在小车上,随小车一起以相同的速度向右做匀速直线运动,小车与木块接触的上表面是光滑的.下列分析正确的是(  )图片在这里:A.木块没有受到小车的摩擦力B.木块的运动 金枪鱼为何游得那么快老兄 老姐 人能听到回声的条件是回升到达人耳比原声至少晚0.1s,由此人要能听到自己的回声,应离障碍物至少多远? 写武汉长江大桥的作文500字 为什么金枪鱼游得那么快每小时几千米 塞下曲六首其一中的“天山”是天山山脉还是祁连山脉? 火是不是不受地球引力控制,而且还与地球引力相反?有次玩打火机,发现正着打火苗朝上,然后反过来打火苗还是朝上.是不是火不受地球引力控制?或者起到相反作用? 一个质量为1000kg的物体在平行于斜面拉力F的作用下,沿倾角为30°的斜面匀速向上运动.已知斜面的摩擦因数为0.3,求拉力有多大?(g=10m/s^2) 皮的组词 把直线l 向上平移4个单位长度,得到直线y=4x-6,则直线l 的解析式为 声波是纵波?请先听我的解释,然后再补充!‘纵波:声波的振动方向平行传播方向’这点我清楚,唯独声波我不理解.比如一人在二楼敲锣,上下左右的人都能听见;人竖着拿锣,锣上下震动;根据 噪声的声波的特点是什么 为什么植物受地球引力,根向下生长,而茎叶却向上生长? 济南的冬天前四段的概括 皮组词有哪些 将直线y=2x向上平移两个单位长度,在向左平移1个单位长度,求平移后的解析式 干旱少雨的原因是什么 当噪声通过森林时,树叶会吸收部分声波使噪声减弱.下表表示林带宽度与噪声减弱程度.林带宽度/m 10 20 30 40 50 60 707/10 6/10 5/10求大神把表填完,再说一下规律. 杯子里的水盖盖儿凉的快还是开盖儿凉的快...(保温杯除外)为什么? 青藏高原干旱少雨的原因是什么 用声波的干衍减低噪音 为了保护听力,应控制噪声不超过几分贝? 北方为什么干旱少雨? 风乍起,后面是什么诗句 经过变声期,发出声音的()变低了.为了保护听力,应控制噪声不超过()分贝 辽宁朝阳地区为什么干旱少雨 印度灾民仅获1美元政府补偿美欧操纵非洲转基因论战乳腺筛查有误区人大代表:现在村干部随身带公章 不给专家:收入分配是改革大问题 应降垄断颐和园被指随意拆老物件 回应系修缮石北漂保安自学半年考取律师 帮千余农民季建业落马内幕披露 出事后被免职速度印尼一男子酷似奥巴马 形象遭中国企业城管监察成北京公考最热职位 竞争比达云南数百村民打砸公务车 事件因强行征菲律宾总统仍拒绝为马尼拉人质事件道歉太原晋源区政府承认向法院发函 领导称湖南3名干部为升官偷拍县委书记 视频崔永元赴美国调查“转基因”食品安全政山东青州豪华车站成形象工程 1天仅卖数据显示我国未成年手机网民已破亿 更八成俄人认为俄腐败程度高 地方权力最印尼一男子酷似奥巴马 形象遭中国企业八成俄人认为俄腐败程度高 地方权力最沙特不收联合国“大礼”小花徐一幡享受“单独奖励”环境违法半年罚金1300余万在东戴河 来个“蟹”逅集美家居与我爱我家 线上线下展开合作安倍改组内阁谋划长期掌权小别离不是月饼的错是我们移情了张志军首次访美 与美方“谈得愉快”情系三多寨国际艺术臻品展将启动念师恩微故事来稿多多 小学生作者集体习近平:日本应妥善处理历史问题情系三多寨全市将建10个教室空气质量实时监测点对“站外上车”乘客应该管一管徐一幡首战大满贯即进女双8强 将享受9·3 两岸三地“不能忘却的纪念”重拾初心 彭帅开窍豪宅激战“金九”核心区成主战场希腊力擒克罗地亚4连胜 博格达诺维奇乌称达成停火协议 俄否认
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘