C++ cli C++虚拟表错误?

C++ cli C++虚拟表错误?,c++-cli,virtual,unmanaged,managed,mixed-mode,C++ Cli,Virtual,Unmanaged,Managed,Mixed Mode,我的结构如下: //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 Sen

我的结构如下:

//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;
}
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->deliverMessage时;没有mParent的例子。然后,在包装器中,mParent为空值=null;就像它只从非托管I接口访问方法,而不是从包装器C接口访问包装器。

我认为在附加到进程时,需要同时打开本机调试和托管调试

您可以在“附加到流程”对话框中通过单击“附加到:”框旁边的“选择”按钮来执行此操作


虽然通常设置为自动,它应该确定进程是否在CLR中运行,并为该对话框选择正确的条目。< /P>这不是标准C++;请用更具体的东西标记它好吗?是否在Visual Studio中启用了非托管调试?在可执行项目的调试选项中,有一个“启用非托管代码调试”的设置。@奥利·查尔斯沃思:谢谢@刻痕我从Labview调用托管库,在“附加进程”到它之后,我正在调试代码。是否仍应启用非托管代码调试?我应该寻找什么?嗯,我不熟悉LabView,但是如果您使用VisualStudio附加到进程,您应该仍然能够在附加对话框中启用非托管调试。有一个名为“附加到”的选择框,请确保在附加之前选择了“本机”和“托管”。我仍然得到一个空实例。我认为我的问题更多地与AppDomains有关,而不是与虚拟表或垃圾收集器有关。我仍在尝试找出如何在单个AppDomain中调用所有内容,或者至少允许不同的AppDomain共享一个类。在VisualStudio上调试时,ManagedCode和UnmanagedCode在ConsoleTest.vshost.exe AppDomain中运行,而在Labview中,ManagedCode在Labview域中运行,而非ManagedCode在默认域中运行。因此,在ConsoleTest应用程序中,您没有遇到任何问题,但在Labview中运行时,您会看到空值吗?有没有可能附加更多的代码?没错。我复制了我在这篇文章中已经发布的一些代码:尝试通过序列化来实现,但无法生成包含所有值的构造函数方法。我错过了什么真正重要的东西吗?我不是一个程序员,而是一个有额外任务的电路设计师!谢谢你的帮助。

class IInterface
{
public:
//Response:
   virtual bool Deliver(CMessage mMessage);
};