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

VB.NET代码 求帮忙转换成VB 6.0解决方案

2013-07-08 
VB.NET代码 求帮忙转换成VB 6.0下面这段代码,求高人帮忙转换成VB6.0的代码,对VB6.0不熟悉。Imports System.

VB.NET代码 求帮忙转换成VB 6.0
下面这段代码,求高人帮忙转换成VB6.0的代码,对VB6.0不熟悉。

Imports System.Runtime.InteropServices

Public Class Form
    '该函数有三个参数,注意参数类型
    Declare Function ExplicitMsg Lib "StationIO.dll" Alias "ExplicitMsgMultiThread" (<MarshalAs(UnmanagedType.LPTStr)> ByVal _lpData As String, <MarshalAs(UnmanagedType.LPTStr)> ByVal _lpTemplate As String, ByVal lpLast As IntPtr) As IntPtr
    '该函数无返回值,定义为Sub
    Declare Sub FreeMem Lib "StationIO.dll" Alias "FreeMem" (ByVal lpLast As IntPtr)

    Sub ButtonOK_click() Handles ButtonOK.Click
        Dim lpRes As IntPtr, strRes As String
        '第一次调用时,注意第三个参数为0
        lpRes = ExplicitMsg(TextBoxData.Text, TextBoxTemplate.Text, 0)
        strRes = Marshal.PtrToStringAuto(lpRes)

        '再次调用,第三个参数为上次函数返回的指针
        lpRes = ExplicitMsg(TextBoxData.Text, TextBoxTemplate.Text, lpRes)
        strRes = Marshal.PtrToStringAuto(lpRes)
        MessageBox.Show(strRes)

        '调用完成,记得FreeMem释放内存
        FreeMem(lpRes)
    End Sub
End Class
VB VB.NET VB6.0
[解决办法]
IntPtr变成Long
VB没有PtrToStringAuto
需要定义一个定长的字符串(比如Dim strRes As String * 128,代表缓冲区是128),然后用CopyMemory把指针对应的内存拷贝过来。
[解决办法]
下个API浏览工具,把API函数及其需要的数据类型改一下就行了。IntPtr是结构类型,vb6可以使用type定义。这里,推荐<API浏览器(VB、VB.net、C#格式)>作者编写的不错,可以在三种语言间对API函数进行转换:http://download.csdn.net/detail/wennfengg/4237164

[解决办法]
这个貌似专门有转换的小软件吧,你搜一个下下来不是更好么?
[解决办法]
这样试试看



Public Class Form
   Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As long, pSource As long, ByVal ByteLen As Long)
    '该函数有三个参数,注意参数类型
    Declare Function ExplicitMsg Lib "StationIO.dll" Alias "ExplicitMsgMultiThread" ByVal _lpData As String, ByVal _lpTemplate As String, ByVal lpLast As long) As long
    '该函数无返回值,定义为Sub
    Declare Sub FreeMem Lib "StationIO.dll" Alias "FreeMem" (ByVal lpLast As long)
 
    Sub ButtonOK_click() Handles ButtonOK.Click
        Dim lpRes As long, strRes As String
        '第一次调用时,注意第三个参数为0
        lpRes = ExplicitMsg(TextBoxData.Text, TextBoxTemplate.Text, 0)
        copymemory byval varptr(strRes),byval varptr(lpRes), 4
 
        '再次调用,第三个参数为上次函数返回的指针
        lpRes = ExplicitMsg(TextBoxData.Text, TextBoxTemplate.Text, lpRes)
        copymemory byval varptr(strRes),byval varptr(lpRes), 4
        MessageBox.Show(strRes)

        '调用完成,记得FreeMem释放内存
        FreeMem(lpRes)
    End Sub
End Class
 

[解决办法]
不东,学习拉

热点排行