使用MingW生成dll

使用GCC生成dll文件


为什么要使用MingW呢?其实主要还是使用Gcc,在Windows下主要有Mingw和Cywin,这里使用Mingw,因为Gcc在生成动态库,依赖项比较少,不像在VS生成依赖特定VC库版本.在某些没有VC库对应的版本时是无法执行的.

VS2008生成


这里生成c语言的动态库,主要是为了让c#调用.先来一段测试代码.
//vs编译的话,要将函数导出
_declspec(dllexport) int _stdcall add(int a, int b)  
{
	return a + b;
}

vs生成dll

看一下VS2008生成dll,依赖的dll文件
vs2008生成dll文件依赖项

GCC生成

不得不说,原先没用过GCC生成dll,便在百度上进行搜索,发现全是肯定.代码还是和用VC有区别,用GCC不需要对函数进行导出.
代码如下:

int add(int a, int b)
{
	return a + b;
}
#注意编译,只需要指定为*.dll 加上-shared
gcc -o callback.dll  -shared main.c




C#如何调用

[DllImport("callback.dll", SetLastError = true)]
static extern int add(int a, int b);

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        string txt1 = textBox1.Text;
        string txt2 = textBox2.Text;
        int sum = add(Convert.ToInt32(txt1), Convert.ToInt32(txt2));
        textBox3.Text = sum.ToString();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.StackTrace);
    }
}

效果:

c#调用c语言dll

秋风 2017-11-24