有没有办法从g ++中取回demangled的名字。 例如,我有demangled名称func(char*, int) ,我应该怎么做才能得到重名的名字, _Z4funcPci ? 我的问题是具体的g ++。
在Scala中,dynamic实例化对象并使用reflection调用方法的最佳方法是什么? 我想做下面的Java代码的Scala相当于: Class class = Class.forName("Foo"); Object foo = class.newInstance(); Method method = class.getMethod("hello", null); method.invoke(foo, null); 在上面的代码中,类名和方法名都是dynamic传入的。 上面的Java机制可能可以用于Foo和hello() ,但是Scalatypes不能与Java的一对一匹配。 例如,一个类可以被隐式地声明为一个单例对象。 另外Scala方法允许各种各样的符号成为它的名字。 两者都是通过名称修改来解决的。 请参阅Java和Scala之间的互操作 。 另一个问题似乎是通过解决重载和自动装箱参数的匹配问题,在Scala的反思 – 天堂与地狱中描述 。
我试图创build一个DLL,导出一个名为“GetName”的函数。 我想要其他的代码能够调用这个函数,而不必知道mangled函数名称。 我的头文件看起来像这样: #ifdef __cplusplus #define EXPORT extern "C" __declspec (dllexport) #else #define EXPORT __declspec (dllexport) #endif EXPORT TCHAR * CALLBACK GetName(); 我的代码如下所示: #include <windows.h> #include "PluginOne.h" int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved) { return TRUE ; } EXPORT TCHAR * CALLBACK GetName() { return TEXT("Test Name"); } 当我生成时,DLL仍然导出名称为“_GetName @ 0”的函数。 我究竟做错了什么?
我目前正在处理一些日志代码,这些日志代码应该包含关于调用函数的信息。 这应该是相对容易的,标准的C ++有一个type_info类。 这包含typeid'd类/函数/等的名称。 但是它被破坏了 这不是很有用。 即typeid(std::vector<int>).name()返回St6vectorIiSaIiEE 。 有没有一种方法可以从中产生有用的东西? 就像上面例子中的std::vector<int>一样。 如果它只适用于非模板类,那也可以。 解决scheme应该为gcc工作,但是如果我可以移植它将会更好。 这是为了logging,所以它不是很重要,它不能被closures,但它应该有助于debugging。
为什么我们需要使用: extern "C" { #include <foo.h> } 特别: 我们应该什么时候使用它? 在编译器/链接器级别发生什么事情需要我们使用它? 如何在编译/链接方面解决需要我们使用它的问题?
如何列出从.so文件导出的符号。 如果可能的话,我也想知道他们的来源(例如,如果他们从一个静态库拉入)。 我使用gcc 4.0.2,如果这有所作为