问题描述
PrivateTypeHY_RT_SlLeftAsLonglRightAsLonglTopAsLonglBottomAsLongEndTypePrivateTypeID_CD_SsText(10)AsString*256Rect(10)AsHY_RT_SEndType请问上面两个vb程序如何转为vb.net,谢谢
解决方案
解决方案二:
.net已经没有固定长度字符串,改如下PublicStructureHY_RT_SDimlLeftAsIntegerDimlRightAsIntegerDimlTopAsIntegerDimlBottomAsIntegerEndStructurePublicStructureID_CD_SDimsText()AsStringDimRect()AsHY_RT_SEndStructurePrivateSubaa()'调用结构'初始化结构DimidsAsNewID_CD_SReDimids.sText(9)ReDimids.Rect(9)DimiAsIntegerFori=0To9ids.sText(i)=Space(256)Next'可以使用了EndSub
解决方案三:
感谢zdbb,但现在是提示参数格式不对?能否再帮我分析一下呢我是这么处理的ImportsSystem.Runtime.InteropServices声明:PrivateDeclareFunctionGet_cDataLib"Core.dll"(ByValiTypeAsInteger,ByValsNameInAsString,ByValsNameOutAsString,ByValszNameOutAsString,ByRefPstOutAsID_CD_S)AsInteger通过PrivateSubaa()'调用结构dimiResultasintegerdimsNameIn,sNameOut,sZNameOutasstring'初始化结构DimidsAsNewID_CD_SReDimids.sText(9)ReDimids.Rect(9)DimiAsIntegerFori=0To9ids.sText(i)=Space(256)NextsNameIn="C:1.bmp"szNameOut="C:11.bmp"iResult=Get_cData(1,sNameIn,"","",ids)'执行上面这句话时,系统报错,提示参数不正确EndSub'我用了多种方法,不能解决,请帮着分析一下,这样的问题怎么解决,谢谢
解决方案四:
自己顶
解决方案五:
有人处理过这样的问题吗?
解决方案六:
PrivateStructureID_CD_S<VBFixedArray(10)>DimsText()AsSystem.Text.StringBuilder<VBFixedArray(10)>DimRect()AsHY_RT_SEndStructure在某些环境中,必须将定长的字符缓冲区传递到非托管代码中以进行操作。在这种情况下,只传递字符串不起作用,原因是被调用方无法修改传递的缓冲区的内容。即使字符串是通过引用传递的,仍然无法将缓冲区初始化为给定的大小。解决方案是将StringBuilder缓冲区作为参数而不是字符串传递。StringBuilder可以由被调用方取消引用和修改,条件是它不超过StringBuilder的容量。还可将其初始化为固定长度。例如,如果将StringBuilder缓冲区初始化为容量为N,则封送拆收器将提供大小为(N+1)个字符的缓冲区。这个+1说明非托管字符串具有Null结束符,而StringBuilder却没有。