• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Delphi调用C#类库.doc

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、打开vs2005

 新建windows应用程序项目命名为SFrm,删除应用程序自动生成的Program.cs

(因为我们是要生成dll文件)

在窗体类新建一接口(interface SHFRM) 让窗体类实现接口 代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Data.SqlClient;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace SFrm

{

    public interface SHFRM   //此接口用在delphi下调用必须用到

    {

        void ShchildFrm();

    }

    public partial class Form1 : Form,SHFRM

    {

        private BindingSource bindingSource1 = new BindingSource();

        private SqlDataAdapter dataAdapter = new SqlDataAdapter();

        public Form1()

        {

            InitializeComponent();

        }

        ///<summary>

        ///显示窗口

        ///</summary>

        public void ShchildFrm()

        {

            Form1 frm = new Form1();

            frm.Show();

        }

        ///<summary>

        ///按钮事件

        ///</summary>

        ///<param name="sender"></param>

        ///<param name="e"></param>

        private void button1_Click(object sender, EventArgs e)

        {

            dataGridView1.DataSource = bindingSource1;

            GetData("select * from Customers");

           

        }

        private void GetData(string selectCommand)

        {

            try

            {

         

                String connectionString = "Data Source=.;initial catalog=Northwind;user id =sa;pwd=";

                dataAdapter = new SqlDataAdapter(selectCommand, connectionString);

                SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);

                DataTable table = new DataTable();

                table.Locale = System.Globalization.CultureInfo.InvariantCulture;

                dataAdapter.Fill(table);

                bindingSource1.DataSource = table;

                dataGridView1.AutoResizeColumns(

                    DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);

            }

            catch (SqlException)

            {

                MessageBox.Show("To run this example, replace the value of the " +

                    "connectionString variable with a connection string that is " +

                    "valid for your system.");

            }

        }

    }

}

右击项目名在属性对话框中更改输出类型为”类库” 在界面点击程序集信息 按钮 如下图:

使程序集com可见必须选中

完成dll文件生成

二.DotNet 类库打包成COM类型库(在vs命令行执行如下操作)

Tlbexp.exe SFrm.dll /out:SFrm.tlb

三.注册COM类型库

Regasm.exe SFrm.dll

四.Delphi导入类型库

Delpi 中, Project -> Import Type Library ,选中类型库:dotnet2com.tlb,

生成 DotNet2Com_TLB 单元文件。单元文件中有接口 SHFRM。

 SHFRM = interface(IDispatch)

    ['{D8400C54-E4B2-36BD-B970-45CD204F319A}']

    procedure ShchildFrm; safecall;

 end;和代理类声明 TForm1及获得 SHFRM接口的属性:

      property DefaultInterface: _Form1 read GetDefaultInterface;

五.Delphi 中使用

uses

 SFrm_TLB;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

Frm:TForm1;

begin

Frm:=TForm1.Create(self);

   (Frm.DefaultInterface as SHFRM).ShchildFrm();//显示dll文件里窗体

end;

delhi程序运行结果如下图:

注:在程序运行环境必须安装。net环境并注册dll文件 否则会报:无注册类别


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi2010中保存UTF8/Unicode编码文件的问题发布时间:2022-07-18
下一篇:
Delphi面向对象编程思想学习笔记发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap