我有一个用 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-> 宽度在观察窗口中生成错误。
检查 X 的值时,为 100,表示通过了正确的值。
为什么我不能从 c++/cli 代码进入 C++ 代码?
为什么我看不到 C++ 代码中定义的对象?