2012-11-15 11 views
2

2 개의 CONSOLE 응용 프로그램 (양식이없는 2 개의 다른 PID!)에서 문자열을 보내고 싶습니다. 나는 이것을 수업에서 선언 할 필요가 있음을 알았다. 콘솔 응용 프로그램에서 클래스를 사용하지 않고이 작업을 수행 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?델파이에서 클래스가없는 WM_COPYDATA

도움 주셔서 감사합니다.

+1

WM_COPYDATA에서 WM을 살펴보면 WindowMessage에서 빌드됩니다. 사실 그것은 메시지가 창으로 보내집니다. 그러나 TForm뿐만 아니라 Window입니다. 디스플레이에서 볼 수있는 거의 모든 것이 창을 기반으로합니다. MS가 제품 Windows라고 부른 이유) o) –

답변

11

WM_COPYDATA을 보낼 창없이 보낼 수 없습니다. 클래스를 사용하지 않는 경우 Win32 API RegisterClass()CreateWindow/Ex() 함수를 직접 사용하여 창을 할당하고 메시지 처리기 프로 시저에 대한 자체 독립 실행 형 함수를 제공해야합니다.

하지만 클래스를 사용하지 않는 이유는 무엇입니까? 그런 다음 RTL의 내장 메시지 처리기 시스템을 활용할 수 있습니다. 런타임에 클래스 개체를 인스턴스화 할 필요가 없습니다 적어도, 당신은 정적 클래스 방법 예 AllocateHWnd()을 사용할 수 있습니다 :이 사용자의 요구에 맞게하지 않는 경우

type 
    TWindowMessages = class 
    public 
    class procedure WndProc(var Message: TMessage); 
    end; 

class procedure TWindowMessages.WndProc(var Message: TMessage); 
begin 
    //... 
end; 

var 
    Wnd: HWND; 

Wnd := AllocateHWnd(TWindowMessages.WndProc); 
// pump the message queue for new messages as needed... 
DeallocateHWnd(Wnd); 

을, 당신은 생각한다 메일 슬롯, 소켓 등과 같이 윈도우에 의존하지 않는 다른 IPC 메커니즘.

+2

사소한 nit-pick. 그것은 정적 클래스 메소드가 아닙니다. 정적 클래스 메서드에는 암시 적 Self 매개 변수가 없습니다. 선언 끝에 정적을 추가하여 정적 클래스 메서드를 만듭니다. 그것은 클래스 메소드입니다. –