VC 导出的 DLL 如何给 VB 返回不定长度的字符串?

gxqcn 2006-05-19 11:13:35
在 DLL 中:

LPTSR m_lpszBuf = NULL;


{
// ...
// 对 m_lpszBuf 进行操作
// ...
}

extern "C" const LPCTSTR __declspec(dllexport) WINAPI getStr( ..., SIZE_T * const pStrLen = NULL )
{
// ...
// 对 m_lpszBuf 进行操作
// ...
if ( NULL != pStrLen )
{
*pStrLen = strlen( m_lpszBuf );
}
return m_lpszBuf;
}

其中,m_lpszBuf 是一个以"\0"结尾的字串,其长度不定(由其它函数决定),
getStr() 函数的目的是为了获取该字串的首地址(也可得到该字串的长度)

我用VC写该DLL的目的,是希望在其它语言如VB也可自由调用它。

请问在VB中,如何申明该函数?如何让VB读出该字串?
如果当前接口无法完成,应该怎样修改 DLL 的导出接口?

我的问题是:若 DLL return 回一个字串首地址,如果用VC去调用非常容易,但如果是VB调用,能否成功?
...全文
81 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gxqcn 2006-05-19
谢谢!问题解决了,立即结帖!
回复
supergreenbean 2006-05-19
Private Declare Function lstrcpyn Lib "kernel32" Alias "lstrcpynA" (ByVal lpString1 As String, ByVal lpString2 As Long, ByVal iMaxLength As Long) As Long
Private Declare Function getStr Lib "your.dll" (ByRef pStrLen As Long) As Long

Private Sub Command1_Click()
Dim sBuf As String
Dim lpBuf As Long, lBufLen As Long

lpBuf = getStr(lBufLen)
If lBufLen <> 0 Then
sBuf = Space$(lBufLen)
lstrcpyn sBuf, lpBuf, lBufLen
End If
End Sub

这是针对LPSTR的
回复
相关推荐
发帖
API
创建于2007-09-28

1461

社区成员

VB API
申请成为版主
帖子事件
创建了帖子
2006-05-19 11:13
社区公告
暂无公告