fbwcpu 发表于 2019-4-26 17:41:55

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

c#中可以调用C语言代码吗?    用C语言是因为,C语言可以定义带数组的结构体变量 ,比如下面这样的。C#实现不了。项目中,经常PC和单片机通讯用到数据流,想把数据流和结构体对应起来,用C# 要就只能一个一个字节的拼接,好麻烦。
typedef struct __GkTable
{
    u16   dev_address;                  
    u16   Sen1_ad;      
    u16   Sen1_zl;   
    u16   Sen2_ad;      
    u16   Sen2_zl;   
}_GkTable;

semonpic 发表于 2019-4-26 18:06:30

可以的,C# 没你想的那么二
   
    struct StructDemo
    {
      
      public byte a;
      public byte c;
      
      public byte[] b;
      public byte d;
      public int e;
      
    }
具体字节数组和结构体怎么转化,网上搜

fbwcpu 发表于 2019-4-26 18:46:24

semonpic 发表于 2019-4-26 18:06
可以的,C# 没你想的那么二
   

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

miaoguoqiang 发表于 2019-4-26 18:53:09

不过c#中结构体一般用class实现比较好

Error.Dan 发表于 2019-4-26 18:58:52

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

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

daiqx 发表于 2019-4-26 19:07:13

如果语法上不支持,可以实现同样结构的类,然后在类中实现一个转换输出函数。让麻烦的事电脑做,不就是编程的目标么。

takashiki 发表于 2019-4-26 19:09:48

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

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

wye11083 发表于 2019-4-26 19:22:37

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

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

Error.Dan 发表于 2019-4-26 19:33:10

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

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

takashiki 发表于 2019-4-26 20:14:05

Error.Dan 发表于 2019-4-26 19:33
C# 预处理指令了解一下。

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

takashiki 发表于 2019-4-26 20:19:12

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

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

Error.Dan 发表于 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表达式抄过去以前说这玩意没用,结果呢,真香~

wye11083 发表于 2019-4-26 21:03:10

takashiki 发表于 2019-4-26 20:19
所以说,应用场景不同。后出的语言并不是为了替代先出的语言,加入新特性丢弃部分特性很正常。
Java不但 ...

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

wye11083 发表于 2019-4-26 21:05:50

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

armstrong 发表于 2019-4-27 11:01:07

不是C#实现不了,是因为你不懂。
C#博大精深,大部分人以为只是入门知识那么简单就是C#的全部!
下面只是方法之一而已:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    using System.Runtime.InteropServices;

    unsafe class Program
    {
      
      unsafe struct __GkTable
      {
            public ushort   dev_address;
            public fixed ushort Sen1_ad;
            public fixed ushort Sen1_zl;
            public fixed ushort Sen2_ad;
            public fixed ushort Sen2_zl;   
      };

      static void Main(string[] args)
      {
            __GkTable obj = new __GkTable();
            obj.dev_address = 3;
            obj.Sen1_ad = 8;
            Console.WriteLine(obj.Sen1_ad);
      }
    }
}

armstrong 发表于 2019-4-27 11:06:30

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

dalige 发表于 2019-4-27 18:04:49

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

赞同。

这也是社会浮躁的大环境造成很多做研发的有急功近利的心态。
页: [1]
查看完整版本: c#中可以调用C语言代码吗?