首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

这样会不会产生有关问题啊关于调用非托管dll

2012-01-14 
这样会不会产生问题啊!关于调用非托管dll.longGetVersion(reflongdate,[Out(),MarshalAs(UnmanagedType.LP

这样会不会产生问题啊!关于调用非托管dll.
long   GetVersion(ref   long   date,[Out(),   MarshalAs(UnmanagedType.LPWStr)]   string   hashCode);

我导入的一个函数,其中hashCode需要我为他分配内存.

在dll内部,会将一个 "1234567890123 "拷贝到   hashCode上.

我在调用这个函数前先定义
hashCode   =   "00000000000000000000 "   比较长
然后就可以正常的返回
hashCode   =   "1234567890123 ";

如果定义
hashCode   =   "00 ";
就会发生异常.


问题1:异常的产生是不是因为内存分配的不够.
问题2:如果内存分配的太长会不会出现这个问题:
原始字符串0000000000000000000000000000000\0
运行后中间进行截断1234567890123\000000\0
新的字符串就是1234567890123\0到第一个\0就截止了,两个\0之间的那一部分会不会造成内存泄露.




[解决办法]
由于没有指示长度的参数,明显函数要求 hashCode 有固定的长度,所以按照函数约定声明何时的长度是你的责任,要避免过短或过长。

热点排行