그래서 외부 스크립팅 언어를 사용하지 않고 런타임 중에 내 응용 프로그램의 동작을 변경하고 싶습니다. DLL을 사용해 보았습니다. 나는 다음과 같은 것을 가지고있다 :C에서 스와핑하는 DLL이 잘못 되었습니까?
begin program;
load dll and function pointers;
init_func_ptr();
loop:
if(compiled_new_version)
{
pause threads;
unload dll;
overwrite expired dll with new dll;
load dll and function pointers;
resume threads;
}
update_func_ptr(state);
초기에는 아무런 문제가 없었다. 그러나 일단 실제 코드를 작성했다면 dll을 다시로드 한 후 충돌이 발생했습니다. 수동으로 내보내거나 다시로드하는 함수 포인터 만 'init'및 update '입니다.
충돌에 대한 정보가 있습니다. 아무 곳에도 충돌이 발생합니다. 호출 스택에는 '0xCDCDCDCD'라는 주소가 있습니다 (Visual Studio를 디버거로 사용하고 응용 프로그램이 디버그 모드로 컴파일 될 때 발생합니다).
나는 스레드를 일시 중지하면 그 중 하나 이상이 만료 된 DLL 내에서 일부 코드를 실행하므로 해당 DLL을 언로드하고 스레드를 다시 시작하면 충돌이 발생합니다.
이 문제를 어떻게 해결할 수 있습니까?
의사 코드를 게시하지 말고 ** 실제 ** 코드의 [mcve]를 게시하십시오. [ask] – Olaf