计算GetProcAddress的方法名称

时间:2017-09-27 20:43:02

标签: c# marshalling

我有一个需要调用本机库的C#项目,由于我无法进入此处的原因,我无法使用PInvoke因此我尝试使用{{ 1}}和LoadLibrary

我的问题来自GetProcAddress调用约定。使用__stdcall这样的c ++方法:

__stdcall

将使用extern "C" __declspec(dllexport) int Add(int left, int right); 名称导出,因为_Add@8。但是,我不希望我的库的用户必须事先计算函数对其参数需要多少字节。 (PInvoke以某种方式逃脱了它)

相反,我希望我的用户创建一个匹配的委托,然后将该委托类型提供给我的库,然后我使用反射来计算我需要计划多少字节。即。

sizeof(int) * 2 == 8

public delegate int Add(int left, int right); //My library has already loaded the dll at this point int result = (int)MyLibrary.Call<Add>(left,right); 很容易计算。但是如何使用intsstringconst char *byte[]等指针来执行此操作?特别是考虑到它可能位于unsigned char *x64系统上。

幸运的是,x86会处理对我的实际调用,但我需要计算正确的导出名称才能获取methodAddress。

0 个答案:

没有答案