Delphi + . net dll部署(在另一台pc上)

本文关键字:一台 pc net dll 部署 Delphi | 更新日期: 2023-09-27 18:16:31

我开发的Delphi应用程序使用。net dll(用c#编写),使用另一个。net dll(可能是c#)。我把它们命名为A.dll和B.dll。

我有A.dll的源代码,但不是B.dll。我不能从Delphi应用程序中使用B.dll,因为B.dll仅为c#应用程序编写(即没有COM互操作),所以我使用我的A.dll与B.dll一起工作。

B.dll创建2个管道与A.dll交换消息。问题是B.dll不能(!)连接到不同计算机上的这些管道。然而,如果我创建A.exe而不是A.dll,一切都是绝对ok的(管道连接和整个消息交换过程是ok的)。

在我的PC上,我总是构建A.dll和Delphi应用程序。我如何理解Visual Studio自动使用命令1) regasm -注册a.l ll;2) tlbexp -获取A.tlb文件。

之后,我通过"导入类型库命令"导入A.tlb到Delphi应用程序。

在另一台计算机上,这里是A.dll过程管道从未连接的问题(我使用日志来理解这一点)。这里所说的"从未连接"是指无限等待pipe.WaitForConnection()命令的结果(在c#中)。

有谁能帮我解决这个问题吗?为什么"A.exe"可以用于Delphi应用程序,而不是"A.dll"?

谢谢

Delphi + . net dll部署(在另一台pc上)

我调查过这个问题。首先,在其他dll内部使用dll是坏主意。根据许多文章,GetProcAddr和其他一些函数可能会出现问题。其次,我开发了c#应用程序来与B.dll和Delphi应用程序进行通信。此外,我使用管道来实现这一点。

在Delphi中使用托管代码最简单的方法是通过COM,但是您不喜欢这种方法。

如果你的DLL目标是。net Framework 4。然后你可以使用DllExport

如果您正在开发针对。net Core或。net Standard的DLL,我建议您阅读这篇文章:https://learn.microsoft.com/en-us/dotnet/core/tutorials/netcore-hosting

3种方法我都试过了,都有效。

另一个来自github的解决方案:不使用COM在运行时调用。net dll

DDNRuntime(Delphi . net Framework/。. NET Core Runtime)

https://github.com/ying32/DDNRuntime-examples

它可以帮助你轻松调用。net函数

一样
function CreateMainForm(): DNForm;
var
  LButton: DNButton;
  LR: DNRectangle;
  //LEdit: DNTextBox;
begin
  LR := TDNScreen.DNClass.PrimaryScreen.Bounds;
  Result := TDNForm.Create;
  Result.Text := 'Delphi .NET Runtime';
  LButton := TDNButton.Create;
  LButton.Text := 'Hello';
  LButton.add_Click(TEventClass.OnButtonClick);
  LButton.Location := TDNPoint.DNClass.init(100, 100);
  Result.Controls.Add(LButton);
  //Result.StartPosition := DNFormStartPosition.Manual;
  Result.StartPosition := DNFormStartPosition.CenterScreen;
  //Result.Location :=  TDNPoint.DNClass.init((LR.Width - Result.Width) div 2, (LR.Height - Result.Height) div 2);
end;