更新:感谢大家的帮助。我不知道编组我的字符串,这样做之后一切都正常工作。我已经为可能发现此问题的其他人编辑了下面的代码
我目前正在将一些 VB6 代码移植到 .net,vb6 应用程序正在使用预编译的 .dll(我相信用 C++ 制作),我无法访问它的源代码。
谷歌搜索函数名称时,我只得到一个谷歌结果,其中包含有关其返回值及其参数的信息,并且我相信我已经正确声明了 .DLL
http://jelleybee.com/fun/vgames/emulate/snes/setup/super%20jukebox/Uematsu.html
.DLL 函数声明
Declare Function Uematsu_LoadID666Tag Lib "uematsu.dll" (ByVal lpszFileName As String, ByRef lpTag As ID666_tag) As Boolean
我已经这样定义了我的结构
Public Structure ID666_tag
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public Song As String 'Title of song
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public Game As String 'Name of game
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public Artist As String 'Name of artist
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public Dumper As String 'Name of dumper
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public Dated As String 'Date dumped
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public Emu As String 'Emulator used to dump
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public Comment As String 'Optional comment
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public OST As String 'Origonal soundtrak title
Public SongLength As Integer 'Length of song
Public LoopLength As Integer 'Length of the loop (extended ID666)
Public EndLength As Integer 'Length of end (extended ID666)
Public FadeLength As Integer 'length of fade out
Public OSTDiscNum As Byte 'Origonal sound track disc number
Public OSTTrack As Short 'Original sound track track number
Public Publisher As String 'Name Of Publisher
Public Copyright As Short 'Date of Copyright
Public Mute As Byte 'Channels to mute
End Structure
我正在使用这样的功能
Function Extract_ID666(Fname As String) As ID666_tag
Dim TempExtr As ID666_tag
If Uematsu_LoadID666Tag(Fname, TempExtr) = True Then
MessageBox.Show("DONE")
Else
MessageBox.Show("FAIL")
End If
End Function
但是,当我运行我的 Extract_ID666 函数时,我会收到访问冲突错误。
我知道这与我设置使用 TempExtr 的方式或我声明 .dll 函数的方式有关。但我无法追踪它。
对此问题的任何想法或解决方案将不胜感激。我已经搜索了很长时间,试图找到类似的问题,但找不到解决方案。