使用 dotPeek 反思 CLR C++ 代码
Reflection on CLR C++ code with dotPeek
我用 CLR c++ 编写了这段代码:
namespace NS{
public class B {
public:
B()
{
int k = 1 + 1;
}
static int K;
int getId()
{
return 0;
}
static double getId2()
{
return 0;
}
};
}
我将它编译为 dll 并使用 DotPeek,我得到了这个结果:
namespace NS
{
[CLSCompliant(false)]
[NativeCppClass]}
[StructLayout(LayoutKind.Sequential, Size = 1)]
public struct B
{
}
}
并且还像这样使用 C# 反射:
var module = Assembly.Load("MyCLRCPP").Modules.First();
foreach (var data in module.GetFields())
{
Debug.WriteLine(data.Name);
}
我只收到一些乱码:
__unep@?DoNothing@DefaultDomain@@@$$FCGJPAX@Z
__unep@?_UninitializeDefaultDomain@LanguageSupport@@@$$FCGJPAX@Z
我的问题是:
为什么那里没有代码?
正如Hans所说,反编译原生C++有问题。
使用 ref class 解决了所有问题。
我用 CLR c++ 编写了这段代码:
namespace NS{
public class B {
public:
B()
{
int k = 1 + 1;
}
static int K;
int getId()
{
return 0;
}
static double getId2()
{
return 0;
}
};
}
我将它编译为 dll 并使用 DotPeek,我得到了这个结果:
namespace NS
{
[CLSCompliant(false)]
[NativeCppClass]}
[StructLayout(LayoutKind.Sequential, Size = 1)]
public struct B
{
}
}
并且还像这样使用 C# 反射:
var module = Assembly.Load("MyCLRCPP").Modules.First();
foreach (var data in module.GetFields())
{
Debug.WriteLine(data.Name);
}
我只收到一些乱码:
__unep@?DoNothing@DefaultDomain@@@$$FCGJPAX@Z __unep@?_UninitializeDefaultDomain@LanguageSupport@@@$$FCGJPAX@Z
我的问题是: 为什么那里没有代码?
正如Hans所说,反编译原生C++有问题。 使用 ref class 解决了所有问题。