래퍼 DLL을 작성해야합니다. 인터셉트하려는 함수로 DLL을 빌드하면 코드에서 원래 DLL을로드하고 호출하기 만하면됩니다. 그런 다음 랩퍼를 응용 프로그램의 동일한 디렉토리에 두십시오. 응용 프로그램의 모든 호출은 래퍼 DLL로 이동하고 원래의 DLL로 이동합니다.
여기에 간단한 예를
이 라이브러리 (B.DLL)가 supose
library B;
function B_FUNCTION(value:integer): integer; export;
begin
result:=value+1;
end;
exports B_FUNCTION;
end.
그리고 그것은
program A;
{$apptype console}
function B_FUNCTION(value:integer): integer; external 'b.dll';
var i:integer;
begin
i:=B_FUNCTION(2010);
writeln(i);
end.
두 프로그램을 컴파일하고 실행 사용이 프로그램입니다. 인쇄 결과는
library w;
uses windows;
function B_FUNCTION(value:integer): integer; export;
var
adll: Thandle;
afunc: function(v:integer):integer;
begin
adll:=LoadLibrary('TRUE_B.DLL');
afunc:= GetProcAddress(adll,'B_FUNCTION');
result:=afunc(value+1);
FreeLibrary(adll);
end;
exports B_FUNCTION;
end.
이 빌드 귀하의 래퍼 DLL 코드, 이제 2011 년
, 당신은 a.exe를, B.DLL 및 W.DLL을해야합니다. 그들이
REN B.DLL TRUE_B.DLL
REN W.DLL B.DLL
을 실행 바꾸기, 지금은 2012 년
이 질문은 오히려 이해할 수없는 것입니다 침을 것입니다. 당신이 묻고있는 것을 분명하게하려고 노력합니다. 내가 말하고자하는 것은 'fastcall'이 MSVC 호출 규칙이라는 것입니다. 델파이의 '등록'대회를 의미할까요? –