모든 혼동에 대해 죄송합니다. 은 :
이고 계급 상속에서는 public
이 누락되었습니다. 항상 :
입니다. 모든 도움을 주셔서 다시 한 번 감사드립니다.C++에서 파생 된 함수가 호출되지 않았습니다.
처음에는 제목이 너무 일반적 일 수 있지만 여기에서 문제를 설명하는 더 좋은 방법은 모르겠다. 내가 가진 무엇
,
class __declspec(dllimport) Foo1:public Foo
{
virtual BOOLEAN bar(Arg *arg);
}
class __declspec(dllimport) Foo2:public Foo1
{
virtual BOOLEAN bar(Arg *arg); //newly added
}
두 기능을 구현, 내가
BOOLEAN Foo2::dosomething(Arg* arg) //Question 1, should the position of * matter here?
{
bar(arg);
}
그 FOO2 아래의 기능을하지만 여전히 Foo1::bar
대신 Foo2::bar
호출된다. 나는 서명을 두 번 확인했는데 아무런 문제가 없다. 그래서
- 이
Foo1
에서 내 보낸 망가 함수 이름을 비교하는 PE Explorer를 사용하고Foo2
의 DLL을 일부 실험, 결과,
Question2입니다했다해야 편지의 차이 거기 있니?[email protected]@@[email protected]@@Z
[email protected]@@[email protected]@@Z
실행 한 후
Foo1
에서bar
을 제거하고, 오류가,
을 와서 말했다.The procedure engry point [email protected]@@[email protected]@@Z could not be located in the dynamic link library libFoo1.dll
은 내가 여기에 이해하지 못하는 것은 통화가 Foo2
을 받고있다하지만 여전히 Foo1
의 기능을 찾기 위해 노력하고있다. 또한 Foo1
과 Foo2
이후에 여러 수준의 상속이 있으므로 함수 파생 사용이나 dll 내보내기 측면에서 중요하지 않은 것이 있는지 확실하지 않습니다.
희망 사항이나 가능한 원인에 대한 지침을 얻을 수 있습니다.
내가 문제를 명확하게 설명했는지 여부는 확실하지 않으며 필요한 경우 자유롭게 수정하십시오.
감사합니다.
일부 멤버 함수뿐만 아니라 실제 클래스 정의를 보여줍니다. – ildjarn
게시 된 코드는 확실히 C++이 아닙니다 :'Class'는 키워드 ('class'가 있지만)도 아니고 C 클래스의'class T :: S' 구문도 아닙니다 ('__declspec (dllimport)'를 무시합니다). 일부 비 C++ 횡설수설 중 하나입니다.) –
문제가 여전히 존재하고 더 이상 버릴 수 없게 될 때까지 문제를 격리 된 테스트 프로그램에 복사하여 붙여 넣어 문제를 확인하고 문제가 여전히 존재하는지 확인하고, 더 많은 것을 던지고, 다시 테스트하십시오. .다른 사람들이 재현 할 수 있도록 테스트 프로그램을 적절한 포럼에 게시 할 수없는 경우보다. –