我建议您以记录的方式执行此操作,而不是依赖不提供支持的作者的无证破解。让我们用一个例子来做:
namespace Publics {
public class Class1 {
public static void Run() {
// Stuff...
}
}
}
将新的 C++/CLI 类库添加到您的项目中。右键单击解决方案,添加,新建项目。打开“其他语言”节点、Visual C++、CLR,然后选择“类库”项目模板。右键单击新项目,Properties,Common Properties,Framework and References,单击Add New Reference按钮。从“项目”选项卡中,选择要导出其方法的 C# 项目。
用 //TODO 注释删除预先生成的空类并编写这样的代码:
extern "C" __declspec(dllexport)
void __stdcall Example()
{
Publics::Class1::Run();
}
构建您的解决方案。通过在 DLL 上运行 dumpbin.exe /exports 检查示例函数是否已导出。您应该会看到与此类似的内容:
1 0 00001020 _Example@0 = _Example@0
除了名称和调用约定之外,您现在还有很多选择来调整导出的函数。如果要导出实例方法而不是静态方法,可以编写如下函数,例如:
extern "C" __declspec(dllexport)
void __stdcall Example()
{
Publics::Class1^ obj = gcnew Publics::Class1;
obj->Run();
}
等等,如果您要详细说明,则需要对 C++/CLI 语言有一定的了解。最后但并非最不重要的一点是,您也可能会发现在您最初尝试使 Giesecke 的 IL 重写器工作时出了什么问题。否则,它使用与 C++/CLI 编译器用于导出托管方法的完全相同的技术。