windows中使用C# 调用 C语言生成的dll
首先建立一个C语言源文件test.c
void swap(int* a, int* b) { int c = *a; *a = *b; *b = c; }
然后下载mingw64,解压,进入到bin目录,查看是否有gcc.exe ,只要下载正确肯定是有的,可以把这个bin目录加入环境变量,就可以在任意地方运行gcc。偷懒的做法是直接把刚才做好的test.c复制到这个bin目录中,和gcc.exe在一个目录,然后在此目录下,按住shift键不松,再在空白处点击鼠标右键,就可以在右键菜单看见“在此目录运行命令提示符”的选项,打开,输入命令
gcc -shared -o test.dll test.c
就可以把c源文件编译成dll,名字为test.dll(直接用cygwin里面的gcc是不行的,如果你不知道cygwin是什么,忽略这句话。)选择按修改时间排序,就可以在此目录最上面看见生成的test.dll
然后在VS中建立C#控制台项目,先编译一下,生成成功,以生成需要的目录。然后在项目上右键,选择在资源管理器中打开,然后把test.dll复制到bin下的Debug目录下,然后按照下面的代码修改。
using System; using System.Runtime.InteropServices; internal class Program { [DllImport("test.dll", CharSet = CharSet.Unicode)] public unsafe static extern void swap(int* a, int* b); private static void Main(string[] args) { int a = 1; int b = 2; Console.WriteLine($"Before Swap a={a},b={b}"); unsafe { swap(&a, &b); } Console.WriteLine($"After Swap a={a},b={b}"); Console.WriteLine("\n"); Console.ReadKey(); }
DLL导入特性声明了要调用的函数,之后就可以调用这个方法。因为在C#源代码中使用了指针和取地址符号,所以要用unsafe代码块。
注意:不需要在项目引用那里引用这个dll,只需要和可执行文件放在一起就好了。
注意:因为用了unsafe代码块,编译无法通过,要在项目属性里面build选项卡里面的允许unsafe勾上,就可以了。
注意:using System.Runtime.InteropServices;
相关推荐
-
VS2015 C#生成dll文件的方法(32/64)
下面就为大家分享一下在vs2005中生成dll文件的步骤图文版 新建项目> 模板 > windows > 类库 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ClassLibrary2 { public class Class1 { private int _age; public i
-
C#调用Matlab生成的dll方法的详细说明
其实整个过程比较简单,但是需要心细一点. 需要的工具:VS2005及以上版本,MATLAB2008B及以上版本,另外非常重要的需要安装一个MATLAB Compiler Runtime,这个文件(MCRInstall.exe)在安装完MATLAB之后就会在安装文件夹下存在,需要搜索一下(因为不同版本的MATLAB可能存放位置不同),把它安装一下就OK了. 接下来在MATLAB中写一个m文件,当然是一个函数啦.然后在matlab命令行下运行deploytool,在图形界面里选.net组件,然后进入
-
C#生成DLL文件的方法小结
使用csc命令将.cs文件编译成.dll的过程 很多时候,我们需要将.cs文件单独编译成.dll文件, 操作如下: 打开命令窗口->输入cmd到控制台->cd C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 转到vs.net安装的该目录下->执行csc命令csc /target:library File.cs->在该目录下产生一个对应名字的.dll文件(前提:把.cs文件放到C:\WINDOWS\Microsoft.NET\Framewor
-
C#生成DLL文件的方法
本文实例讲述了C#生成DLL文件的方法.分享给大家供大家参考.具体分析如下: Visual C#生成DLL文件 VisualC.Delphi或者VB等编程语言来编写的DLL文件,在编译完成以后,产生DLL文件已经是一个可以直接供计算机使用的二进制文件.但用Visual C#编译器生成的受管代码虽然也是二进制文件,但不是可以直接供计算机使用的原始代码,实质上是一种中间语言(IL)代码,需要经过"下一代窗口服务"( Next Generation Windows Services,简写为N
-
windows中使用C# 调用 C语言生成的dll
首先建立一个C语言源文件test.c void swap(int* a, int* b) { int c = *a; *a = *b; *b = c; } 然后下载mingw64,解压,进入到bin目录,查看是否有gcc.exe ,只要下载正确肯定是有的,可以把这个bin目录加入环境变量,就可以在任意地方运行gcc.偷懒的做法是直接把刚才做好的test.c复制到这个bin目录中,和gcc.exe在一个目录,然后在此目录下,按住shift键不松,再在空白处点击鼠标右键,就可以在右键菜单看见"在此目
-
在Windows中安装Apache2和PHP4的权威指南
Apache 2和PHP是创建交互式网站的流行方案,而且成本很低.在Windows中安装Apache 2是一件轻而易举的事情,但要使PHP 4与Apache 2配合无间地运行,就需要一定的技巧. 转自:动态网制作指南 www.knowsky.com 在PHP 4.3手册的Windows安装小节,没有解释如何让PHP与Apache 2配合使用,而有关Apache 2安装的小节缺失了你需要的大量信息.在网上公布的其他安装指南中,也包含了不少错误,使一些安装人员只好不断试验和犯错.例如,有些人甚至将P
-
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
下面通过实例给大家说明比较直观些,更方便大家了解. 本人的项目中通过jquery.ajax调用webservice. 客户端代码如下: $.ajax({ url: "test/xxx.asmx", type: 'POST', dataType: 'xml', timeout: , data: { name: "zhangsan", tags: ["aa", "bb", "cc"] }, error: fun
-
Windows系统Python直接调用C++ DLL的方法
环境:Window 10,VS 2019, Python 2.7.12, 64bit 1,打开 VS 2019,新建C++ Windows 动态链接库工程 Example,加入下列文件,如果Python是64位的则在VS中 Solution platforms 选择 x64 编译成64位的 DLL: Example.h #pragma once #ifndef CPP_EXPORTS #define CPP_EXPORTS #endif #ifdef CPP_EXPORTS #define CP
-
redis在Windows中下载及安装、设置教程
一.下载: 下载地址:https://github.com/MicrosoftArchive/redis/releases 根据系统下载的版本:以(64位为例) 下载后一般解压到根目录下:如(E:\Redis-x64-3.2.100) 二.安装: 打开cmd命令窗口,使用命令进行安装和注册redis到window服务 安装命令:redis-server.exe --service-install redis.windows.conf --loglevel verbose 启动服务命令:redis
-
windows中oracle存储过程加密的实例代码
在硬盘中创建一个过程test.sql create or replace procedure test_bf is begin dbms_output.put_line('test success'); end; 然后通过使用oracle自带的wrap命令对过程进行加密 先打开CMD然后输入命令 wrap iname='input_name' oname='output-name' input_name是需要加密的文件的路径,output_name是输出的文件名,如果没有oname那么生成出来的
-
Qt程序中调用C#编写的dll(推荐)
1.打开Visual Studio,新建一个C#的Class Library项目(这里选择的是.Net Framework 4),项目名为CSharpDll. 2.由于默认没有引入Forms等UI库,先在reference中添加引用System.Windows.Forms以便可以在测试中使用MessageBox等. 3.最终C#编写的dll的源代码如下图所示,命名空间为CSharpDll,公共类为CSharpClass. using System; using System.Collection
-
windows中dos批处理之命令特殊符号通配符与转义符(推荐)
目录 常用特殊符号 通配符(?和*) 转义符 对批处理中常用符号的详细解 1.@ 2.%.%% 3.: 和 :: 4.~ 5.>.>> 6.| 7.^ 8.& 9.&&.|| 10.() 11.+.-.*./ 12.equ.neq.lss.leq.gtr.geq 文章进行重新排版,并做了部分补充.所有命令均在win7 x64 中文旗舰版上进行测试. 常用特殊符号 @命令行回显屏蔽符 %批处理变量引导符 > 重定向符 > > 重定向符 <.&
-
MongoDB系列教程(三):Windows中下载和安装MongoDB
软件下载 下载mongodb最新的包:http://www.mongodb.org/downloads 下载mongodb可视化界面,mongoVUE:http://download.csdn.net/detail/lovesummerforever/8036417 软件安装 mongodb服务端安装步骤如下所示: 1.遵守mongodb规范,选择自己的磁盘创建文件夹,在这里我选择的是D盘,创建如下目录结构 复制代码 代码如下: D:\mongodb 作为安装的根目录
-
深入理解JavaScript中的尾调用(Tail Call)
什么是尾调用? 尾调用是函数式编程里比较重要的一个概念,尾调用的概念非常简单,一句话就能说清楚,它的意思是在函数的执行过程中,如果最后一个动作是一个函数的调用,即这个调用的返回值被当前函数直接返回,则称为尾调用,如下所示: function f(x) { return g(x) } 在 f 函数中,最后一步操作是调用 g 函数,并且调用 g 函数的返回值被 f 函数直接返回,这就是尾调用. 而下面两种情况就不是尾调用: // 情况一 function f(x){ let y = g(x); re
随机推荐
- js日历控件(可精确到分钟)
- java 三种将list转换为map的方法详解
- Hyper-V虚拟机不能上网问题的解决方法
- Android编程四大组件之Activity用法实例分析
- Android 加载大图及多图避免程序出现OOM(OutOfMemory)异常
- Android实现获取签名及公钥的方法
- MySQL:Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEM
- java对double数组排序示例分享
- SQL Server触发器和事务用法示例
- jQuery ajax serialize() 方法使用示例
- jQuery学习笔记 更改jQuery对象
- 添加、删除HTML结点 & 上传图片预览
- Linux下Squid代理服务器的架设与维护经验分享
- Java求10到100000之间的水仙花数算法示例
- 用java的spring实现一个简单的IOC容器示例代码
- 详解Spring Data JPA动态条件查询的写法
- javascript中方便增删改cookie的一个类
- C#实现简单聊天程序的方法
- C#位移的介绍与例子
- Notify - 基于jquery的消息通知插件