dll 코드에서 주 응용 프로그램에있는 메서드를 호출 할 수 있습니까?dll에서 메인 응용 프로그램의 메서드 호출
답변
거기에는 콜백 개체를 만드는 한 가지 방법이 있습니다. 당신이 인터페이스를 선언해야 응용 프로그램에서 가, 느릅 나무는 예를 들어, 방법을 설명합니다
TMyMethodObject = class(TInterfacedObject, IMyMethodInterface)
public
procedure MyMethod(); stdcall;
end;
:
IMyMethodInterface = interface(IInterface)
procedure MyMethod(); stdcall;
end;
가 옆 클래스를 만들 필요가, 느릅 나무는이 인터페이스 (및 방법)를 구현 DLL을로드하면 TMyMethodObject
인스턴스를 만들고 DLL에 IMyMethodInterface
을 전달해야합니다.
바르 : 물론 DLL이 방법을 해당 있고 내보낼가 SetMethodCallback
느릅 나무를 저장 인터페이스 참조 (느릅 나무는 매개 변수로 인터페이스 소요)
var mmo : IMyMethodInterface;
dllHandle : THandle;
smc : procedure (mmi : IMyMethodInterface); stdcall;
코드 : 지금
mmo := TMyMethodObject.Create();
dllHandle := LoadLibrary('mydll.dll');
smc := GetProcAddress(dllHandle, 'SetMethodCallback');
if assigned(smc) then
smc(mmo);
, 당신이 할 수있는 dll에서 IMyMethodInterface 참조를 사용하여 메소드를 호출하십시오. 물론
당신은 정적 DLL을 링크 할 수 있습니다 직접 사용 :
library Project3;
// uses YourMethodIntf.pas
{$R *.res}
var AppMethod : IMyMethodInterface;
procedure SetAppMethodCallback(mmi : IMyMethodInterface); stdcall;
begin
AppMethod := mmi;
end;
procedure AnotherDllMethod();
begin
//here you can use AppMethod.MyMethod();
end;
exports
SetAppMethodCallback name 'SetMethodcallback';
begin
end.
이
mmo
객체 (
TMyMethodInterface
)이되지 않습니다 고려 : 여기
procedure SetMethodInteface(mmi : IMyMethodInterface); stdcall; external 'mydll.dll';
는 DLL 샘플 코드 DLL에서
AppMethod
을
nil
(또는 FreeLibrary dll)로 설정할 때까지 파괴되므로주의해야합니다.
나는 그것이 많이 묻는 것을 알고있다. 그러나 나에게 그런 dll의 완전한 해골을 게시 할 수 있냐? –
@ JacekKwiecień, – teran
위의 dll 예제 코드를 참조하십시오 월요일부터 작업 시간이 거의 다되었으므로 월요일부터 살펴 보겠습니다. –
- 1. dll에서 호출 응용 프로그램의 변수에 액세스하려면 어떻게해야합니까?
- 2. .NET DLL에서 VB6 메서드 호출
- 3. ATL COM dll에서 호출 된 잘못된 메서드
- 4. DLL에서 HOOK C# 메서드
- 5. 안드로이드 - JavaScriptInterface 내의 메인 클래스에서 메서드 호출
- 6. 안드로이드 SpeechRecognizer는 응용 프로그램의 메인 스레드에서만 사용해야합니다.
- 7. 일반 DLL에서 응용 프로그램의 * .resx 사용
- 8. 다른 응용 프로그램의 서블릿에서 서블릿의 post 메서드 호출
- 9. 실행 된 C++ 응용 프로그램의 자동 메서드 호출 인쇄
- 10. 응용 프로그램의 높은 권한으로 win32 서비스의 메서드 호출
- 11. MVC 메인 메서드 내에서 실행중인 응용 프로그램
- 12. 코코아 응용 프로그램의 applicationDidFinishLaunching에 메인 창로드하기
- 13. C# 응용 프로그램의 관리되지 않는 호출 스택
- 14. 기존의 외부 .dll에서 메서드 호출. 예를 들어, kernel32.dll의 CopyFileA
- 15. 다른 DLL에서 DLL 호출
- 16. DLL에서 함수 호출?
- 17. 호출 응용 프로그램의 URL 받기
- 18. DLL에서 호출 된 WinAPI 함수가
- 19. WPF 응용 프로그램의 비동기 웹 서비스 호출
- 20. 동일한 dll에서 여러 함수 호출
- 21. 클래스에서 메서드 호출
- 22. 메인 프로그램에 별도의 클래스에서 비 정적 메서드 호출
- 23. 특정 메서드 호출 추적
- 24. C# 응용 프로그램의 비 관리 DLL에서 함수 가져 오기
- 25. 동적으로로드 된 DLL에서 호스트 응용 프로그램의 바이트 []에 액세스
- 26. 자바 메서드(). 메서드() 호출
- 27. IronPython 호출 메서드 이름으로
- 28. ASP.NET 응용 프로그램에서 Windows 응용 프로그램에서 메서드 호출
- 29. C# DLL에서 C++/cli 메서드 콜백
- 30. DLL에서 내보낼 수없는 함수 호출
다음 예제를 참조하십시오. [callba 구현 방법 DLL (Delphi/TJVPluginManager + TJvPlugin) 내의 ck 메서드] (http://stackoverflow.com/a/1839294/576719)를 참조하십시오. –