C#转换为VB.Net的问题,似乎VB.Net无法实现,救命啊!!!

roger_xiong 2009-03-12 10:58:21
C#中定义一个 string 类型,new string有8个重载,而 VB.net 中的New String只有3个重载,导致一些C#写的代码根本无法转换为VB.net,比如:

string s = new string((sbyte*)p, 0, len, encoding);

用工具将上面的代码转换以后是这样的:

Dim s As New String(CSByte(p), 0, len, encoding)


可是编译不通过,提示错误。


有没有哪位大大帮忙啊!!!!!!救命啊!!!!!!


...全文
195 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hztltgg 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wfyfngu 的回复:]
很正常!
因为:
C#大于CLR
而跨语言编程需要满足不同的语言都是CLR兼容的
sbyte并不兼容于CLR
[/Quote]

CLR,CTS(通用类型系统) > C# > CLS(通用语言规范)
浮生若梦丶 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 FreeSarge 的回复:]
我还是建议LZ修改代码,把多余参数的方法调用,转换到vb提供的3种中
[/Quote]
up
指间的风 2009-03-13
  • 打赏
  • 举报
回复
我还是建议LZ修改代码,把多余参数的方法调用,转换到vb提供的3种中
wood87654321 2009-03-13
  • 打赏
  • 举报
回复
VB中string的构造针对的是字符而不是字节,所以不能直接通过从指针字节内容构建,必须先写入一个缓冲区,再用Encoding对象将缓冲区内容编码为字符串。

int len = 0;
while (Marshal.ReadByte (p, len) != 0)
checked {++len;}
string s = new string ((sbyte*) p, 0, len, encoding);
-------------------------------------------------------
Dim buf(大小保证足够) As Byte
Dim len As Integer = 0
While (Marshal.ReadByte(p,len) <> 0)
buf(len) = Marshal.ReadByte(p)
len += 1
End While
Dim s As String = Encoding.GetString(buf, 0, len)
zzxap 2009-03-13
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/d86he86x(VS.80).aspx
hztltgg 2009-03-13
  • 打赏
  • 举报
回复
*在vb里面没有的,vb全部都是类型安全的,好像不能实现,你就用c#好了。
roger_xiong 2009-03-13
  • 打赏
  • 举报
回复
完整的代码是:


00253 public static unsafe string HeapToString (IntPtr p, Encoding encoding)
00254 {
00255 if (encoding == null)
00256 return Marshal.PtrToStringAnsi (p);
00257
00258 if (p == IntPtr.Zero)
00259 return null;
00260
00261 // This assumes a single byte terminates the string.
00262
00263 int len = 0;
00264 while (Marshal.ReadByte (p, len) != 0)
00265 checked {++len;}
00266
00267 string s = new string ((sbyte*) p, 0, len, encoding);
00268 len = s.Length;
00269 while (len > 0 && s [len-1] == 0)
00270 --len;
00271 if (len == s.Length)
00272 return s;
00273 return s.Substring (0, len);
00274 }



各位大大帮忙修改修改阿.


lkw5657 2009-03-13
  • 打赏
  • 举报
回复
自己写个类专门转换吧
wfyfngu 2009-03-13
  • 打赏
  • 举报
回复
很正常!
因为:
C#大于CLR
而跨语言编程需要满足不同的语言都是CLR兼容的
sbyte并不兼容于CLR

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧