用DELPHI创建DLL文件,封装窗体的实现方法实例:
即一个程序不再是单一的一个EXE文件了,而是由一个EXE文件加N个DLL文件组成,这样做的原因是方便以后的维护与更新,也是跨平台开发的重要一步。
1、打开DELPHI,新建一个Dll Wizard
2、在新建的Dll里新建一个Form
3、在新建的Form里uses stdctrls
4、在var下面写:
Procedure SynAPP(App:THandle);stdcall;
Procedure ShowForm;stdcall;
(注:如果要让C#调用,则应该注意函数的大小写。)
var
Form1: TForm1;
Procedure SynAPP(App:THandle);stdcall;
Procedure ShowForm;stdcall;
implementation
{$R *.dfm}
Procedure SynAPP(App:THandle);stdcall;
Begin
Application.Handle:=app;
End;
Procedure ShowForm;stdcall;
Begin
Form1 := Tform1.create(Application);
Form1.ShowModal;
FreeAndNil(Form1);
End;
一定要注意FreeAndNil(Form1);一定要有。
5、在dll的Library文件里的{$R *.res}下面写:
exports
SynAPP,ShowForm;
上面到此为止完成了DLL封装窗体的创建。
调用:
1、在要调用DLL文件的程序的var下写:
Procedure SynAPP(App:THandle);stdcall;external 'my.dll' ;//----你的DLL文件名
Procedure ShowForm;stdcall;external 'my.dll';//----你的DLL文件名
注:把你写好的DLL放在本程序的同一目录下;
2、在你的程序的Button的On Click事件下写:
SynAPP(applicatiln.Handle);
ShowForm;
在C#中调用就这样写:
先加入引用:using System.Runtime.InteropServices;
代码如下:
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace dllForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private const string _fileDll = @"C:\Users\chenming\Desktop\dllForm\dllForm\bin\Debug\dllForm.dll";
[DllImport(_fileDll, EntryPoint = "SynAPP", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern string SynAPP(IntPtr i);
[DllImport(_fileDll, EntryPoint = "ShowForm", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern string ShowForm();
private void button1_Click(object sender, EventArgs e)
{
SynAPP(this.Handle);
ShowForm();
}
}
}
其它注意的地方:
1.C#中的double与Delphi中的double数据类型对应。不能是Delphi中的Extended类型。
2.Delphi中的函数的返回不能为Stirng,改为PChar,参数可以为String。
参考: