繁体   English   中英

从c#调试函数调用到c ++ / cli到c ++不起作用

[英]debuging function call from c# to c++/cli to c++ doesn't work

我有一个用c#编写的测试应用程序,它在c ++ / cli中调用一个函数。

然后,c ++ / cli函数在c ++代码中调用函数。

我有三个项目:

调用c ++ / cli代码的c#项目。

包装c ++代码的c ++ / cli项目。

然后全部构建广告调试。

在C#中,我有这样的代码:

var myFile=MyFileWrapper.MyFileWrapper.ReadMyFile(@"C:\tmp\MyFile.bin");

在c ++ / cli中,我有这样的代码:

MyFileWrapper^ MyFileWrapper::ReadMyFile(System::String ^fileName)
{
      auto nativeMyFile=MyFile::ReadMyFile((char *) System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(fileName).ToPointer());
     MyFileWrapper^ MyFileWrapper=gcnew MyFileWrapper();
     int x=nativeMyFile->Width;
      // do some work
     return MyFileWrapper;
}

在C ++中,我有以下代码:

MyFile* MyFile::ReadMyFile(char * FileName)
{
      auto myFile=new MyFile();
      myFile->Width=100;
      myFile->Height=200;

      return myFile;
}

当我尝试调试系统时,可以从C#代码进入c ++ / cli,但是不能从C ++ / CLI代码进入c ++代码。

当我尝试在c ++ / cli中观看nativeMyFile时,可以看到其地址,但看不到其类型或数据(例如,监视窗口中的nativeMyFile-> Width会生成错误。

当检查X的值时,它是100,表示传递了正确的值。

为什么我不能从c ++ / cli代码进入C ++代码?

为什么我不能监视用c ++代码定义的对象?

不支持从托管代码到本机代码的单步执行。 从C#到C ++ / CLI代码都不是问题,因为它们都是托管代码。 但是C ++ / CLI到本机C ++不能正常工作。 您必须在要调试的本机C ++代码上设置断点。 遇到断点时,调试器将执行必要的模式切换以匹配代码类型。

在这种情况下,您还需要启用非托管调试,因为自启动C#项目以来,默认情况下不会将其打开。 右键单击您的EXE项目,依次单击“属性”,“调试”选项卡,然后选中该选项。 当您开始调试时,C ++代码中的断点将为黄色,一旦加载了本机代码并且启用了断点,该断点将变为稳定的红色。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM