日期:2014-05-18  浏览次数:20897 次

这样会不会产生问题啊!关于调用非托管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 有固定的长度,所以按照函数约定声明何时的长度是你的责任,要避免过短或过长。