DLL封装窗体方法并实现C#调用

用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#调用,则应该注意函数的大小写。)

6,

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);一定要有。

7, 在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。