用Delphi 8、VB.net以及C#混合编程(转贴)

来源:互联网 发布:东华理工大学宿舍网络 编辑:程序博客网 时间:2024/05/19 05:02
这个礼拜三晚上的.net讲座被取消了,原因是与我的课程冲突,并且近20天内不允许停调课。所以只能在这里将我讲座中的部分演示内容预先公布一下了。

演示内容之一便是“同一平台、多种语言”。在.net的CLR平台上不同语言编写的程序可以相互调用。其UML图如下:



我们使用Delphi 8编写Person类,并编译成DLL文件。代码如下:

unit TPerson;
interface
type
  Person 
= class
  
private
    { 
Private Declarations }
  
public
    Name : 
string;
    Age : 
integer;
    constructor Create;
  
end;
implementation
constructor Person.Create;
begin
  inherited Create;
end;
end.

在VB.NET添加对Delphi编写的DLL的引用,并编写继承自Person类的Employee类。

Imports System

Public Class Employee
    
Inherits TPerson.Person

    
Public Salary As Int32

    
Public Sub Show()
        Console.
WriteLine("The Name is: " & Me.Name)
        Console.
WriteLine("The Age is:" & Me.Age)
        Console.
WriteLine("The Salary is:" & Me.Salary)
    
End Sub


End Class

下面的工作就是用C#编写代码调用Delphi与VB.NET生成的DLL。分别将两个DLL的引用添加到项目中,然后编写调用程序:

using System;
using TEmployee;

public class Client
{
  
public static void Main()
  
{
    Employee e 
= new Employee();
    e.Name 
= "Tom";
    e.Age 
= 22;
    e.Salary 
= 1500;
    e.Show();
  }

}

到此为止,程序编写完成,看看效果吧。完整的程序代码可以从这里下载。

posted on 2004-10-18 18:05 吕震宇 阅读(1379) 评论(7)  编辑 收藏 收藏至365Key 所属分类: 面向对象技术

评论

如果要让Delphi8调用C#写的dll,怎么来实现呢,lz?
  

# re: 用Delphi 8、VB.net以及C#混合编程 2005-08-11 20:31 吕震宇
@paddy102

完整的项目我可以发邮件过去。简单代码如下:

C#构建类库,代码:

using System;

namespace CSharpDLL
{
public class Hello
{
public void SayHello()
{
Console.WriteLine("Hello, World!");
Console.WriteLine("Press any key to continue...");
Console.Read();
}
}
}


Delphi 8构建控制台程序(不要用VCL程序,有可能不兼容)。代码如下:

program DelphiClient;

{$APPTYPE CONSOLE}

{%DelphiDotNetAssemblyCompiler 'CSharpDLL.dll'}

uses
SysUtils,
CSharpDLL;

var
h : Hello;

begin
h := Hello.Create();
h.SayHello();
end.

  

# re: 用Delphi 8、VB.net以及C#混合编程 2005-08-12 07:42 paddy102
先谢谢搂主,马上试试看
  

# re: 用Delphi 8、VB.net以及C#混合编程 2005-08-12 07:56 paddy102
照着写了一遍,编译出现如下错误:
[Fatal Error] File not found: 'D:/Project/代码/DelphiProject/CSharpDLL.dll'
[Fatal Error] Required package 'CSharpDLL' not found

文件的确是在这个位置,但不明白为什么就是找不到,还望Lz再多教几招,呵呵!
  

# re: 用Delphi 8、VB.net以及C#混合编程 2005-08-12 10:34 paddy102
lz 好

我好像找到问题所在了,问题出在我的'D:/Project/代码/DelphiProject/CSharpDLL.dll' 这个路径,在我换了一个全英文路径后,就可以编译通过了。奇怪的是在Delphi8又可以显示看到CSharpDLL.dll中的内容,看来Delphi8编译时不支持汉字,显示支持。不知道这么理解对不对?

再次谢谢热心的lz
  

# re: 用Delphi 8、VB.net以及C#混合编程 2005-08-12 10:39 吕震宇
很有意思的问题。我有几个“馊注意”,你试试:

1、检查DLL文件是否使用的是Release编译,也许debug编译Delphi不认。

2、Delphi文件中的{%DelphiDotNetAssemblyCompiler 'CSharpDLL.dll'} 中,将'CSharpDLL.dll'改为绝对路径引用,例如'D:/Project/代码/DelphiProject/CSharpDLL.dll' 。

3、查看你的Delphi项目目录下有一个DelphiClient.cfg(扩展名为cfg,文件名是你的项目名)文件,用记事本打开,找到里面有类似这样两句话:

-U"e:/dellcallcsharp/csharpdll/csharpdll/bin/release;E:/DellCallCSharp/csharpdll/csharpdll/bin/release;e:/dellcallcsharp/delphiclient"
-LU"e:/dellcallcsharp/delphiclient/CSharpDLL.dll"

这应当是编译指令参数,看看有没有什么问题。

4、重装Delphi8,呵呵
  

# re: 用Delphi 8、VB.net以及C#混合编程 2005-08-12 10:40 吕震宇
既然问题解决了,馊注意也没有用了,我也学了点东西,谢谢!
# re: 用Delphi 8、VB.net以及C#混合编程 2005-08-11 18:48 paddy102
原创粉丝点击