2017-02-17 8 views
0

Delphi 2010을 사용하여 mIRC 용 dll을 작성하려고합니다. 여기에 mIRC를 도움말 파일에서 일부 정보Delphi 2010을 사용하여 mIRC 용 DLL 작성

기술 노트

이 섹션에는 mIRC를 사용하기위한 DLL을 만들 프로그래머에 대한 기술 정보가 포함되어있다.

형태이어야 호출되는 DLL의 루틴 :

INT의 __stdcall의 procname (HWND mWnd, HWND aWnd 숯불 * 데이터의 char * PARMS, BOOL 쇼 BOOL의 NOPAUSE)

mWnd 메인 mIRC 창 핸들입니다.

aWnd는 명령이 실행되는 창의 핸들입니다. 명령이 원격 스크립트에 의해 호출되는 경우 현재 활성 창이 아닐 수도 있습니다.

데이터는 DLL로 보내려는 정보입니다. 돌아 왔을 때 DLL은 mIRC가 수행 할 명령이 있으면이 변수를 채울 수 있습니다.

DLL이이 mIRC를이해야 할 원하는 것을 표시하는 정수를 반환 할 수 있습니다

0

은 mIRC를이해야/정지 처리

1 mIRC를 처리

2를 계속해야 함을 의미한다는 것을 의미 의미 그것은 그 mIRC가 수행하기를 원하는 명령으로 데이터 변수를 채우고 명령을 수행 할 때 parms에 매개 변수를 채 웁니다 (있는 경우).

3은 DLL이 식별자로 $ dll()이 반환해야하는 결과로 데이터 변수를 채웠다는 것을 의미합니다.

입력 텍스트를 뒤집을 예정인 다음 코드는 정상적으로 컴파일되지만 dll 사용 결과는 예상 한 것과 다릅니다. //say $dll(mydll,Reverse,hello) 등의 mIRC에서 DLL을 호출 예

function Reverse(mWnd, aWnd: hWnd; Data, Parms: PChar; Show, NoPause: Boolean): Integer; stdcall; 
var 
    Temp: String; 
    I: Integer; 
begin 
    SetLength(Temp, Length(Data)); 
    for I := 0 to Length(Data) do 
    begin 
    Temp[I] := Data[Length(Data)- I]; // Reversing string by retrieving characters from Data one at a time 
    end; 
    StrCopy(Data, PChar(Temp)); // Putting reversed string back into data 
    Result := 3; 
end; 
exports 
    Reverse; 
begin 
end. 

은 'O'의 출력을 제공한다. 매개 변수가 'hello sailor'이면 출력은 'orilsao llhe'입니다. 코드 작업을 추적하는 데 실패했지만 데이터 값이 어떻게 변경되는지 이해할 수 없습니다. 나는 PChar 행동에 대한 내 자신의 제한된 지식이 기여 요인이라고 생각합니다. 나는 도움이 될만한 조언을 환영한다. 건배

+0

부울이 잘못되었습니다. LongBool을 사용하십시오. 또는 BOOL. 문자열은 PWideChar가 아닌 PAnsiChar 여야합니다. 이것은 여기서 여러 번 논의되었습니다. –

+0

이전에 여러 번 논의되었을 수도 있지만 검색 결과가 모두 누락되었습니다. 내 게시물 당시 델파이 버전 게시 델파이 7에서 PChar 동작에 대한 검색을하지 않았으며 왜 그런가?처음에는 뭔가 잘못하고 있다고 생각했습니다. 나는 코드를 붙여 넣은 이유에 대한 지식이 없습니다. 나는 그 문제가 나이라고 생각했다. Delphi 7과 Delphi 2010에서 디버깅 워치가 어떻게 다르게 작동하는지 메모리와 포인터에 대해 상기 해 보았습니다. 건배. – grasshopper

+0

설명서를 읽어야합니다. 유니 코드 변경은 거대했고 매우 많이 문서화되었습니다. 최신 정보를 간과하지 마십시오. –

답변

0

PChar를 PAnsiChar로 변경하여 함수 정의를 변경했습니다. function Reverse(mWnd, aWnd: hWnd; Data, Parms: PAnsiChar; Show, NoPause: Boolean): Integer; stdcall;

나는 줄 StrCopy(Data, PChar(Temp)); // Putting reversed string back into data에서의 PAnsiChar로를 PChar를 변경하지 않고 지금 내 문제는 더 이상이다. 좀 더 많은 검색 기능을 사용하면 변경 사항을 적용 할 수 있습니다. 실제로이 포럼에서 내 문제를 적어 놓으면 솔루션에서 제로가되었습니다.

건배, 그리고 고마워.

+0

David는 "Boolean"을'BOOL'으로 변경해야합니다. 'Boolean'은 1 바이트이고,'BOOL'은 4 바이트입니다. 언어 간을 번역 할 때. 가능할 때마다 항상 동일한 데이터 유형 이름을 사용하십시오. 델파이는 BOOL을 'BOOL'을 사용하는 다른 API와의 호환성을 위해 '표준 Win32 데이터 형식'(https://msdn.microsoft.com/en-us/library/windows/desktop)으로 정의하고 있습니다. /aa383751.aspx). –