dll(dll修复工具密钥)

前沿拓展:


使用GCC生成dll文件

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

这篇文章是17年写,是因为当时项目要调用C/C++生成动态库(dll),因为当时一个同事是使用VS2015开发的,导致在现场的老机器无法直接使用.

VS2008生成dll

这里是生成c语言的动态库,主要是为了让c#调用.先来一段测试代码.

//vs编译的话,要将函数导出
_declspec(dllexport) int _stdcall add(int a, int b)
{
return a + b;
}dll(dll修复工具密钥)

VS2008生成dll

看一下VS2008生成dll,依赖的dll文件(VS生成dll,依赖具体某个版本vcruntime)

dll(dll修复工具密钥)

vs2008生成dll文件依赖项,分别依赖msvcr90d.dll和kernel32.dll

GCC生成

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

代码如下:

int add(int a, int b)
{
return a + b;
}//注意编译,只需要指定为*.dll 加上-shared
gcc -o callback.dll -shared main.cdll(dll修复工具密钥)

GCC生成dll,依赖kernel32.dll和msvrt.dll

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)); //调用c语言生成动态库中的方法
textBox3.Text = sum.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace);
}
}

效果:

dll(dll修复工具密钥)

C#调用C语言生成的动态库

拓展知识:

原创文章,作者:九贤生活小编,如若转载,请注明出处:http://www.wangguangwei.com/9183.html