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

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

编辑:说三道四文库 发布时间:2017-06-28 08:27
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里
}
搞定,谢谢!
Github项目中使用率最高的Java/Ruby/JS库 2013中国大数据技术大会盛大开幕 从黑色星期五找到的六个规则 帮助网站转化 移动开发者的自学宝典:十大在线编程学习网站 MIT新技术:远程触摸和操纵实物 创新人机交互 中国移动研究院业务支撑研究所所长孙少陵:大数据实时处理技术发展趋势及中国移动实践和展望 “第一届中国大数据技术创新与创业大赛”主办方发言及创新分赛颁奖 中国移动研究院业务支撑研究所所长孙少陵:大会及与会嘉宾介绍 中国工程院院士、大数据专家委员会主任李国杰:能挖掘出价值的数据就是好数据 阿里飞天平台总架构师唐洪:飞天开放平台 百度大数据首席架构师林仕鼎:新计算时代 金山发布全系列IaaS平台 Google无人驾驶汽车与机器人组合,秒杀无人机 Google欲推新Chrome应用:适用于Android、iOS平台 comScore:美国市场苹果手机独占鳌头 Android和iOS双寡头垄断 一周消息树:新技术实现远程触摸和操纵实物 创新人机交互 研发周报:帮助网站转换的六大黑色星期五规则 【开源专访】JFinal作者詹波:以极简方式实现Web项目的极速开发 2013中国智能交通与大数据技术峰会:迎接交通大数据新时代 大数据应用技术(上):加速创新,重塑世界 英特尔百度携手推出首个跨平台应用商店 12月9日:计算机软件第一夫人Grace Hopper出生 触摸屏将成笔记本标配 电脑行业或将迎来又一春 触摸4G,你必须要知道的那些事儿 TIOBE 2013年12月编程语言排行榜:Transact-SQL冲刺年度语言 敏捷开发的6个实战经验 【图文】走近华为企业业务与支撑万人技术团队的云数据中心 《习惯联盟》陈晓冬:与京东云合作让我们没有后顾之忧 流计算与批处理同现:畅享大数据时代的开源实践 挑战和机遇并存:大数据时代机器学习与可视化 【企业开源系列】收发一条Twitter推文的背后 请问 怎样将table里面某几列的所有数据copy到另外一个表中? 知道对方的 IP地址 ,怎么得到他的机器名?我记得NET命令里有一个可以的,谁知道? 一个报表打印的问题,大家快来帮帮我啊!!! 报表问题快来帮帮我啊!!! 我的word每当保存总是提示内存不足????? 问一下个在VB中使用Oracle的问题? 紧急求救 请问这句话什么意思? 如何得到以前安装 SQL SERVER 的密码 如何把一个字符串中所有指定的字符删除? 那里有delphi深度历险下载,我怎么也搜不到 各位大虾帮帮忙 如何在LINUX下如何安装配置JSDK? 如何挂载usb硬盘?? 使用TrackBar控件的问题 挑战高手, 巨难问题. 有关不同系统(ACCESS, MSSQLSERVER) 的SQL语句兼容问题 奇怪问题:我的光驱,有的光盘能读,有的不能读(比如自己刻录的) SQL Server 安装时的密码,忘了,如何取得,在线等待 挑战高手, 巨难问题. 有关不同系统(ACCESS, MSSQLSERVER) 的SQL语句兼容问题 谁能告诉我,汇编论坛在哪?谢谢 调色板问题 挑战高手, 巨难问题. 有关不同系统(ACCESS, MSSQLSERVER) 的SQL语句兼容问题 如何在WLS7中部署一个Servlet和一个JSP? 挑战高手, 巨难问题. 有关不同系统(ACCESS, MSSQLSERVER) 的SQL语句兼容问题 新手问题: 一个简单的js效果实现问题 吐血送分!关于datagrid的数据更新问题! 为什么不能进大富翁论坛 谁有KV3000啊,传个给我行吗,我下载了好几个都不行, 我有原版盘坏了,谢 VB 怎么调入并执行写好的SQL文件. 今天我生日,郁闷散分 吐血送分!关于datagrid的数据更新问题! 请问powerdesigner生成.sql时,如何在.sql中包含Comment信息 DBGrid改变行的颜色 下载英文Windows的地址 我要在一個按鈕點擊后,開啟另外一個頁面,並且這個頁面自動處於打印預覽狀態,怎麼寫? 正在上升中,公司给自己加薪了,自己却突然心灰意冷. 我想问什么是temporary object?请高手指教 那位大哥在HP-UX下配置过PHP和ORACLE? 宝丽金120首金曲 Dialogs(wdDialogFileOpen)提示ActiveX不能创建对象? 那位朋友知道如何在网络上截取一个信息(数据包) 大家看过dvdrip的片子吗?有一个问题请问 (winform)我想编写一个简单的浏览器,问题1 在LINUX下如何安装软件啊? 苏州的朋友可以进来看看吗? 关于游标类型的问题 如何比较两幅近似图像并得出偏移的距离? 怎样处理鼠标拖动事件。 绘制图形时的自动滚屏问题 请教怎么去掉字符串后面带的空格? 请教关于双机通讯的问题,谢谢 黑帮的英文名叫什么?求解 Dokuz Eylul University 这是土耳其的大学,求中文翻译 It's time for you _____ (change)your lifestyle.应该填什么词,为什么? “在我们学校有浪费水,电,餐厅的食物,书本的现象.这样造成浪费资源的为害.”英语翻译 新加坡的英文拼写新加坡用英文怎么拼呀!还有中国大区总裁!中国大区总裁用英文怎么拼呢? 尊重他人就是尊重自己的作文怎么写? 黑社会 翻译成英文 新加坡英文拼写和所属国家 would you change your way if life or not?该怎么用英文回答?if you could afford the time and money,would you change your way if life or not?why?呵呵 是我打错了 是of! 起风了,黄山的云雾千变万化.改为比喻句 英语翻译 理有一块金属,在密度为P1的液体中称时,弹簧测力计的示数为G1;在密度为P2的液体中称时弹簧测力计示数为G2,求金属块质量 已经知道方程是p1vg+ G1= G2+ p2vg可是怎么解?可是你质量都不知道 起风了,黄山的云雾千变万化改为比喻句 黑帮犯罪 或 黑社会犯罪 用英语应该怎么说?如题. 海的最深处是像陆地一样没有水吗 起风了,黄山的云雾千变万化.改成比喻句. 黑帮用英文怎么说啊?就是黑帮啦,黑社会之类的,英文怎么翻译啊? 大海最深处有什么 如何培养孩子的创造力英语小作文 黑帮用英语怎么说?RT.我想问我们那的老外你们那有黑帮吗. time can change me什么意思? 关于创造力的培养的英文作文 What kind of man would defy a king?..What's the freedom?..What's the life?..What kind of man would defy a king?..What's the freedom?..What's the life?.. 关于对手这个作文怎么写? 《穷人》的作者是?著名作家?文章歌颂了主人公?的善良美好心灵. It's what makes our life colorful,and gives our life true meanings and fun.什么意思? 怎么写对手作文 The price of this skirt is too ___.A.cheapB.expensive C.dear D.high 假如你叫Tony.英语 对手作文怎么写 This skirt is too small.I want a l______ one 看过电影《美丽心灵》的进最近看完这个电影,没太明白这个故事和“美丽心灵”的具体联系,看懂的朋友谈谈吧,呵呵 寻求快速英语记忆软件 如题例:Kangaroo 袋鼠 记忆法:袋鼠扛(Kang)着一(a)块肉(ro)进了洞(o)读音:kang(读一音阶)a roo(拼ro 读四音阶)好想找这样的软件 或是动画 2.This black skirt is too _________(昂贵的).The price of the gray one is much _______(便宜).3.On my birthday,my friends _______(收到) a lot of p________ such as toys and hair _____ (夹子).4.There is always _________ (足够) money in his ___ 童年的小故事 she couldn't help feeling sad and tears would run down her cheeks( )she came back tothe ruins where her home was once built. 为什么答案是for the first time ?为什么不能用at the moment 英语翻译 Tony打算去踢足球英文怎样写 不包括,英语怎么说 tony的英文是啥 少儿故事 关于"对手"的作文,什么写?` 从什么方面着手,才可以使得文章更有内涵,更加的精彩紧凑?不喜欢范例,希望得到的是一些指导.有重赏! 怎么培养创造力 What's your views on the relation between routine shopping and quality of life?请用英语回答该问题. 作文 对手(侧重描写友谊)要有技术含量哈! 英语翻译Tepede beyaz bir saray.SARAY'da SOYTARI BİR KRAL.krallığını seveyim senin pabucumun Kralı.seninde saltanatın biter birgün Tony什么时候来中国 英文怎么写 如何写关于对手的作文,求大师指点, 怎样培养创造性 what's the meaning of life?the meaning of life is to seek for the truth and fulfill your dreams.or there is no meaning in life.you were born,you go through sorrowand happiness,you get matured,get married,get old and pass away.you are like a dust in t a poor student could become a good one200左右的英语作文 创造力应该如何培养 你想问tony昨天买了什么用英语怎么写 similar的用法、后面跟什么介词? 塞语翻译中文或中文翻译塞语在哪里翻译谢谢大师帮忙 尊重 作文怎么写快我非常急! similar接什么介词 《东北大森林》和《颐和园》写作顺序相同吗 如何培养创造力 尊重的作文怎么写啊!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘