[英]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.