如何从Delphi脚本中调用用c#编写的外部自定义.dll文件?

时间:2014-01-22 09:38:50

标签: c# delphi inno-setup

using System;

namespace Example1
{
class Program
  {
   public static void portAvailable(IPAddress ipa,int port)
    {
try
{
      System.Net.Sockets.Socket sock = new    
      System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,
      System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
  sock.Connect(ipa, portno);
  if (sock.Connected == true)  // Port is in use and connection is successful
  MessageBox.Show("Port is Closed");
  sock.Close();

}
catch (System.Net.Sockets.SocketException ex)
{
if (ex.ErrorCode == 10061)  // Port is unused and could not establish connection 
     MessageBox.Show("Port is Open!");
else
     MessageBox.Show(ex.Message);
}

  }


 static void Main(string[] args)
  { 
            string hostName=Dns.GetHostname();
    int port=Convert.ToInt32(Console.ReadLine());
    IPAddress ipa = (IPAddress) Dns.GetHostAddresses(hostName)[0];
             portAvailable(ipa,port);


  }
 }
}

如何从Delphi for InnoSetup中的.dll调用portAvailable()函数?上面发布的代码出了什么问题?我试图在我的InnoSetup中访问这个.dll但是当用户输入端口号时它没有检查。我应该只在可用的端口安装设置。当用户进入我们的端口时,它应该通知要求其他端口号。请解决这个问题

  function portAvailable(
      ipa :IPAddress;
      port : int;):void;external 'Program.dll';

我试图在这里调用Program.dll中的函数。

1 个答案:

答案 0 :(得分:2)

.NET DLL不是本机DLL,所以你不能直接调用方法,你必须使用混合模式C ++ / CLI程序集或COM以某种方式公开它们。

我不确定Inno的Inno有什么(如果有的话)。您可能会发现构建可执行文件并使用命令行参数从Inno调用它很容易。

<强>附录:

还有一个名为Unmanaged Exports的第三方软件包,您可以尝试使用与DllImport类似的方法,但我自己没有尝试过。