如何从Delphi脚本调用用c#编写的外部自定义.dll文件?
如何在Delphi for InnoSetup中从该.dll调用portAvailable()函数?上面发布的代码有什么问题?我试图在InnoSetup中访问此.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
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';