我做了个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;
}
}
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;
}
}
解决方案 »
- 高手请进,调用createinstance的方法为什么会失败?
- 在SDK程序中使用API函数的问题,希望大家帮我看看,谢谢!
- 如何改变一个按钮的标题啊
- 本人想学vc++,不知道看什么书,我已经熟练的掌握delphi,sqlserver,vfp,asp,熟悉oop编程!
- 求一个使对话框程序启动时自动最小化的方法
- 什么是sdk?
- 用VC编译、调试程序时设置Win32 Debug或Win32 Release分别有何作用?
- (不是用程序)如何实现 win98下用户必须输入密码才能登陆(即按取消键不能登陆)??
- 我像写一个DLL的程序,需要注意那些问提,导入道出如何实现等等。来者有分
- RegNotifyChangeKeyValue的问题。
- 请问在pc端实现与手机红外通信的基本过程
- 哪位有CNGP的API,请发给我,100分送
用CString 就可以了。如果用SDK
用wchar * 就可以了如用C++
用string 就可以了。
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 LongnReturn = Check_Bank(strReturn)