首先用vs2013创建一个dll。
dll的头文件如下:
#ifdef CDLL_EXPORTS #define CDLL_API __declspec(dllexport) #else #define CDLL_API __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif CDLL_API int adds(int a,int b); #ifdef __cplusplus } #endif // 此类是从 cdll.dll 导出的 class CDLL_API Ccdll { public: Ccdll(void); // TODO: 在此添加您的方法。 }; extern CDLL_API int ncdll; CDLL_API int fncdll(void); CDLL_API int adds(int a, int b);
#include "stdafx.h" #include "cdll.h" // 这是导出变量的一个示例 CDLL_API int ncdll=0; // 这是导出函数的一个示例。 CDLL_API int fncdll(void) { return 42; } CDLL_API int adds(int a, int b) { return a + b; } // 这是已导出类的构造函数。 // 有关类定义的信息,请参阅 cdll.h Ccdll::Ccdll() { return; }
因为要引入外部的dll文件,故需要引用System.Runtime.InteropServices 这个类。
在窗体类中加入以下内容:
[DllImport("cdll.dll", EntryPoint = "adds",CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)] public static extern int adds(int a, int b);
CallingConvention = CallingConvention.Cdecl //加入这个说明参数的调用方式,防止程序报调用堆栈不对称的错误。完整的代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Runtime.InteropServices; namespace WindowsFormsApplication1 { public partial class Form1 : Form { [DllImport("cdll.dll", EntryPoint = "adds", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)] public static extern int adds(int a, int b); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int a= Convert.ToInt32(textBox1.Text); int b = Convert.ToInt32(textBox2.Text); int c = adds(a, b); MessageBox.Show(Convert.ToString(c), textBox2.Text, MessageBoxButtons.OKCancel); } } }