西安电子科技大学吧 关注:269,235贴子:5,475,254

孩子们仓颉语言大作业根本不需要学仓颉

只看楼主收藏回复

仓颉笑传之C code编(译)
耄耋手把手教你只用一行main函数就能生成你想要的程序


IP属地:陕西来自iPhone客户端1楼2025-06-03 21:40回复
    首先我们要有一个已经可以跑的c程序
    然后我们有两个选项:
    一个是用Visual Studio编译成动态链接库(.dll)
    一个是用gcc编译
    两个最终结果都是把代码变成了dll文件


    IP属地:陕西来自iPhone客户端2楼2025-06-03 21:43
    回复
      2025-10-11 22:34:59
      广告
      不感兴趣
      开通SVIP免广告
      3


      IP属地:陕西来自Android客户端3楼2025-06-03 21:46
      回复
        我们先讲第一个
        先在VS上建立一个.dll项目 然后把所有源文件和资源文件删光光
        然后新建一个.h文件和.c文件分别在源文件和资源文件上


        IP属地:陕西来自iPhone客户端4楼2025-06-03 21:47
        回复
          这里我们要求把我们c程序的所有函数和常量声明写在.h文件上 并在每个声明的函数前面加上_declspec(dllexport)
          最上面一行写上#pragma once


          IP属地:陕西来自iPhone客户端5楼2025-06-03 21:50
          回复
            .c文件仅仅保留函数定义和全局变量
            头文件仅需包含我们写的头文件就好了
            记得用的是双引号
            原程序中的main函数重新包装成void start()就行了


            IP属地:陕西来自iPhone客户端6楼2025-06-03 21:53
            回复
              然后我们需要把我们项目的属性的预编译头给取消掉
              在右键项目-属性-配置属性-C/C++-预编译头中选择不使用预编译头
              取消掉以后选择生成解决方案(快捷键F7)
              在路径“你的方案名字\x64\Debug”文件夹里后缀为.dll的文件就是我们想要的
              (图片出现两个是因为我改了名字生成多次解决方案而已)


              IP属地:陕西来自iPhone客户端7楼2025-06-03 22:02
              回复
                接着我们在VScode里直接用foreign
                @CallingConv[CDECL] func 用仓颉的语法声明我们需要用的函数
                类型映射我们去官网查一下就好了 这是其中最难的点
                第一张图我把所有用到的函数都声明了 其实是脱裤子放屁
                我们仅需要声明main函数里面要用的函数就行了
                用unsafe{Cfunc()}模块包裹住我们用的C类型函数就可以了


                IP属地:陕西来自iPhone客户端8楼2025-06-03 22:12
                回复
                  2025-10-11 22:28:59
                  广告
                  不感兴趣
                  开通SVIP免广告
                  接着就是编译环节 打开我们的VScode
                  我们将我们需要的.dll文件放在我们的主文件架上 在终端输入cjc src/main.仓j -L. -l “dll文件名不包含.dll后缀”
                  这里- L代表我们dll的文件路径 这个“.”就是当前路径的意思 -l就是我们需要的动态链接库的名字


                  IP属地:陕西来自iPhone客户端9楼2025-06-03 22:18
                  回复
                    生成的.exe文件就能跑了 第二个方法就是把.c文件通过命令行gcc -shared -c命令把.c编译成.dll 剩下的操作都一样就不多说了


                    IP属地:陕西来自iPhone客户端10楼2025-06-03 22:20
                    回复
                      Mark


                      IP属地:陕西来自Android客户端11楼2025-06-04 00:09
                      回复
                        good(👍ᐛ )


                        IP属地:陕西来自Android客户端12楼2025-06-04 00:23
                        回复


                          IP属地:陕西来自Android客户端13楼2025-06-04 00:57
                          回复
                            有实力,收藏了


                            IP属地:陕西来自Android客户端14楼2025-06-04 08:28
                            回复
                              2025-10-11 22:22:59
                              广告
                              不感兴趣
                              开通SVIP免广告


                              IP属地:陕西来自Android客户端15楼2025-06-04 08:31
                              回复