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调用,能否成功?
...全文
143 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
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的

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧