我有以下結構:C++虛擬表錯誤?
//Unmanaged(.h)
class myInterface
{
public:
virtual bool Send(char* myChar);
}
//Managed (.h)
class myClass;
public ref class Parser
{
bool Transmit(String^ mString);
}
class myClass : public myInterface
{
public:
virtual bool Send(char* myChar);
private:
gcroot<Parser^> pParser;
}
我的問題是,在什麼地方我的非託管代碼,我必須調用發送功能。它從Managed code Send中調用函數,但Send函數從Parser類調用Transmit Method。問題是當我調試時,pParser實例是空的(即使我已經在構造函數中實例化了它)。
這是垃圾收集器問題還是虛擬表誤導?我如何解決它? 謝謝!
UPDATE: 一些進一步的調試之後,我已經意識到,如果我包括例如gcroot的其他實例:
gcroot<AppDomaion^> pDomain;
,然後,在代碼,試圖運行:
pDomain = AppDomain::CurrentDomain;
調試器將顯示與pParser相同的空值。我在做什麼有什麼問題?我應該以不同的方式實例化課程嗎?
UPDATE2:
託管/非託管基本是這樣的:
包裝:(wrapper.h)
public ref class Wrapper
{
public:
Send(String^ mSendMessage);
Parse(String^ mMessageString);
...
private:
ComLayer* mComm;
CInferface mInterface;
};
private class CInterface : public IIterface
{
public:
virtual bool Deliver(CMessage mMessage);
...
private:
gcroot<Wrapper^> mParent;
};
包裝(wrapper.cpp)
Wrapper::Send(String^ mSendMessage)
{
...
mComm->Send(mMessage);
}
Wrapper::Parse(String^ mMessageString)
{
...
}
CInterface::Deliver(CMessage* mMessage)
{
...
//Here, mParent value is empty under Labview, not while Debug/VS/WindowsForm
mParent->Parse(mMessageString)
}
非託管:(commLayer.h)
class CommLayer
{
public:
//Send:
bool Send(CMessage* mMessage);
...
private:
//instead of CInterface, IInterface.
IInterface mInterface;
};
非網管:(IInterface.h)
class IInterface
{
public:
//Response:
virtual bool Deliver(CMessage mMessage);
};
的問題是,當非託管代碼調用mInferface->交付(mMessage); mParent沒有實例。然後,在包裝器中,mParent是空的(value = null);就像它只會訪問Unmanaged IInterface中的方法,而不是來自包裝器CInterface的Wrapper ^。
這不是標準的C++;請你能用更具體的東西來標記它嗎? – 2010-11-26 09:19:50
您是否在Visual Studio中打開了非託管調試?在可執行項目的調試選項中有一個「啓用非託管代碼調試」的設置。 – Nick 2010-11-26 09:27:41