托管C#dll上的GetProcAddress

时间:2012-07-11 05:49:10

标签: c# c#-4.0

我正在尝试通过LoadLibrary加载C#dll。我能够成功加载它。你能告诉我如何为这个dll使用GetProcAddress,这样我就可以使用这个dll中定义的metods和类型。

提前致谢!!!

2 个答案:

答案 0 :(得分:1)

编辑

1 - 此问题的最佳方法是COM。您应该设置AssemblyInfo以将程序集公开为COM(ComVisible(true))。请参阅此Microsoft建议:

2 - 如果您的Windows Vista或更高版本具有bitlocker,BitLocker可能会有用。

3 - 但是如果你不能使用COM,请在代码项目中查看:

答案 1 :(得分:0)

根据这个链接:

http://social.msdn.microsoft.com/Forums/br/vcmfcatl/thread/cadd6150-de10-47c5-bd5c-a356741c36b3

GetProcAddress将始终为托管DLL返回NULL,因为它没有导出。

话虽如此,有更好的方法可以从非托管代码访问托管代码。您应该围绕非托管程序集创建一个C ++ / CLI包装器,然后您可以从非托管包装函数中导出托管调用。

假设您在课程A中的某个托管函数是

public static void Foo() {}

您可能拥有C ++代码:

DLLEXPORT void FooThunk() {
    A::Foo();
}

PS:如果有人对C ++ / CLI感到满意,请编辑我的答案,以包含更好的包装器示例。