我开发了使用.Net dll(用C#编写)的Delphi应用程序,它使用另一个.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,那么绝对没问题(管道已连接,整个消息交换过程正常)。
在我的电脑上,我总是构建A.dll和Delphi应用程序。我如何理解Visual Studio自动使用命令 1)regasm - 注册A.dll, 2)tlbexp - 获取A.tlb文件。
之后我通过“导入类型库命令”将A.tlb导入Delphi应用程序。
在另一台计算机上这里是A.dll程序管道永远不会连接的问题(我已经用日志来理解这一点)。通过说“从未连接”我的意思是无限等待pipe.WaitForConnection()命令的结果(在c#中)。
任何人都可以帮我解决这个问题吗?为什么“A.exe”适用于Delphi app而不是“A.dll”?
由于
答案 0 :(得分:0)
我已经调查了这个问题。 首先,在其他dll中使用dll是个坏主意。根据许多文章,GetProcAddr和其他一些功能可能会遇到麻烦。 其次,我开发了C#app与B.dll和Delphi应用程序进行通信。另外,我使用管道来做到这一点。