RT..其实是在C#中注册了一个VC定义的回调 函数,VC里面使用的是 char*,C#使用的是IntPtr形式如:
OnCallBack(IntPtr pBuf)现在想把这个pBuf转为 string,how TO??? 谢谢有朋友说 还是做一个托管的VC.NET DLL来转。。if so, so faint...3x all.
OnCallBack(IntPtr pBuf)现在想把这个pBuf转为 string,how TO??? 谢谢有朋友说 还是做一个托管的VC.NET DLL来转。。if so, so faint...3x all.
我是这样解决的,首先,因为是读取指针,而CF默认是没有可以读取ansi字符的方法,那只有用回C的方法来做了,可以在传的时候先用前4字节写入该字符串的长度
,再把多少长度的字符串写入。在读时可先读 Marshal.ReadInt32 即长度,再用到Marshal.Read 循环可把所有读出
按照你的方法读取出来的s为乱码.. 而VC里面的char* 为手工写的测试数据 "abcdef"请问你有可用的例子吗? 我不知道是否哪里写错了。。但我从VC里面传byte* 指针,其实是图像数据,char*是图像名称而已,byte*就OK,这个是使用memcpy直接拷贝到新的bitmap中去的,怎么char*不能用,真是有点小麻烦。to: hNeed
Marshal.ReadInt32 读取来为一个巨大的int数 应该是错了。
int n = 5;
如Callback(param_foo, param_bar, pBuf, n);在C#里 居然 pNumber的内容是5,而nBufSize是个大整数 看起来是一个内存地址。。非常汗。。
我没有指定 调用方式 难道压入堆栈顺序反了??
VC里面所指向的内存,进程声明周期内是固定的,因为只new了一次,而且是vc dll,c# exe,所以你说的“并不能保存每次都能使用”是指C#这边的内存管理的问题吗?明天再看看了,谢了。
这样就不行了结贴。