搜索
bottom↓
回复: 16

c#中可以调用C语言代码吗?

[复制链接]

出0入4汤圆

发表于 2019-4-26 17:41:55 | 显示全部楼层 |阅读模式
c#中可以调用C语言代码吗?    用C语言是因为,C语言可以定义带数组的结构体变量 ,比如下面这样的。C#实现不了。  项目中,经常PC和单片机通讯用到数据流,想把数据流和结构体对应起来,用C# 要就只能一个一个字节的拼接,好麻烦。
typedef struct __GkTable
{
    u16   dev_address;                  
    u16   Sen1_ad[10];        
    u16   Sen1_zl[10];   
    u16   Sen2_ad[10];      
    u16   Sen2_zl[10];     
}_GkTable;

出0入0汤圆

发表于 2019-4-26 18:06:30 | 显示全部楼层
可以的,C# 没你想的那么二
    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
    struct StructDemo
    {
        
        public byte a;
        public byte c;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
        public byte[] b;
        public byte d;
        public int e;
        
    }
具体字节数组和结构体怎么转化,网上搜

出0入4汤圆

 楼主| 发表于 2019-4-26 18:46:24 | 显示全部楼层
semonpic 发表于 2019-4-26 18:06
可以的,C# 没你想的那么二
    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi,  ...

哦  好的,我先查查看。。。要是真能行,那就方便多了

出0入0汤圆

发表于 2019-4-26 18:53:09 | 显示全部楼层
不过c#中结构体一般用class实现比较好

出0入20汤圆

发表于 2019-4-26 18:58:52 | 显示全部楼层
这俩出生日期差了好几十年,基本上在语法层面C能实现的C#都能实现,而且实现的功能更多,这个更多不是多一点半点,是十倍二十倍的多。
我从大学毕业到现在也好几年了,断断续续一直在用C#写各种东西,至今不敢说自己熟悉C#,除了自己水平差以外,还有一个主要原因是C#过于博大精深了,而且更新速度非常快~

至于C么,看对书,高强度搞半年,该会的都会了,不会的一般也都是小众的需求。

出0入0汤圆

发表于 2019-4-26 19:07:13 来自手机 | 显示全部楼层
如果语法上不支持,可以实现同样结构的类,然后在类中实现一个转换输出函数。让麻烦的事电脑做,不就是编程的目标么。

出0入93汤圆

发表于 2019-4-26 19:09:48 | 显示全部楼层
Error.Dan 发表于 2019-4-26 18:58
这俩出生日期差了好几十年,基本上在语法层面C能实现的C#都能实现,而且实现的功能更多,这个更多不是多一 ...

不可能都能实现的,应用场景不同。
最基本的宏C#就搞不定,更别说底层的比如汇编之类的。

出0入442汤圆

发表于 2019-4-26 19:22:37 来自手机 | 显示全部楼层
takashiki 发表于 2019-4-26 19:09
不可能都能实现的,应用场景不同。
最基本的宏C#就搞不定,更别说底层的比如汇编之类的。 ...

java也没有宏吧。这类高级语言是用来解决界面和交互的,不是用来设计算法的。

出0入20汤圆

发表于 2019-4-26 19:33:10 | 显示全部楼层
takashiki 发表于 2019-4-26 19:09
不可能都能实现的,应用场景不同。
最基本的宏C#就搞不定,更别说底层的比如汇编之类的。 ...

C# 预处理指令了解一下。

出0入93汤圆

发表于 2019-4-26 20:14:05 | 显示全部楼层
Error.Dan 发表于 2019-4-26 19:33
C# 预处理指令了解一下。

C# 预处理指令 难道是 宏????
  1. #define PIN(Port, Pin)  P##Port##Pin
复制代码
请用C#表述出来。

出0入93汤圆

发表于 2019-4-26 20:19:12 | 显示全部楼层
wye11083 发表于 2019-4-26 19:22
java也没有宏吧。这类高级语言是用来解决界面和交互的,不是用来设计算法的。 ...

所以说,应用场景不同。后出的语言并不是为了替代先出的语言,加入新特性丢弃部分特性很正常。
Java不但没有宏,连最基本的无符号数都没有,只能用其他方法迂回解决。从某种意义上来说,Java其实是不完备的。

出0入20汤圆

发表于 2019-4-26 20:31:59 | 显示全部楼层
takashiki 发表于 2019-4-26 20:14
C# 预处理指令 难道是 宏????
请用C#表述出来。

首先,语言是有场景依赖的这个我认同,上一个在单片机上跑C#的项目现在已经转世了,能不能活还不知道。
其次,宏本质上是一个非常,非常,非常low的东西,史前时代人们还不够聪明的时候才想出这样的办法。大部分的纯C项目中,用户自定义宏都是非常丑陋的,会把代码搞的一塌糊涂。只有具备OS级别的设计能力才能玩的好宏。
然后,Java现在是有无符号数的哦,从JDK8开始就可以在SDK基础上用无符号数了~还是C#好,有byte和ushort~
说到Java就有意思了,这货这几年都跟在C#后面抄,最经典就是Lambda表达式抄过去以前说这玩意没用,结果呢,真香~

出0入442汤圆

发表于 2019-4-26 21:03:10 来自手机 | 显示全部楼层
takashiki 发表于 2019-4-26 20:19
所以说,应用场景不同。后出的语言并不是为了替代先出的语言,加入新特性丢弃部分特性很正常。
Java不但 ...

是的。java的无符号数处理真j8扯淡。难怪现在被python等超越。

出0入442汤圆

发表于 2019-4-26 21:05:50 来自手机 | 显示全部楼层
最新的android8仍然不支持无符号数(andtoidstudio)。c++直接移植跑出来的结果是错的。把宏说这么差,你没正经学过c++吧。很多工作如果不用宏,你可能要拷成千上万个副本!!所谓宏就是干这个的。比如,openblas库,它就一个主函数!所有api全是用上千行宏define例化出来的!

出870入263汤圆

发表于 2019-4-27 11:01:07 | 显示全部楼层
不是C#实现不了,是因为你不懂。
C#博大精深,大部分人以为只是入门知识那么简单就是C#的全部!
下面只是方法之一而已:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace ConsoleApplication1
  6. {
  7.     using System.Runtime.InteropServices;

  8.     unsafe class Program
  9.     {
  10.         [StructLayout(LayoutKind.Sequential, Pack=1)]
  11.         unsafe struct __GkTable
  12.         {
  13.             public ushort   dev_address;
  14.             public fixed ushort Sen1_ad[10];
  15.             public fixed ushort Sen1_zl[10];
  16.             public fixed ushort Sen2_ad[10];
  17.             public fixed ushort Sen2_zl[10];     
  18.         };

  19.         static void Main(string[] args)
  20.         {
  21.             __GkTable obj = new __GkTable();
  22.             obj.dev_address = 3;
  23.             obj.Sen1_ad[9] = 8;
  24.             Console.WriteLine(obj.Sen1_ad[8]);
  25.         }
  26.     }
  27. }
复制代码

出870入263汤圆

发表于 2019-4-27 11:06:30 | 显示全部楼层
现在潜心学习的人不多了。如果对某平台不作个系统学习,有哪些特性和功能都不清楚,又怎么能主动发挥出平台的优势呢?
很多人都说拿起来就用,边用边学。其实这样有个坏处就是:你边学边做的项目就是一堆狗屎!

出0入0汤圆

发表于 2019-4-27 18:04:49 | 显示全部楼层
armstrong 发表于 2019-4-27 11:06
现在潜心学习的人不多了。如果对某平台不作个系统学习,有哪些特性和功能都不清楚,又怎么能主动发挥出平台 ...

赞同。

这也是社会浮躁的大环境造成很多做研发的有急功近利的心态。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 03:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表