首页 > IT职业 > IT生活 > 将你的 C 语言代码编译成 .NET
通常情况下,对于那些使用C语言编程并开始用C#/ VB或一些其他的用于.NET的编译语言编程,那么他们希望或者甚至是需要调用我们用C语言编写的函数代码。
每当我在互联网上钻研,或说要在编译器中使用Visual C ++与/clr ,或使用pInvoke来调用C语言函数,都有这样的心情。
所以我在和我的朋友,OrangeC / C ++编译器的创造者,David交流的时候,我给他出了个主意,那就是为你的编译器创建一个新的后端来生成CLR代码,这样一来,就没有生成CLR代码的C语言开源编译器了。
在分离生成x86代码的编译器后端后,新的后端的开发在一些修复和实现之后开始了,我们已经成功取得编译器SQLite3并使用DLL与C#代码一起编译。
你可以遵循OrangeC / C ++编译器的开发,或致力于以下链接的项目贡献:
GitHub上的OrangeC / C ++编译器和工具链:https://gith
github上MSIL的OrangeC后端:https://gith
要构建MSIL的Orange C编译器,你需要下载OrangeC编译器的完整代码,你可以在这里得到源代码:
或者
在你下载源代码后,在C:orangec解压所有zip文件,在解压所有文件后,你需要下载MSIL后端
解压所有文件到文件夹C:orangecsrcocc,当出现替代选项的时候,接受替代文件。
要构建和生成源代码,必须具备下面其中一个编译器:
MinGW
Borland C / C ++ 5.5(我用这个编译器来构建编译程序)
CLang
Visual C / C ++ 10
OrangeC 编译器
在下载和解压所有文件后,打开CMD导航到文件夹C:orangecsrc,type,config.bat,在执行config.bat,type后:
omake fullbuild
这将建立所有的orangec编译器。
构建后,也许你会看到一个关于创建zip文件的错误,但是不要担心。
好了,现在你已经编译好了所有的OrangeC / C ++工具链,为了构建后端到MSIL,你需要去到文件夹C:orangecsrcoccnetil,在这个文件夹里面,type(在系统路径中具备ILASM 和CSC (C#编译器)编译器时必须的):
omake netlib.lib
omake
在执行这一命令后,你就有了occil.exe
要使用编译器,你只需下载这篇文章中提供的链接,创建文件夹C:orangec,解压该文件夹中的所有zip内容,打开CMD,然后导航到C:orangec文件夹,在orangec 文件夹中,type,config.bat后,当运行 config.bat文件时,一个新的环境变量将在CMD背景下创建,因此编译器可以定位include文件夹。
*重点* ——在你的路径中具备ILASM.EXE很有必要,为了做到这一点,你有两个办法把 ILASM放到你的路径中:
运行VSVARS32.BAT
在你的CMD中执行以下命令:PATH = C:WindowsMicrosoft.NETFrameworkv4.0.30319;%PATH%
在构建生成的IL代码到EXE / DLL时,在路径中具备ilasm是有必要,然而我们正在OrangeC中实施oilasm。
创建一个名为“float_to_ieee754.c”的C文件,并把代码放到C文件:
#include#include #include char *strrev_t(char *str){ char *p1, *p2; if (!str || !*str) return str; for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2) { *p1 ^= *p2; *p2 ^= *p1; *p1 ^= *p2; } return str; }void floatToBinary(float f, char *str, int numeroDeBits){ int i = 0; int strIndex = 0; union { float f; unsigned int i; }u; u.f = f; memset(str, '0', numeroDeBits); for (i = 0; i >= 1; } str[strIndex] = '
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1414/viewspace-2802138/ ,如需转载,请注明出处,否则将追究法律责任。