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中的函数。
答案 0 :(得分:2)
.NET DLL不是本机DLL,所以你不能直接调用方法,你必须使用混合模式C ++ / CLI程序集或COM以某种方式公开它们。
我不确定Inno的Inno有什么(如果有的话)。您可能会发现构建可执行文件并使用命令行参数从Inno调用它很容易。
<强>附录:强>
还有一个名为Unmanaged Exports的第三方软件包,您可以尝试使用与DllImport
类似的方法,但我自己没有尝试过。