`
isiqi
  • 浏览: 16484057 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

如何调用C# DLL

阅读更多

以前用delphi写的CS程序 今天客户要加几个模块上去 ,刚好会点C# ,这后面模块就用C#写的编译成dll文件, 在用delphi调用C#写的dll文件时折腾好阵子就有了这些经历写下来。

一、打开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文件 否则会报:无注册类别

分享到:
评论

相关推荐

    pb9.0调用c#dll

    本篇将详细讲解如何在PowerBuilder 9.0中调用C#编写的动态链接库(DLL)。 首先,我们需要理解DLL的概念。DLL(Dynamic Link Library)是Windows操作系统中的一个重要组成部分,它允许多个程序共享同一块代码和数据...

    delphi调用C# DLL

    ### Delphi调用C# DLL的关键知识点 #### 一、环境配置与理解.NET与Delphi交互的基本原理 在深入探讨如何让Delphi调用C#编写的DLL之前,我们需要了解几个基本概念,以及如何配置相应的开发环境。 1. **环境配置**...

    VB调用C# Dll文件

    在IT领域,跨语言通信是常见的需求之一,本篇文章主要探讨如何在VB6.0环境中调用C#编写的Dll文件。VB6.0和C#属于不同平台,但通过COM(组件对象模型)和.NET Framework的支持,可以实现两者之间的交互。 首先,我们...

    VB6.0调用C# Dll解决方法

    通过以上步骤,我们可以在VB6.0中成功调用C#编写的DLL,实现两种不同编程环境下的协同工作。这个过程涉及了COM兼容性、类型库、接口调用等多个核心知识点,对于理解和开发跨平台的应用程序具有重要的实践意义。

    JAVA通过JNI调用C#dll的整个项目工程

    Java通过JNI调用C# DLL是一个跨平台、跨语言的技术实践,主要应用于需要利用Java的稳定性和C#的高性能场景。JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。C# ...

    Python 调用C# dll文件

    通过这个库,我们可以直接在Python环境中调用C#编写的DLL,实现两者之间的通信。 **一、安装pythonnet** 在Python中使用`pythonnet`,首先需要安装该库。你可以使用pip来安装: ```bash pip install pythonnet ``...

    SqlServer调用C#DLL的方法

    ### SqlServer调用C#DLL的方法 在现代数据库系统中,为了提高性能和实现复杂的业务逻辑,有时需要在数据库内部直接执行用高级编程语言编写的代码。SqlServer支持通过CLR(Common Language Runtime)集成来调用.NET ...

    vb6调用C#Dll函数

    本文将详细介绍如何在VB6中调用C#编写的DLL函数。 首先,确保你的开发环境已安装了Visual Studio,因为它同时支持VB6和C#项目。创建C# DLL项目: 1. 打开Visual Studio,选择“新建项目”。 2. 在“新建项目”...

    C++调用C#DLL

    C++调用C#DLLC++调用C#DLLC++调用C#DLLC++调用C#DLLC++调用C#DLLC++调用C#DLLC++调用C#DLLC++调用C#DLLC++调用C#DLLC++调用C#DLLC++调用C#DLLC++调用C#DLLC++调用C#DLLC++调用C#DLLC++调用C#DLLC++调用C#DLL

    Delphi调用C#DLL.rar

    标题 "Delphi调用C#DLL.rar" 涉及的核心技术是跨语言互操作,具体来说,就是如何在Delphi环境下调用由C#编写的动态链接库(DLL)。这个压缩包包含了实现这一功能所需的全部组件和指导文档。 1. **C# DLL**:C#是一...

    MFC 调用C# dll 实现excel的创建

    在某些情况下,我们需要在MFC应用中调用C#编写的DLL(动态链接库)来利用C#的功能,例如创建Excel工作簿。本文将详细介绍如何通过MFC调用C# DLL来实现Excel的创建。 首先,我们需在C#环境中编写一个DLL,该DLL包含...

    VC++调用C# DLL

    本示例中,我们探讨的主题是“VC++调用C# DLL”,即如何使用C++代码调用由C#编写的动态链接库(DLL)。这个过程涉及到.NET Framework的互操作能力,特别是通过.NET的公共语言运行时(CLR)实现的COM互操作。 首先,...

    C++调用C#DLL例子

    用C++调用C#实例代码,C#封装为DLL。

    C++调用C#dll代码

    在跨语言编程中,有时我们需要在C++代码中调用C#编写的动态链接库(DLL)。本示例中,我们将探讨如何在Visual Studio 2010环境下,使用C++来调用C#编译生成的DLL。C++与C#之间的互操作性主要依赖于Microsoft的COM...

    Pb调用 c#编写的DLL

    为了使PB能够调用C# DLL,我们需要进行一些特殊的配置。进入项目的属性设置,选择“应用程序”选项卡,点击“程序集信息”按钮,勾选“使程序集COM可见”。这将允许非.NET框架的应用程序(如PB)访问此DLL。 接下来...

    java调用C#封装的dll方法

    ### Java调用C#封装的DLL方法 #### 第一种方法:Java利用JNA进行调用 **背景介绍:** 为了实现Java与C#之间的交互,一种常用的方式是通过调用C#封装的DLL文件来完成特定功能。这种方法涉及到.NET Framework与Java...

    PB调用C#写的dll文件

    标题中的“PB调用C#写的dll文件”指的是在PowerBuilder(PB)应用程序中使用C#编译的动态链接库(DLL)文件。这通常涉及到跨语言互操作性,允许不同编程语言之间的通信和功能共享。 C#是一种现代、面向对象的编程...

    VS + QT 调用C# DLL库

    例如,你可以创建一个C++/CLI项目,引入C# DLL作为引用,然后声明对应的C++函数,这些函数将调用C# DLL的方法。确保C++/CLI项目编译成动态库,并在QT项目中添加此库的依赖。 在QT应用中,你需要包含C++/CLI库的...

    在MFC下调用C#DLL库函数实例

    在MFC(Microsoft Foundation Classes)框架中调用C#编译的DLL库是跨语言编程的一个常见场景。本文将详细讲解如何实现这一过程,并提供一个实际应用实例。 首先,了解MFC与C#的背景。MFC是微软提供的C++类库,用于...

    Java调用C# DLL的方法简介

    Java调用C# DLL的方法简介 在跨平台的软件开发中,有时我们需要在Java应用程序中调用由C#编写的动态链接库(DLL)。这通常涉及到两种主要的技术:JNI(Java Native Interface)和第三方工具。这篇知识文章将详细介绍...

Global site tag (gtag.js) - Google Analytics