2 개의 CONSOLE 응용 프로그램 (양식이없는 2 개의 다른 PID!)에서 문자열을 보내고 싶습니다. 나는 이것을 수업에서 선언 할 필요가 있음을 알았다. 콘솔 응용 프로그램에서 클래스를 사용하지 않고이 작업을 수행 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?델파이에서 클래스가없는 WM_COPYDATA
도움 주셔서 감사합니다.
2 개의 CONSOLE 응용 프로그램 (양식이없는 2 개의 다른 PID!)에서 문자열을 보내고 싶습니다. 나는 이것을 수업에서 선언 할 필요가 있음을 알았다. 콘솔 응용 프로그램에서 클래스를 사용하지 않고이 작업을 수행 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까?델파이에서 클래스가없는 WM_COPYDATA
도움 주셔서 감사합니다.
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 메커니즘.
사소한 nit-pick. 그것은 정적 클래스 메소드가 아닙니다. 정적 클래스 메서드에는 암시 적 Self 매개 변수가 없습니다. 선언 끝에 정적을 추가하여 정적 클래스 메서드를 만듭니다. 그것은 클래스 메소드입니다. –
WM_COPYDATA에서 WM을 살펴보면 WindowMessage에서 빌드됩니다. 사실 그것은 메시지가 창으로 보내집니다. 그러나 TForm뿐만 아니라 Window입니다. 디스플레이에서 볼 수있는 거의 모든 것이 창을 기반으로합니다. MS가 제품 Windows라고 부른 이유) o) –