【发布时间】:2014-05-06 13:02:39
【问题描述】:
我有一个 win32 应用程序(用 Delphi 编写),它调用一些 WPF 窗口。 这些 WPF 窗口调用 win32 Delphi 项目中的其他窗口(以重用某些代码)。当我这样做时,它会隐藏(发送到后台)WPF 窗口。
这些 win32 窗口位于 COM dll 中。
有办法避免这种行为吗?
我需要这样的东西:
+--------------------------------------------------
| win32
|
|
|
| +-------------------------------------+
| | wpf |
| | |
| | |
| | |
| | +--------------------+ |
| | | win32 | |
| +--| |-------------+
| | |
| +--------------------+
|
|
但我明白了:
+--------------------------------------------------
| win32
|
|
|
|
|
|
|
|
| +--------------------+
| | win32 |
| | |
| | |
| +--------------------+
|
|
在 delphi 主项目中,我使用“CreateOleObject”来访问 wpf 代码。 在 WPF 中,使用“ShowDialog()”命令打开窗口。 同样,在 WPF 中,我调用 delphi,使用对我的 win32 dll 的互操作引用。
好的,使用的代码如下:
Delphi 主应用:
var dll : OleVariant;
begin
dll := CreateOleObject("MyDllinCSharp.ClassName");
dll.DoSomething(...);
此时,wpf windows 来到了前面:
wpf 代码:
var form = new MyForm();
form.ShowDialog();
在 xaml 中,没什么重要的,只有一个基本的窗口:
<Window x:Class="MyForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Reverter" Height="432" Width="500" WindowStartupLocation="CenterScreen">
现在在c#中,我将在c#项目中引用COM dll后调用一个delphi DLL:
var dll = Delphi.CreateInstance("delphidll", "Interfacename") as IMyProcess;
dll.DoSomethingInDelphi(....);
【问题讨论】:
-
没有更多细节很难提供帮助
-
你能用非常简单的 Delphi -> WPF -> Delphi 代码 sn-p 复制该行为吗?
-
好的,我已经更新了。
-
代码当然很重要。请添加 SSCCE。
-
不能提供代码是什么意思。想象一下,如果你告诉编译器你不能提供代码。显然你可以提供代码。在我看来,你好像还不够努力。