Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Delphi脚本调用用c#编写的外部自定义.dll文件?_C#_Delphi_Inno Setup - Fatal编程技术网

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

如何从Delphi脚本调用用c#编写的外部自定义.dll文件?,c#,delphi,inno-setup,C#,Delphi,Inno Setup,如何在Delphi for InnoSetup中从该.dll调用portAvailable()函数?上面发布的代码有什么问题?我试图在InnoSetup中访问此.dll,但当用户输入端口号时,它没有检查。我应该只在可用端口中安装安装程序。当用户输入位于美国的端口时,它应该通知请求其他端口号。请解决此问题 using System; namespace Example1 { class Program { public static void portAvailable(IPAddre

如何在Delphi for InnoSetup中从该.dll调用portAvailable()函数?上面发布的代码有什么问题?我试图在InnoSetup中访问此.dll,但当用户输入端口号时,它没有检查。我应该只在可用端口中安装安装程序。当用户输入位于美国的端口时,它应该通知请求其他端口号。请解决此问题

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);


  }
 }
}

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

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

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

附录:


还有一个名为you can try的第三方软件包,它的工作原理类似于
DllImport
,尽管我自己没有尝试过。

它看起来也不像DLL。看起来更像一个可执行文件。您甚至还没有展示如何尝试从Inno调用它。您真的想为这样一个琐碎的任务启动.net吗?似乎是大刀阔斧。如果你“碰巧”在寻找,那么我认为你用这段代码做得不对。您应该尝试将套接字绑定到终结点。您可以使用package。@我以前从未见过这种情况,我必须尝试一下。UnmanagedExports很神奇,但它也是一种魔术。混合模式C++/CLI至少让您知道自己在做什么。
  function portAvailable(
      ipa :IPAddress;
      port : int;):void;external 'Program.dll';