2011-09-25 3 views

답변

1

불가능하지 않습니다. 그러나 보편적이면서 신뢰할 수있는은 매우 먼 거리입니다. C++에는 올바른 인수를 전달한다는 것을 알리는 표준화 된 메타 데이터 형식이 없습니다. 내 보낸 클래스 또는 함수의 이름조차 쉽게 추측 할 수 없지만 컴파일러 구현 세부 사항입니다.

COM 자동화는 이러한 문제가 해결 된 사례입니다. ActiveX 테스트 컨테이너에 의해 보호됩니다. 또는 Java 또는 .Net 관리 언어와 같은 언어로 리플렉션을 지원합니다. C++이 아닙니다.

1

나는 당신이 일을 혼합하고 있다고 생각합니다. "정적"런타임이라고 부르기 만하면 표준 C 및 C++ 라이브러리의 코드가 응용 프로그램에 정적으로 링크된다는 것을 의미합니다. 일반적으로 이것은 응용 프로그램이 수행 할 수있는 것에 어떠한 제한도 가하지 않습니다.

ifstream과 같은 모든 표준 라이브러리 클래스와 printf과 같은 함수는 코드가 정적 런타임에서 EXE 내에 있든 또는 동적 런타임에서 EXE 외부에 있든간에 사용할 수 있습니다. LoadLibraryGetProcAddress과 같은 Win32 함수는 모두 일반 Windows DLL (예 : Kernel32.dll)에서 응용 프로그램 외부에 있으므로 런타임 선택의 영향을받지 않습니다.

저는 실제 문제가 GetProcAddress을 사용하여 C++ 메소드를 호출하려고한다고 말하고 싶습니다. Win32 API는 C 함수를 동적으로 호출하기위한 용도로만 사용됩니다. 첫 번째 문제는 C++'s name mangling으로 인해 메소드 이름을 찾을 수 없다는 것입니다. 개체를 할당하는 데 문제가있을 수도 있습니다. 나의 직감은 올바르게 일하는 것이 거의 불가능할 것이라고 말한다.

다음은 세 GetProcAddress를 사용하여 직접 호출하는 C++ 방법 대신에 대안을 제안 :

  1. 는 C 함수에서 C++ 방법을 바꿈.
  2. 동적 DLL 인터페이스를 설정하려면 COM 또는 Qt plugins과 같은 C++ 프레임 워크를 사용하십시오.
  3. .NET 또는 Java와 같은 다른 플랫폼을 사용하십시오. 하나는 객체 지향적 인 반영과 동적 호출을 완벽하게 지원합니다.
관련 문제