VB中定长string类型在VB.NET中怎样改?

时间:2021-03-18 14:00:12
vb中如下定义:
Type USER_INF           
    control_sv_name     As String * 16      
    exepath             As String * 128     
    oraclehost          As String * 16      
    oracleuid           As String * 8       
    oraclepassword      As String * 16      
    oracletbluid        As String * 8       
    excel_reportpath    As String * 128     
    Shortbcr_exePath    As String * 128     
    Shortbcr_datapath   As String * 128     
    longbcr_exepath     As String * 128     
    longbcr_datapath    As String * 128    
End Type

我在vb.net中改成如下来用,是否可以
Structure USER_INF           
            Dim control_sv_name As String       
            Dim exepath As String      
            Dim oraclehost As String       
            Dim oracleuid As String        
            Dim oraclepassword As String       
            Dim oracletbluid As String        
            Dim excel_reportpath As String      
            Dim Shortbcr_exePath As String      
            Dim Shortbcr_datapath As String      
            Dim longbcr_exepath As String      
            Dim longbcr_datapath As String      
End Structure

上面的使用可行吗?先谢谢大家帮忙啦

11 个解决方案

#1


<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=16)> _
Dim control_sv_name As String

#2


楼上的使用方法是否需要引入什么?
我用时说UnmanagedType没有定义。
谢谢。

#3


System.Runtime.InteropServices

#4


参考下面的帖子
http://community.csdn.net/Expert/topic/5376/5376725.xml?temp=1.200503E-02

#5


楼上两位的方法我都试过了,不过似乎和vb所要实现的不一样。
vb中使用定长字符串,如果赋值超过指定长度,会将剩余部分截去的。楼上方法都试过了,指定了16的长度,赋值20位后并没有截取前16位,而是全部显示。

#6


我搜过了,下面方法都用在C#中,vb.net中怎么不好使啊
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=16)> _
Dim control_sv_name As String

#7


很简单啊 ,有一个类可以转换的。联系我 654645788

#8


晕,我不上QQ

有没有其他办法啊,大家帮帮忙

#9


Structure USER_INF           
            Dim control_sv_name As String       
            Dim exepath As String      
            Dim oraclehost As String       
            Dim oracleuid As String        
            Dim oraclepassword As String       
            Dim oracletbluid As String        
            Dim excel_reportpath As String      
            Dim Shortbcr_exePath As String      
            Dim Shortbcr_datapath As String      
            Dim longbcr_exepath As String      
            Dim longbcr_datapath As String      
End Structure


dim obj1 as USER_INF
with obj1
.control_sv_name=space*16
.exepath=space*128
end with
其它类同

#10


楼上这个应该改成:
dim obj1 as USER_INF
with obj1
.control_sv_name=space(16)
.exepath=space(128)
end with
确实分配了16的空间,可要是给control_sv_name赋20位,则显示为20位,不是16位。
现在需要是分配16长度,如果超出则最大显示16位。
没有其他的办法了么?

#11


结构中还是不能使用定长字符串
不过还是感谢大家帮忙,结帖拉

#1


<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=16)> _
Dim control_sv_name As String

#2


楼上的使用方法是否需要引入什么?
我用时说UnmanagedType没有定义。
谢谢。

#3


System.Runtime.InteropServices

#4


参考下面的帖子
http://community.csdn.net/Expert/topic/5376/5376725.xml?temp=1.200503E-02

#5


楼上两位的方法我都试过了,不过似乎和vb所要实现的不一样。
vb中使用定长字符串,如果赋值超过指定长度,会将剩余部分截去的。楼上方法都试过了,指定了16的长度,赋值20位后并没有截取前16位,而是全部显示。

#6


我搜过了,下面方法都用在C#中,vb.net中怎么不好使啊
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=16)> _
Dim control_sv_name As String

#7


很简单啊 ,有一个类可以转换的。联系我 654645788

#8


晕,我不上QQ

有没有其他办法啊,大家帮帮忙

#9


Structure USER_INF           
            Dim control_sv_name As String       
            Dim exepath As String      
            Dim oraclehost As String       
            Dim oracleuid As String        
            Dim oraclepassword As String       
            Dim oracletbluid As String        
            Dim excel_reportpath As String      
            Dim Shortbcr_exePath As String      
            Dim Shortbcr_datapath As String      
            Dim longbcr_exepath As String      
            Dim longbcr_datapath As String      
End Structure


dim obj1 as USER_INF
with obj1
.control_sv_name=space*16
.exepath=space*128
end with
其它类同

#10


楼上这个应该改成:
dim obj1 as USER_INF
with obj1
.control_sv_name=space(16)
.exepath=space(128)
end with
确实分配了16的空间,可要是给control_sv_name赋20位,则显示为20位,不是16位。
现在需要是分配16长度,如果超出则最大显示16位。
没有其他的办法了么?

#11


结构中还是不能使用定长字符串
不过还是感谢大家帮忙,结帖拉