홈>
내가 유지 관리하는 VB6 응용 프로그램에서 수행해야 할 일은 다음과 같습니다.
<올>요청 보내기
응답을 기다립니다.
WinSock 및 Winsock 대체를 사용해 보았지만 다양한 Windows 응용 프로그램에 내재 된 메시징 루프를 어떤 형태로든 다른 형태로 의존합니다. VB6 (또는 다른 언어)에서 위 알고리즘을 구현하는 방법에 대해서는 Winsock API에 대해 잘 모릅니다.
내 응용 프로그램은 전용 이더넷 네트워크를 통해 금속 절단기를 제어하는 VB6 CAD/CAM 소프트웨어입니다. 이 소프트웨어는 20 년 동안 유지 관리되었으며 다양한 유형의 모션 컨트롤러를위한 여러 드라이버를 개발했습니다. 현재까지 이러한 모션 컨트롤러의 API는
<올>Winsock의 문제점은 DoEvents를 삽입하여 응답해야한다는 것입니다. 이로 인해 VB6 애플리케이션에서 멀티 태스킹을 처리하는 방식에 혼란이 발생합니다. CSocketMaster와 같은 대체품은 우리의 멀티 태스킹을 방해하는 서브 클래 싱을 사용합니다.
따라서 위에서 설명한대로해야 할 일을 할 수있는 Winsock API 또는 타사 dll을 사용하는 방법에 대한 도움이 필요합니다. 다른 모션 컨트롤이 내가 원하는 것을하는 것을 보지 못했는지 묻지 않을 것입니다.
- 답변 # 1
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- JavaScript 변수를 HTML div에 '출력'하는 방법
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 문자열에서 특정 문자 제거
와이즈 비즈
VB6 + Winsock이 제대로 작동하지 않으면 .NET에서이를 작성하여 VB6 프로그램의 COM 표시 DLL로 작성하면 비용이 절감됩니다.
아래 예제는 당신을 시작할 것입니다. 가끔 이보다 더 많은 전화를 걸면 각 전화의 연결이 열리고 닫힐 때 속도가 느려집니다. PC와 컨트롤러 사이의 앞뒤 통신을 위해 열린 연결을 재사용 할 수 있도록 쉽게 확장 할 수 있어야합니다. 메모리 누수가 발생하지 않도록주의하십시오!
/// <summary> /// Sends a message to the specified host:port, and waits for a response /// </summary> public string SendAndReceive(string host, int port, string messageToSend, int millisecondTimeout) { try { using (var client = new TcpClient()) { client.SendTimeout = client.ReceiveTimeout = millisecondTimeout; // Perform connection client.Connect(host, port); if (client.Connected) { using (var stream = client.GetStream()) { // Convert the message to a byte array var toSend = Encoding.ASCII.GetBytes(messageToSend); // Send the message stream.Write(toSend, 0, toSend.Length); // Get a response var response = new byte[client.ReceiveBufferSize]; stream.Read(response, 0, client.ReceiveBufferSize); return Encoding.ASCII.GetString(retVal); } } else { return null; } } } catch { return null; } }