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

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

编辑:说三道四文库 发布时间:2017-10-21 09: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里
}
搞定,谢谢!
触宝输入法产品经理解析iOS 8第三方输入法开放程度 专访联想谢政维:功耗和价格是天蝎项目最大障碍! 《近匠》蚁视科技创始人覃政:ANTVR,虚拟现实的新生 后棱镜门时代:开发者保护应用安全的5大技巧 专访许鹏:谈C程序员修养及大型项目源码阅读与学习 65种GPU性能测试,AMD开源驱动领先! 一周消息树:我们从WWDC 2014收获了什么? 精益设计:“纸上谈兵”的说服力 指尖上的艺术——如何运用代码发挥无限创意 周末巨献:100+诡异的数据集,20万Eclipse Bug、死囚遗言等 TIOBE 2014年6月编程语言排行榜:Swift能否取代Objective-C? 移动游戏后端:开发还是购买?你必须知道的6件事 Vuforia SDK 3.0发布在即 全球注册开发者已逾10万 最受职场青睐的十大热门云计算技能盘点 Android Bootstrap:开发也能用模板,省时又省力! Facebook开源又一力作,欲借Broadcom开放交换机 华为敏捷网络:坚持被集成,引领ICT融合 专访赵桂华:.Net也有春天及高性能网站架构实践 《近匠》Testin:云测试除了APP和真机 还有可穿戴和汽车 应用开发利器FXForms:iOS上实现各种Form View Firefox 30正式版:支持GStreamer 1.0技术、内置全新Gecko 30内核 从阿里、UC联姻 看移动互联网“入口”之争 AppCode发布3.0.1更新,支持Xcode 6和Swift 智能家居持续升温:苹果HomeKit合作伙伴Honeywell发布恒温器 欲与谷歌、亚马逊抗衡,苹果推CloudKit拥抱云服务 针对新一代物联网应用 Atmel推全新32位微控制器 实时计算,流数据处理系统简介与简单分析 Cue:秒杀HealthKit,打造自己的家庭医生 新iPhone要来:4.7就够了么?我们还有更大的 Docker迈入云(DockerHub)+端(Docker引擎)时代 《近匠》壹枱智能钢琴:改造音乐行业的新“玩”家 exchange server 2000 能装在xp上吗? 怎样使自己的程序被安装的时候安装上自己制作的字体?? 求助:帮小妹找份工作 有高手在吗?帮帮忙! 一个在ASP中很简单的问题 很想很想很想散分 预报天气如“叫床” 湖南性感女主持惹争议 Websnap中TEnduserSessionAdapter组件的TadapterField问题~~~~~~~~~~~~~~~~~~~~~~~~~~ 急!!帮我看段代码! 为何对话框程序加入RichEdit控件后不能运行? 想知道word.application的朋友请进: InstallShield Express Custom Editon for Delphi那里有下载? 请问vb.net和vc#能不能创建数组控件??? 请问vb.net和vc#能不能创建数组控件 请问一下,vc 写的 dll,使用postmessage给出一个消息到窗口,在 vb 中应该怎么样响应? 我想开发一个数据中间层但不知哪用.net ATL MFC 开发好,能给个建议吗? 寻求cs CD-key 文件名(很有些困惑!) 高手近来拿分,请教一个算法问题,共开三帖,每帖一百分。 在windows2000+delphi6+ado+access2000做的程序可以在windows98中用吗? 我想学门语言,现在哪种最有前途啊 一个免费的电影网站,不需要手机不需要花钱就能看电影 数据库存储一些记录后不能写入,数据库文件异样(BDE) 急问:这样的文件怎样导入数据库? 一个免费的电影网站,不需要手机不需要花钱就能看电影 IIS下配置php-4.3.2-Win总是不行??? 很多书上都有说jsp:useBean的scope属性的application,是指任何使用相同的application,这个相同是什么意思? 关于统计的问题 马甲识别诸法之我论(转贴) 弱弱地问一个问题。 如何用键盘弹钢琴? ASL是什么? how to 高考 装了win2003之后调试asp.net还要不要再装其它软件? 学c++出路 我把数据库的连接池作到Bean中,麻烦就此产生,请高手帮我解决??? 成熟OA系统,B/S模式,三十几个模块,四十几个功能,超底价出售原代码,包你满意,有意者留个油箱,我把部分文档给你发过去,如果你离南 怎样装微软官方论坛? 成熟OA系统,B/S模式,三十几个模块,四十几个功能,超底价出售原代码,包你满意,有意者留个油箱,我把部分文档给你发过去,如果你离南 win2000安装后,每个一秒种读一次盘,请帮我解决问题。谢谢! 谁还来个高程QQ群? 大家都上过哪些收费电影下载网站? 请问那里有好的中文输入法下载。我的是redhat72 在线等待----100分,急!!! 光标定位问题 asp mail question 一些比较菜的问题 实用问题,在触发器中如何退出? 怎样来通过我的程序来控制另一个程序的下拉菜单 VS 2003哪里有下?VB的GRIDCTRL如何调整各列的宽度? class发什么音 好的开始是成功的一半英文 英语翻译彼尧舜之耿介兮,既遵道而得路; 何桀纣之猖披兮,夫唯捷径以窘; 惟夫党人之偷乐兮,路幽昧以险隘; 岂余身之惮殃兮,恐皇舆之败绩; 忽奔走以先后兮,及前王之踵武; 荃不察余之 我的音乐课3点结束 my music class --------- ----------- ----------横线怎么填?顺便问下,a与one有什么区别? 翻译英语“好的开始是成功的一半” 英语翻译要翻译,急 Japanes中的a发什么音,class,apple,that也同样如此 father是什么意思 尧舜时九河不治 翻译 有没有国外名人犯错之后促进成就的例子各个方面的都可以~ 五下语文补充习题第1课春光染绿我们双脚最后一题的第2小题 father什么意思 有的飞机有四个引擎,有的飞机只有两个引擎,我的问题是四个引擎的飞机假如坏了一个引擎还有三个引擎应该还可以继续飞,但要是只要两个引擎的飞机坏了一个引擎那可能就要坠机了,那为了 给幼儿讲故事时要注意什么? 请问酒店里常说的"french suite"一般的中文译名是什么? 以“成功不是永不犯错,而是永不犯相同的错”为主题的演讲,有什么名人事例啊? 好的开始是成功的一半用英文怎么说?还有..留着青山在,不怕没柴在有志者事竟成只要决心大,天大的困难都不怕 original French onion soup请翻译 已知函数f(x)=2的x方则函数f(1-x)的大致图像是 叮咛的近义词 证明(a-1)(a²-3)+a²(a+1)-2(a³-2a-4)-a的值与a的值无关. 甲班有240本书,乙班有260本书,捐出相同的本数.剩下甲是乙的80%,两班共捐几本书? 英语翻译热头盆 煎法国鹅肝伴苹果 20.00 元 French Foie gras fried with apple 20.00冻头湓 西班牙火腿拼密瓜 48.00元 香芒汁带子冻 8.00 元 热汤 酥皮大虾忌廉汤 25.00 元 酥皮蜗牛汤 20.00元 农夫鲍鱼忌廉 大海大海你为什么这么蓝?这句话采用了什么表述方法 请问磨砺的近义词 英语翻译WESTERN “Soup of the Day” CHINESE “Soup of the Day” CREAM of POTATO with CHOPPED BACON 你是法国人吗?怎样翻译?French前面用冠词的话是a还是an? 用“视”组词 和 写句子.用视组词:( )视 组10个春节的时候,在热闹的爆竹声中,送走了旧的一年.春风吹来了,非常温暖.人们喝着美酒沉浸在欢乐中.由此,我们想到宋朝王安石的两句诗:— 打电话 哪些句子把你笑了 给我一个承诺,是什么意思 幼师面试时应该如何介绍自己 关于打电话想句口号单位提倡节能,上句是:上班不煲电话粥下句应该写什么?最好押韵,恩,我的意思是下句也关于打电话长话短说的意思. 我爱你直到永远是什么歌?里面有神话和诺言四个字,请问这是什么歌词,结婚时候放的 为什么现在的我这么浮躁过了年 又开始了这无聊的工作 我现在什么也不想干 特浮躁 心里很乱啊 真的想换个工作环境 可不知道还能去哪 真的挺烦的 叮咛的近义词是什么 这个可以做了吗?保证给分我发4. 不屑一顾是什么意思? 英语翻译1 我给她打了两个电话 这么翻译行吗?I called him twice 如果可以 再给同义句2 你今天给她打了几个电话?3 我给她 打电话了,可是一直没人接4 我打电话给她了,她手机关机了英语翻译 5 他 英语填空题,看不清的问我? 初二地理求解,第8、9题该怎么做?求详细解答 She was at the museum(on Wednesday morning.)对画括号部分提问 地球上海洋总面积是三亿六千二百万千米,写作362000000平方千米,改写成以亿平方千米为单位是( ). 不屑一顾的意思请回答 The trip to the Palace Museum was (really wonderful) 对括号部分提问 化学四个填空题 看不清的问我 叮嘱的近义词是什么 as soon as as soon as 2013山东文综地理第一, It___boring.A:sound B:sounds C:watch D:watches 给句子换个说法1 我回到了故乡小镇.2汤米,我要到另一个世界去歌唱. 五谷丰登的近义词准确点. 关于形容词作定语the design for the room was of the fancy style popular in those days.这里popular in thouse days是形容词短语做定语吗?为什么polular前面不用家be动词?形容词前可以不加的吗? as soon as 如题 丰收和匆匆的近义词各是什么 2012江苏省姜堰市的初中地理,生物会考成绩怎么查询? 照样子把句子换个说法.例:马跑得越快,离楚国不就越远了吗?马跑得越快,离楚国就越远了.1、 画画怎么能不相信自己的眼睛呢?2、 楚国在南边,你怎么能往北走呀?3、父母养育了我,我怎么能 讨厌,丰收的近义词 近义词、叮咛——……?、依旧——……? 照样子,把句子换个说法.例:密密层层的枝叶挡住了阳光。阳光被密密层层的枝叶挡住了。密密层层的枝叶把阳光挡住了。1、拦河大坝拦住了奔腾的黄河水。2、他按照规则传递口令。 博施济众 尧舜犹病~谁能帮我翻译下?出自孔子语录? 公园免费后质量下降 南京市民质问财政南京出现“烂尾工程”现象 财政部门称南京财政局谈政府采购“挑贵的买”:综南京中小河治理工程将收官:14条河流苏州小朋友上演变装T台秀迎接万圣节马来西亚副首相为选举造势 出席者可获日本内阁官房副长官力挺《特定秘密保护数据显示中国赴美名校留学生每4人就有韩称中韩2014年起联手管制黄海非法法国数百活动人员斗牛场前集结 抗议斗韩国“科学技术卫星3”号抵达俄罗斯 500万叙利亚人在国内成难民 冲突严新警方樟宜机场缴7.1公斤冰毒 一外阿富汗总统选举唯一女候选人被取消竞选澳85岁志愿者因慈善工作获得“默多克韩国自主研发太空观测卫星抵俄基地 拟新加坡建房局凭借公共住房项目获得国际阿富汗总统选举唯一女候选人被取消竞选巴西男子计划耗时8个半月穿夹脚拖走遍马副首相为选举造势 出席者可获得小鸡法国数百活动人员斗牛场前集结 抗议斗斯科拉里正式下课左右健康的七大情绪清盘价+现房货成都抄尾正当时巴以冲突177死1300余伤 潘基文坚定信心 创新举措努力完成全年各项目火热暑假眼科牙科促销忙绿地狂飙成渝海关拟实现通关一体化每日微评成都市文化馆 推进公共文化数字化服务夏季 擦汗也有讲究太平公主变女神 美丽、事业双丰收坐2小时的危害 运动20分钟也补不回单骑闯通关 山东小伙抱走30万明日放映公益电影《老哨卡》和《海神密你真的想看到比生活中更英俊体贴的谢霆车祸背后的挖药人:干得好,一次能挣两文化之旅:终点也是起点荷兰队球迷围观决赛 “隔夜酒”照样被黄土操场上志愿者教孩子们跳芭蕾本周六三大品牌面对面 美式眼镜代理教
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘