0

我正在使用第 3 方 dll (jlink.dll),一切都很好。唯一的问题是 jlink.dll 有时会显示一个窗口。我不想显示那些窗口。换句话说,假设 dll 的代码有方法:

// some method on jlink dll
public bool OppenConnection(string connectionString)
{
     if(string.IsNullOrEmpty(connectionString)){
        MessageBox.Show("SomeError"); // <-----------------------------
        return false;
     }

     // some logic
     return true;
}

当我从我的程序中调用该方法时,如果出现错误,jlink.dll 将显示一个窗口,我不希望这样。如果该方法返回 false,我可以自己显示一个窗口。所以我的问题是如何隐藏这些窗口?


这是我现在的解决方案:

我发现如果我从隐藏进程执行该方法(OppenConnection),则从 dll 显示的窗口也将被隐藏。这种方法的问题是现在我需要一个更多的过程。一个不是隐藏的(我的 gui),另一个是隐藏的调用 jlink.dll。我使用 namedPipes 在这两个进程之间交换消息。事情变得越来越复杂,如果我可以使用一个过程而不是两个过程会很好。此外,我必须有一个单独的线程来关闭 jlink.dll 创建的所有隐藏窗口。如果我可以像隐藏进程一样从非隐藏进程执行 jlink.dll 方法,那就太好了。这样我可以有一个进程而不是两个,删除所有命名管道,事情会简单得多。

4

1 回答 1

0

你想调用一个你无法控制的 DLL 来调用方法的特定部分,而不是方法中的所有逻辑。您有几个选择:1)使用它,2)根据您想要的功能滚动您自己的代码(使用反射器之类的东西),或 3)使用反射器之类的东西来查看是否有任何方法可以暴露内部结构你确实想要这样你就可以做 1 和 2 的组合。

如果我遗漏了什么,请告诉我 ;-)

于 2013-02-19T16:13:06.817 回答