VC写的动态链接库函数:
void __stdcall Fun(char** p)
{
...//函数体内,p开僻了新空间,并给空间赋了新值
}在VB里应如何声明,如何调用?我这么写的:
声明:
Private Declare Sub Fun Lib "myDll.dll" (ByVal p As Long)
Private Declare Function VarPtr Lib "MSVBVM60" (var As Any) As Long调用程序:
Dim s As String
Fun VarPtr(s)但结果s仍为空值,感觉Fun函数对s变量没影响。
请问我哪里错了,应如何写????在线等,急~~~~~~~
void __stdcall Fun(char** p)
{
...//函数体内,p开僻了新空间,并给空间赋了新值
}在VB里应如何声明,如何调用?我这么写的:
声明:
Private Declare Sub Fun Lib "myDll.dll" (ByVal p As Long)
Private Declare Function VarPtr Lib "MSVBVM60" (var As Any) As Long调用程序:
Dim s As String
Fun VarPtr(s)但结果s仍为空值,感觉Fun函数对s变量没影响。
请问我哪里错了,应如何写????在线等,急~~~~~~~
解决方案 »
- 请问,XP系统“我的电脑”左侧风格,用什么控件?[有图]
- 在局域网内,把一个文件传送到另一台计算机的指定目录。
- 他妈的,在网上下在的vb也不行呀.我靠.
- 如何将db1中的table1中的所有数据添加到db2中的table2中(access)
- 各位好,能帮我一下吗?我好着急啊!
- 参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突
- 谁有调用CreatePolyPolygonRgn的例子?
- 修改注册表后,怎样使设置马上生效???????
- 我知道把这个放在这里不太合适,可是我忍无可忍了!!!
- 在使用adodb.connection.rollbacktrans 前如何判断connection 是否处于活动事务状态?
- 问个简单问题,大家帮我下
- 模拟菜单单击的问题
fun VarPtr( s )
然后你再CopyMemory复制出来吧
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Private Declare Sub Fun Lib "myDll.dll"(ByRef p As Long)
Dim p As Long
fun VarPtr( p ) Dim L As Long
L = lstrlen(lp)
Dim s As String
s = String$(L + 1, vbNullChar)
CopyMemory s, lp, Ls '就是参数的字符串了顺便说一下,DLL不建议使用这种类型的参数.
Dim ss As String
Call Fun(ByVal s(0))
ss = StrConv(s, vbUncode) '或者vbFromUncode
{
return true;
}void __stdcall Alert(char** p)
{
MessageBox(NULL, *p, "Alert", MB_OK); // 注意变量类型声明是char**
}// CDll.defEXPORTS
Alert @1' Form1.frm(VB6代码)Option ExplicitPrivate Declare Sub Alert Lib "CDll.dll" Alias "#1" (ByRef p As Long)Private Sub Command1_Click()
Dim p As Long
Dim s As String
Dim t As String
s = "Hello"
t = StrConv(s, vbFromUnicode)
p = StrPtr(t)
Alert p
End Sub
Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Private Declare Sub Func Lib "dlltest.dll" (ByRef p As Long)
Sub main()Dim lp As Long
Func lpDim L As Long
L = lstrlen(lp)ReDim Buf(L) As Byte
CopyMemory Buf(0), lp, L ' 这样buf里面就是实际的字符串内容,我往string中复制老出问题End Sub
Hassle 的代码最直接简单明了。