2013-02-19 3 views
0

제 3 자 dll (jlink.dll)을 사용하고 있습니다. 유일한 문제는 jlink.dll이 때로는 창을 표시한다는 것입니다. 그 창문을 보여주고 싶지 않아. 즉 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를 반환하면 윈도우를 직접 표시 할 수 있습니다. 내 질문에 어떻게 그 창을 숨길 수 있습니까?

나는 숨겨진 프로세스에서 DLL에서 표시 얻을 창을 그 방법 (OppenConnection)을 실행하는 경우도 표시되지 않습니다 것을 발견했다 :


내가 지금이 그 해결책이다 . 이 접근 방식의 문제점은 이제 한 가지 더 많은 프로세스가 필요하다는 것입니다. 하나는 숨겨진 (내 gui), jlink.dll 호출하는 숨겨진 또 하나. namedPipes를 사용하여이 두 프로세스간에 메시지를 교환했습니다. 상황이 복잡해지고 두 개가 아닌 하나의 프로세스를 사용할 수 있다면 좋을 것입니다. 또한 jlink.dll에 의해 만들어진 모든 숨겨진 창을 닫는 별도의 스레드가 있어야합니다. 숨겨진 프로세스가 숨어 있지 않은 프로세스에서 수행하는 것처럼 jlink.dll 메소드를 실행할 수 있다면 좋을 것입니다. 그런 식으로 하나의 프로세스를 두 개 이상 가질 수 있으며 모든 명명 된 파이프를 제거하면 훨씬 더 많은 작업이 수행됩니다. 더 간단 해.

+1

는 메인 윈도우를 생성, 별도의 스레드에서 다른 메시지 펌프를 시작하려고 했 알려 싶지 않았다 그 창을 숨기고 그 스레드에서 jlink를 호출하면됩니까? –

+0

좋은 제안 나는 그것이 더 쉽게 감사 할 것이라고 생각한다! 그 이유에 대해 생각하지 못했던 올바른 해결책이 될 것이라고 생각합니다. –

+0

'IsNullOrEmpty' 부울이 사실이 아니란 것을 확인하는 것이 어떨까요? –

답변

0

메서드의 특정 부분을 호출하도록 제어하지 않지만 해당 메서드의 모든 논리가 아닌 DLL을 호출하려고합니다. 몇 가지 옵션이 있습니다. 1) 함께 살고 2) 원하는 기능 (반사경과 같은 것을 사용하십시오)에 따라 코드를 롤하거나 3) 리플렉터와 같은 것을 사용하여 내부를 노출시키는 메소드가 있는지 확인하십시오 당신이 1 조합과 2

을 할 수 있도록 당신은 내가 부족하면 뭔가 나를 ;-)

+0

사실 그 DLL을 제어 할 필요가 없습니다. dll이 보여주는 메시지 상자는 아무런 논리도하지 않는 바보입니다. 나는 Fyodor Soikin이 그가 말한 것을 따를 경우 그 여분의 프로세스와 명명 된 파이프가 필요 없다고 제안했다고 생각합니다. –