有一个com的函数:sfun(out int),这个i实际上是一个指向函数返回的一个数据块的地址。
但在C#中怎样把数据块copy 到byte[] 中?
但在C#中怎样把数据块copy 到byte[] 中?
解决方案 »
- 公司要开发手机短信,有没有好的短信开发接口的公司介绍
- 一个关于消息的问题
- VSS2005 网络发布问题,我的工程里用到了Infragistics第三方控件,当在没有安装Infragistics的机器上进行服务器端更新更新时失败了,该怎
- 我是搞java的,错买了<<征服ajax web2.0快速入门与项目实践(.net版)>>我现在15元退(新的,没有看)
- 求救几个问题,up有分啊
- 数据绑定后的文本框的更新数据源的问题
- append的用法
- 想将treeview做成一个树形菜单,可是不会,救命
- 一个问题:)
- 一个小问题,大家帮帮忙~
- 如何判断一个定义的变量是否初始化过?
- TreeView (Winform)得到选中节点的疑问
int i;
sfun(out i);
调用sfun后,i是一个数据块的地址,怎样把数据块放到byte []变量中
用int来表示一个地址?
Ivony()
是啊,int 就是一个void *
那个com是个现成的,我也没有办法.
我以前在VC下是这样用的.
CByteArray sc;
long b;
sfun(&b);
HGLOBAL pb = (HGLOBAL )b;
l = GlobalSize(pb);
sc.SetSize(l+1);
BYTE *pc = (BYTE *) GlobalLock(pb);
for(long i=0;i<l;i++) sc[i]=pc[i];
GlobalUnlock(pb);
runrunrun(一条不会游泳の鱼)
先要知道返回的数据块的大小,才能copy 数据啊
C#
[DllImport("forf1book.dll",EntryPoint="writetolp")] static extern void writetolp ( int ls,int ld,int ilen );
[DllImport("Kernel32",EntryPoint="GlobalSize")] static extern int GlobalSize ( int lp );
int lp;
int ilen;
sfun(out lp);
ilen = GlobalSize(lp); //长度能正确取出.
byte[] pb = new byte[ilen];
fixed(byte* pb1 = &pb[0])
{
writetolp(lp,(int )pb1,ilen);
//运行时出现未处理的“System.NullReferenceException”类型的异常出现在 ts1.exe 中。
//其他信息: 未将对象引用设置到对象的实例。
}vc的dll源程序:
__declspec(dllexport) void writetolp(int ls,int ld,int ilen)
{
HGLOBAL pb = (HGLOBAL )ls;
GlobalLock(pb);
CopyMemory((void *)ld,pb,ilen);
GlobalUnlock(pb);
}
[DllImport("Kernel32.dll",EntryPoint="RtlMoveMemory")]
public static extern void CopyMemory (byte[] Source,IntPtr Destination,int Length);前提是你得知道你要Copy的Length