我有一个需要调用本机库的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);
很容易计算。但是如何使用ints
到string
或const char *
到byte[]
等指针来执行此操作?特别是考虑到它可能位于unsigned char *
或x64
系统上。
幸运的是,x86
会处理对我的实际调用,但我需要计算正确的导出名称才能获取methodAddress。