marketeer: 최소한 디버깅에 대한 단락을 추가해야 합니다. 이 문서에서는 AV가 발생할 수 있는 한 가지 상황을 언급하고 있지만, 다른 잠재적인 예외 원인은 제쳐두고라도 수동으로(눈이나 정신으로) 오류 위치를 찾으려고 하면 매우 오랜 시간이 걸리고 성공하지 못할 수도 있습니다.
의견을 보내 주셔서 감사합니다. 가장 많이 발생하는 오류를 포함하도록 이 섹션을 확장할 수 있다고 생각합니다. 그러나 "길고 실패한" 오류 검색을 피하려면 문서에 쓰여진 대로 모든 작업을 수행하세요. 그 안에 있는 예제는 실행 가능합니다. 게다가 메타에디터에서 디버거를 사용하면 단계별 디버깅과 중단점이 있어 꽤 괜찮습니다!
이 글에서는 누구에게도 프로그래밍 방법을 가르치고 싶지 않습니다. 누군가 기본적인 오류를 범한 다음 큰 소리로 " "라고 외친다면 아직 자신 만의 DLL을 만들지 말고 매트 부분을 배우기 시작해야 할 것입니다.
정말 빠르시네요! 글을 정말 많이 쓰셨네요! 델파이에대한 자신 만의 기사를 작성해야합니다 .
간략하고 순서대로 답변해 드리겠습니다:
1. Юниты SysUtils и Classes нужно было оставить в проекте.
시스유틸은 프로젝트에 있습니다! 클래스는할 일이 없습니다! SysUtils 이외의 예외 처리기는 기본적으로 연결된 System에 구현되어 있으므로 걱정할 이유가 없습니다.
2.DllEntryPoint (일명 DllMain) 내에서 모든 종류의 프로시저를 사용해서는 안 됩니다.
DllEntryPoint 예제는 모든 구석에 인터넷에 있습니다. 이것은 예를 들어 힙에서 메모리의 할당 및 해제를 바인딩할 수 있는 DLL 이벤트를 생성하는 표준 방법입니다. 이 메모리 작업 방법에 실제 오류가 있으면 고려할 준비가되었습니다.
나는 그것을 자주 사용하지 않기 때문에 DllEntryPoint에서 할 수없는 다른 모든 것에 대해 논쟁하지 않습니다.
3.메모리 관리자에 대해 많은 글을 썼습니다. 나는 당신의 결론 만 강조하겠습니다:
따라서 DLL과 응용 프로그램에 단일 메모리 관리자를 만들 수 있으며 MT4 메모리 관리자가 될 것입니다.
문제는 MT5(MT4)의 메모리 관리자가 어떻게 작동하는지 아무도 모른다는 것입니다 . 그리고 이 매니저를 구현하는 함수의 이름을 안다고 해도 MT5용API가 폐쇄되어있기 때문에 어떻게 사용할 수 있을까요 ! 따라서 단일 MT5 매니저와 DLL의 아이디어는 유토피아입니다.
독자를 혼동하지 않기 위해 대신 API함수에 구현 된 고전적인 메모리 처리 기술을 사용하는 것이 좋습니다 . 이는 문자열 작업 섹션의 기사에 설명되어 있습니다.
나는 여기에서 Delphi 책과 기사를 인용하는 대신 기사 작성자가 기사에 설명 된 내용에서 실제로 작동하지 않는 것과 관련하여 만 주장을 할 것이라는 사실을 믿습니다. 가급적이면 예제와 함께.
의견을 보내주셔서 감사합니다. 이 섹션은 가장 많이 발생하는 오류를 포함하도록 확장할 수 있다고 생각합니다. 그러나 "길고 실패한" 오류를 검색하지 않으려면 문서에 쓰여진 대로 모든 작업을 수행하세요. 그 안에 있는 예제는 실행 가능합니다. 게다가 메타에디터에서 디버거를 사용하면 단계별 디버깅과 중단점이 있어 꽤 괜찮습니다!
이 글에서는 누구에게도 프로그래밍 방법을 가르치고 싶지 않습니다. 누군가 기본적인 오류를 범한 다음 큰 소리로 " "라고 외친다면 아직 자신 만의 DLL을 만들지 말고 매트 부분을 배우기 시작해야 할 것입니다.
아아, 당신은 매우 착각하고 있습니다. 프로그래밍을 배우는 사람들뿐만 아니라 숙련 된 프로그래머도 초보적이든 그렇지 않든 실수를합니다.
이것은 수학과 관련이 없지만 디버깅 도구와 관련이 있습니다. 잘 알려진 "80 x 20" 통계를 기억해 봅시다. 시간의 80%는 디버깅에 소비되고 코드 작성에는 20%만 사용됩니다. 제가 알기로는 이 글의 목표는 실행 가능한 DLL을 작성하는 방법, 즉 주어진 특정 예제뿐만 아니라 가상의 다른 코드도 작성하는 방법을 알려드리는 것입니다. 물론 모든 잠재적 오류를 고려하는 것은 불가능하지만 원칙적으로 오류를 잡는 방법에 대한 정보가 필요합니다. 그렇지 않으면 독자는 예제를 재현하는 것 외에는 아무것도 할 수 없습니다.
메타에디터는 DLL 디버깅, 즉 내부 디버깅에 대해 이야기하고 있기 때문에 메타에디터와도 관련이 없습니다.
당신은 저자입니다 - 당신은 더 잘 알고 있습니다. 저는 프레젠테이션의 일부 불완전성에 대한 제 의견을 표현했을 뿐입니다.
이 글은 미완성된 mt4용 dll에 관한 오래된 기사에서 발췌한 것입니다. 여기에 발췌문을 복사해 두었습니다. 어렵지 않고 길지도 않습니다.
" 프로젝트에시스유틸이 있습니다! 클래스는아무 관련이 없습니다! SysUtils 이외의 예외 처리기는 기본적으로 연결된 System에 구현되어 있으므로 걱정할 이유가 없습니다. "
어떤 단위를 포함할지는 소유자에게 달려 있습니다. 하지만 그 이유를 명시할 필요가 있다고 생각합니다. 이 경우 borland는 SysUtils 및 클래스를 권장합니다. 그리고 그 이유가 있습니다.
" DllEntryPoint를 사용한 예제는 모든 구석에 인터넷에 나와 있습니다. 이것은 DLL 이벤트를 만드는 표준적인 방법입니다."
볼랜드는 우연히 DllMain을 숨긴 것이 아닙니다. 델파이에서 DLL을 만드는 표준 방법은 DllMain을 숨기는 것입니다. 왜 그런지 생각해 보세요. 그리고 Microsoft 자체에서 권장하는 내용을 읽어보세요.
" 메모리 할당을 바인딩하고 힙에서 해제 할 수 있습니다. 이 메모리 작업 방법에 실제 오류가 있는 경우 고려할 준비가 되어 있습니다."
그건 여러분에게 달려 있습니다. 하지만 제가 추천하는 것은 DllMain에서는 아무것도 하지 말아야 한다는 것입니다.
"문제는 MT5(MT4)의 메모리 관리자가 어떻게 작동하는지 아무도 모른다는 것입니다 . 그리고 이 매니저를 구현하는 함수의 이름을 안다고 해도 MT5용API가 폐쇄되어있기 때문에 어떻게 사용할 수 있을까요 !그래서 단일 MT5 매니저와 DLL이라는 아이디어는 유토피아입니다."
누군가에게는 "폐쇄적"이고 "유토피아"이고 다른 누군가에게는 "모든 것이 작동"합니다. 우리는 4에 대해 이야기하고 있습니다. 5는 보지 못했습니다.
최소한 디버깅에 대한 단락을 추가해야 합니다. 이 문서에서는 AV가 발생할 수 있는 한 가지 상황을 언급하고 있지만, 다른 잠재적인 예외 원인은 제쳐두고라도 수동으로(눈이나 정신으로) 오류 위치를 찾으려고 하면 매우 오랜 시간이 걸리고 성공하지 못할 수도 있습니다.
의견을 보내 주셔서 감사합니다. 가장 많이 발생하는 오류를 포함하도록 이 섹션을 확장할 수 있다고 생각합니다. 그러나 "길고 실패한" 오류 검색을 피하려면 문서에 쓰여진 대로 모든 작업을 수행하세요. 그 안에 있는 예제는 실행 가능합니다. 게다가 메타에디터에서 디버거를 사용하면 단계별 디버깅과 중단점이 있어 꽤 괜찮습니다!
이 글에서는 누구에게도 프로그래밍 방법을 가르치고 싶지 않습니다. 누군가 기본적인 오류를 범한 다음 큰 소리로 " "라고 외친다면 아직 자신 만의 DLL을 만들지 말고 매트 부분을 배우기 시작해야 할 것입니다.
안녕하세요 HideYourRichess.
정말 빠르시네요! 글을 정말 많이 쓰셨네요! 델파이에대한 자신 만의 기사를 작성해야합니다 .
간략하고 순서대로 답변해 드리겠습니다:
1. Юниты SysUtils и Classes нужно было оставить в проекте.
시스유틸은 프로젝트에 있습니다! 클래스는할 일이 없습니다! SysUtils 이외의 예외 처리기는 기본적으로 연결된 System에 구현되어 있으므로 걱정할 이유가 없습니다.
2. DllEntryPoint (일명 DllMain) 내에서 모든 종류의 프로시저를 사용해서는 안 됩니다.
DllEntryPoint 예제는 모든 구석에 인터넷에 있습니다. 이것은 예를 들어 힙에서 메모리의 할당 및 해제를 바인딩할 수 있는 DLL 이벤트를 생성하는 표준 방법입니다. 이 메모리 작업 방법에 실제 오류가 있으면 고려할 준비가되었습니다.
나는 그것을 자주 사용하지 않기 때문에 DllEntryPoint에서 할 수없는 다른 모든 것에 대해 논쟁하지 않습니다.
3. 메모리 관리자에 대해 많은 글을 썼습니다. 나는 당신의 결론 만 강조하겠습니다:
따라서 DLL과 응용 프로그램에 단일 메모리 관리자를 만들 수 있으며 MT4 메모리 관리자가 될 것입니다.
문제는 MT5(MT4)의 메모리 관리자가 어떻게 작동하는지 아무도 모른다는 것입니다 . 그리고 이 매니저를 구현하는 함수의 이름을 안다고 해도 MT5용API 가 폐쇄되어있기 때문에 어떻게 사용할 수 있을까요 ! 따라서 단일 MT5 매니저와 DLL의 아이디어는 유토피아입니다.
독자를 혼동하지 않기 위해 대신 API함수에 구현 된 고전적인 메모리 처리 기술을 사용하는 것이 좋습니다 . 이는 문자열 작업 섹션의 기사에 설명되어 있습니다.
나는 여기에서 Delphi 책과 기사를 인용하는 대신 기사 작성자가 기사에 설명 된 내용에서 실제로 작동하지 않는 것과 관련하여 만 주장을 할 것이라는 사실을 믿습니다. 가급적이면 예제와 함께.
의견을 보내주셔서 감사합니다. 이 섹션은 가장 많이 발생하는 오류를 포함하도록 확장할 수 있다고 생각합니다. 그러나 "길고 실패한" 오류를 검색하지 않으려면 문서에 쓰여진 대로 모든 작업을 수행하세요. 그 안에 있는 예제는 실행 가능합니다. 게다가 메타에디터에서 디버거를 사용하면 단계별 디버깅과 중단점이 있어 꽤 괜찮습니다!
이 글에서는 누구에게도 프로그래밍 방법을 가르치고 싶지 않습니다. 누군가 기본적인 오류를 범한 다음 큰 소리로 " "라고 외친다면 아직 자신 만의 DLL을 만들지 말고 매트 부분을 배우기 시작해야 할 것입니다.
아아, 당신은 매우 착각하고 있습니다. 프로그래밍을 배우는 사람들뿐만 아니라 숙련 된 프로그래머도 초보적이든 그렇지 않든 실수를합니다.
이것은 수학과 관련이 없지만 디버깅 도구와 관련이 있습니다. 잘 알려진 "80 x 20" 통계를 기억해 봅시다. 시간의 80%는 디버깅에 소비되고 코드 작성에는 20%만 사용됩니다. 제가 알기로는 이 글의 목표는 실행 가능한 DLL을 작성하는 방법, 즉 주어진 특정 예제뿐만 아니라 가상의 다른 코드도 작성하는 방법을 알려드리는 것입니다. 물론 모든 잠재적 오류를 고려하는 것은 불가능하지만 원칙적으로 오류를 잡는 방법에 대한 정보가 필요합니다. 그렇지 않으면 독자는 예제를 재현하는 것 외에는 아무것도 할 수 없습니다.
메타에디터는 DLL 디버깅, 즉 내부 디버깅에 대해 이야기하고 있기 때문에 메타에디터와도 관련이 없습니다.
당신은 저자입니다 - 당신은 더 잘 알고 있습니다. 저는 프레젠테이션의 일부 불완전성에 대한 제 의견을 표현했을 뿐입니다.
이 글은 미완성된 mt4용 dll에 관한 오래된 기사에서 발췌한 것입니다. 여기에 발췌문을 복사해 두었습니다. 어렵지 않고 길지도 않습니다.
" 프로젝트에시스유틸이 있습니다! 클래스는아무 관련이 없습니다! SysUtils 이외의 예외 처리기는 기본적으로 연결된 System에 구현되어 있으므로 걱정할 이유가 없습니다. "
어떤 단위를 포함할지는 소유자에게 달려 있습니다. 하지만 그 이유를 명시할 필요가 있다고 생각합니다. 이 경우 borland는 SysUtils 및 클래스를 권장합니다. 그리고 그 이유가 있습니다.
" DllEntryPoint를 사용한 예제는 모든 구석에 인터넷에 나와 있습니다. 이것은 DLL 이벤트를 만드는 표준적인 방법입니다."
볼랜드는 우연히 DllMain을 숨긴 것이 아닙니다. 델파이에서 DLL을 만드는 표준 방법은 DllMain을 숨기는 것입니다. 왜 그런지 생각해 보세요. 그리고 Microsoft 자체에서 권장하는 내용을 읽어보세요.
" 메모리 할당을 바인딩하고 힙에서 해제 할 수 있습니다. 이 메모리 작업 방법에 실제 오류가 있는 경우 고려할 준비가 되어 있습니다."
그건 여러분에게 달려 있습니다. 하지만 제가 추천하는 것은 DllMain에서는 아무것도 하지 말아야 한다는 것입니다.
"문제는 MT5(MT4)의 메모리 관리자가 어떻게 작동하는지 아무도 모른다는 것입니다 . 그리고 이 매니저를 구현하는 함수의 이름을 안다고 해도 MT5용API 가 폐쇄되어있기 때문에 어떻게 사용할 수 있을까요 !그래서 단일 MT5 매니저와 DLL이라는 아이디어는 유토피아입니다."
누군가에게는 "폐쇄적"이고 "유토피아"이고 다른 누군가에게는 "모든 것이 작동"합니다. 우리는 4에 대해 이야기하고 있습니다. 5는 보지 못했습니다.
델파이를 사용하지 않는 대안이 있다는 점을 언급해야 합니다.
델파이 사용자가 아니라면 오픈 소스이고, 델파이와 거의 동일한 기능(일부는 더 많은 기능)을 제공하며, 델파이 소스 코드와 거의 호환되고, 위의 모든 예제가 수정 없이도 라자루스에서 컴파일될 수 있는 Lazarus/FPC 사용을 고려해야 합니다.
독점 소프트웨어보다 오픈 소스를 선호하신다면(어쨌든 그렇게 하셔야 합니다) Delphi의 상용 평가판이 아닌 Lazarus를 찾으시는 것이 좋습니다.
기사에는 그러한 절차가 있습니다:
컴파일러에서 선언되지 않은 변수 BUFFER_SIZE가 무엇인지 묻습니다.
이 변수가 실제로 무엇이고 어디에 선언되어야 하며 어떤 버퍼에 관한 것인지 알려주시겠습니까?
컴파일러에서 선언되지 않은 변수 BUFFER_SIZE가 무엇인지 묻습니다.
무엇이 있어야 하고 어디에 선언되어야 하며 어떤 버퍼에 대해 이야기하고 있는지 알려주시겠습니까?
프로젝트 파일 dll_mql5.dpr에 다음과 같은 선언이 있습니다.
const BUFFER_SIZE = 255;
코드 한 줄로
Buffer:=AllocMem(BUFFER_SIZE);
문자열을 저장하기 위한 메모리가 힙에 할당됩니다.
그리고 버퍼 포인터 자체는 문자열 작업을 시연하는 GetStringBuffer 함수에서 사용됩니다.
DLL 도움말
누구든지 저를 안내해 줄 수 있습니까? MT4에서 MT 5 DLL 파일을 사용할 수 있는지, 그렇다면 MT5에서 어디에서 주입하는지 그리고 내가 알아야 할 다른 것이 있습니까?
또한 DLL 파일을 어느 폴더에 저장합니까 ????
더 이상 DLL에 대한 코드가 없으므로 더 이상 다시 작성할 수 없습니다.
어떤 제안과 도움을 주시면 감사하겠습니다.
MT5에서 Expert Advisor를 연결할 때 "dll이 64비트 버전이 아닙니다"라는 오류가 발생합니다.
32비트 dll을 사용할 수 있는 방법이 있나요?
그렇지 않다면 Delphi XE에서 64비트 dll을 컴파일하는 방법을 알려주실 수 있나요?
Delphi XE에서 64비트 dll을 컴파일하는 방법은 무엇인가요?