类似接口定义:C++中可以这样调用没有错
BYTE* pF;
pF = new BYTE[1];
ApiFunc((void **)&pf);C#中测试了接口定义为
1 ApiFunc(ref uint[] ppPara)
2 ApiFunc(ref uint ppPara)
3 ApiFunc(uint ppPara)
4 ApiFunc(byte[] ppPara)
5 ApiFunc(ref IntPtr ppPara)
按以上接口调用均失败,请教void **类型参数在C#的API调用定义中该如何定义.
BYTE* pF;
pF = new BYTE[1];
ApiFunc((void **)&pf);C#中测试了接口定义为
1 ApiFunc(ref uint[] ppPara)
2 ApiFunc(ref uint ppPara)
3 ApiFunc(uint ppPara)
4 ApiFunc(byte[] ppPara)
5 ApiFunc(ref IntPtr ppPara)
按以上接口调用均失败,请教void **类型参数在C#的API调用定义中该如何定义.
dim ppPara as long
ApiFunc(ppPara)C#试了很多方法不对.
byte[] bytes= new byte[1];
fixed(byte *b = bytes)
{
void **p = (void**)b;
string s = Convert.ToString(gg(p),16);
}
private uint gg(void **p)
{
return (uint)p;
}
这个应该可以解决吧,楼主在试试看^_^
今天下午我也遇到了同样的问题,最后的解决方法是在函数原型的相映参数前加上ref参数,然后在调用函数时,给相映参数传值时同样加上ref参数。例如:
System.IntPtr aaa=new System.IntPtr();
ApiFunc(ref aaa);
1 ApiFunc(ref uint[] ppPara)
2 ApiFunc(ref uint ppPara)
3 ApiFunc(uint ppPara)
4 ApiFunc(byte[] ppPara)
5 ApiFunc(ref IntPtr ppPara)
按以上接口调用均失败...
上面是的C#中调用windows的API的,楼主可以看看。
2)参考如下代码C#定义: ApiFunc(uint ppPara); //把指针定义为整数unsafe void Test()
{
byte[] bytes = new byte[100]; fixed(byte* lpBuf = bytes)
{
uint address = (uint)lpBuf;
uint* p = &address;
//调用
ApiFunc((uint)p);
}
}这样就把双指针传进去了,注意,你C++代码最好不要改变指针地址!祝你好运!
{
byte[] bytes = new byte[4];
fixed(byte* lpBuf = bytes)
{
uint address = (uint)lpBuf;
void** p = (void**)&address;
//调用
ApiFunc((uint)p);
}
}