关于利用DLL,在VB和VC之间数据通信的问题

jzd1997 2004-09-14 08:54:50
我做了个DLL,在VB当中调用,现在想通过参数(lpResult)把结果传回VB,但是却不行。各位老大帮我看看,谢了!
extern "C" _declspec(dllexport) int Check_Bank(LPTSTR lpBankCD, LPTSTR lpResult)
{

try{
LPTSTR sRetOK = "BankCD Exist";
LPTSTR sRetFail = "BankCD didn't Exist";
LPTSTR lpSql;
ODynaset oDyna;
lpSql = "select bank_cd from bank where bank_cd='0001'";
oDyna.Open(datab,lpSql);
if(oDyna.IsEOF())
{
SysReAllocStringLen((BSTR*)lpResult,(BSTR)sRetFail,strlen(sRetFail));
return 0;
}else
{
SysReAllocStringLen((BSTR*)lpResult,(BSTR)sRetOK,strlen(sRetOK));
return -1;
}
}catch(...)
{
return 0;
}
}
...全文
150 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jzd1997 2004-09-16
  • 打赏
  • 举报
回复
搞定了,谢谢大家这么热心
xlt123 2004-09-15
  • 打赏
  • 举报
回复
可能是VB中函数申明和调用的问题吧.举个例子:
extern "C" _declspec(dllexport) int Check_Bank(LPTSTR lpResult){
strcpy(lpResult,"Hello,world!");
return 0;
}

VB中申明
Public Declare Function Check_Bank Lib "dll name" (ByVal strRet As String) As Long
注意,这里的参数是传值(byval)方式,不是传引用(byref)方式.
在vb 调用API 的时候,通过参数返回结构或者其它基本数据类型都是
传引用,只有 String 是传值.String 类型的值应该就是它的地址.

调用

'注意给 String 分配足够的长度
dim strReturn as String * 256
dim nReturn as Long

nReturn = Check_Bank(strReturn)
fxj51983 2004-09-14
  • 打赏
  • 举报
回复
extern "C" _declspec(dllexport) int Check_Bank(LPTSTR lpBankCD, char * lpResult)

在vb中申明的时候注意一下!要能够带出参数的!肯定没有问题的!我以前就做过的!给你点信心吧
oyljerry 2004-09-14
  • 打赏
  • 举报
回复
结果应该是传给vc吧
tyzyx 2004-09-14
  • 打赏
  • 举报
回复
如果可以用MFC
用CString 就可以了。

如果用SDK
用wchar * 就可以了

如用C++
用string 就可以了。

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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