vb调用vc编写的com问题
vc代码如下:
add.def如下:
LIBRARY "add.DLL"
EXPORTS
......
......
add @5
sayhello @6
add.cpp文件
.....
.....
//两个整数相加
int add(int a,int b)
{
return a+b;
}
//返回"hello"
char* sayhello()
{
return "hello";
}
vb代码如下:
Private Declare Function add Lib "com/Debug/add.dll" (ByVal a As Integer, ByVal b As Integer) As Integer
Private Declare Function sayhello Lib "com/Debug/add.dll" () As String
Private Sub Command1_Click()
Label1.Caption = add(2, 3)’调用正常
Label2.Caption = sayhello()'问题出现在此,调用后没显示
End Sub
是不是调用参数类型出错
问题点数:50、回复次数:3Top
1 楼rainstormmaster(暴风雨 v2.0)回复于 2006-03-04 19:12:04 得分 0
Private Declare Function add Lib "com/Debug/add.dll" (ByVal a As long, ByVal b As long) As long
Private Declare Function sayhello Lib "com/Debug/add.dll" () As long
sayhello返回的是字串的指针,所以你要用copymemory取出字串内容,大致过程如下,先用lstrlen计算字串的长度(字节数),然后给字串分配一个缓冲区,接着用copymemory取得字串内容(一般是ansi字串),最后用strconv将ansi字串转为unicode字串Top
2 楼rainstormmaster(暴风雨 v2.0)回复于 2006-03-04 19:15:04 得分 45
这有一个例子,你可以参考一下:
Option Explicit
Private Declare Function lstrlenA Lib "kernel32" (ByVal lpString As Long) As Long
Private Declare Sub RtlMoveMemory Lib "kernel32" (Destination As Any, Source As Any, ByVal Length As Long)
Public Function StringFromPtr(ByVal lPtr As Long) As String
Dim lLen As Long
lLen = lstrlenA(lPtr)
StringFromPtr = Space$(lLen)
RtlMoveMemory ByVal StringFromPtr, ByVal lPtr, lLen
End FunctionTop
3 楼myxmouse(小老鼠(我的星怎么是黑的?★★★★★))回复于 2006-03-30 22:27:29 得分 5
路径不对?????Top




