2012-03-11 6 views
1

모든 혼동에 대해 죄송합니다. 은 :이고 계급 상속에서는 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 호출된다. 나는 서명을 두 번 확인했는데 아무런 문제가 없다. 그래서

  1. Foo1에서 내 보낸 망가 함수 이름을 비교하는 PE Explorer를 사용하고 Foo2의 DLL을 일부 실험, 결과,

    [email protected]@@[email protected]@@Z
    [email protected]@@[email protected]@@Z

    Question2입니다했다해야 편지의 차이 거기 있니?

  2. 실행 한 후 Foo1에서 bar을 제거하고, 오류가,

    The procedure engry point [email protected]@@[email protected]@@Z could not be located in the dynamic link library libFoo1.dll

    을 와서 말했다.

은 내가 여기에 이해하지 못하는 것은 통화가 Foo2을 받고있다하지만 여전히 Foo1의 기능을 찾기 위해 노력하고있다. 또한 Foo1Foo2 이후에 여러 수준의 상속이 있으므로 함수 파생 ​​사용이나 dll 내보내기 측면에서 중요하지 않은 것이 있는지 확실하지 않습니다.

희망 사항이나 가능한 원인에 대한 지침을 얻을 수 있습니다.

내가 문제를 명확하게 설명했는지 여부는 확실하지 않으며 필요한 경우 자유롭게 수정하십시오.

감사합니다.

+2

일부 멤버 함수뿐만 아니라 실제 클래스 정의를 보여줍니다. – ildjarn

+2

게시 된 코드는 확실히 C++이 아닙니다 :'Class'는 키워드 ('class'가 있지만)도 아니고 C 클래스의'class T :: S' 구문도 아닙니다 ('__declspec (dllimport)'를 무시합니다). 일부 비 C++ 횡설수설 중 하나입니다.) –

+0

문제가 여전히 존재하고 더 이상 버릴 수 없게 될 때까지 문제를 격리 된 테스트 프로그램에 복사하여 붙여 넣어 문제를 확인하고 문제가 여전히 존재하는지 확인하고, 더 많은 것을 던지고, 다시 테스트하십시오. .다른 사람들이 재현 할 수 있도록 테스트 프로그램을 적절한 포럼에 게시 할 수없는 경우보다. –

답변

0

BOOLEAN Foo2 :: dosomething (Arg * arg) // 질문 1, 여기서 중요한 점은 무엇입니까?

*의 위치는 중요하지 않습니다.

DoSomething 함수가 생성자 또는 소멸자입니까?

+0

멤버 함수가 아닙니다. – Derek

+0

이상하게도이 효과를내는 컴파일 가능한 코드 샘플을 제공 할 수 있습니까? – Stefan

관련 문제