怎么调用vc写的dlll直接返回指针数组
如何调用vc写的dlll直接返回指针数组如提vc dll原函数为extern C unsigned char * ReadHid(void) {unsig
如何调用vc写的dlll直接返回指针数组
如提
vc dll原函数为
extern "C" unsigned char * ReadHid(void)
{
unsigned char * r;
//……
return r;
}
[解决办法]IntPtr,然后自己去转
[解决办法]ref byte 当成数组处理,网上有很多。
这种类型还不算烦的。
[解决办法]不需要开启不安全代码, *char 用 intPrt或者sting接收返回值都可以
[解决办法]byte* pb=ReadHid();
然后就随便你处理了
字节数组:byte b=*pb; pb++;
字符串:string str=Marshal.PtrToString(new IntPtr((void*)pb);
整数数组:int i=*(int*)pb; pb++;
结构数组:都可以
[解决办法]这个你在调用的地方也要unsafe里,你干脆在类前面加上unsafe
[解决办法]我去...有现成的呀
StringBuilder sbuilder= new StringBuilder();
IntPtr intptr = ReadHid(sbuilder);
string ss = Marshal.PtrToStringAnsi(intptr);
MessageBox.Show(ss);
明白了不
看错了,你那个函数是没参数的以为是char* ReadHid(char* string),没参数的话就直接是:
IntPtr intptr = ReadHid();
string ss = Marshal.PtrToStringAnsi(intptr);
MessageBox.Show(ss);
[解决办法]在类前面加上unsafe是可以了,
byte* pb = (byte*)ReadHid();
但从这个unsafe单词里看是不安全的。
因为要写一个c#的demo给客户调用dll。能否就以我这个dll原函数,高手能否帮忙写个以IntPtr调用我这个函数的例子呢
其实unsafe代码也没啥不安全的,只是用了指针而已。
如果不想直接用,可以private extern static IntPtr ReadHid();
IntPtr ptr=ReadHid();
然后
转字符串:Marshal.PtrToStringXXX(ptr)
读整数:Marshal.ReadInt32(ptr,0); 第二个参数是偏移
转结构:Marshal.PtrToStructure