最多能给这么多分!!!我在写一个dll时定义了一个函数,通过参数返回字符串,不知道有什么问题。

守田人 2001-10-09 11:24:04
extern "C" __declspec(dllexport) int HZS_GetSvr(char * str,int len=255)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if(len>server.GetLength())
len=server.GetLength();
str=server.GetBuffer(len);
MessageBox(NULL,server,str,0);
return 0;
}

在notes中调用时参数不能把字符串带出去,而我的对话框告诉我,的确已经赋了值。是这个函数写的有问题,还是我调用有问题呢?
声明:
Declare Sub HZS_SetSvr Lib "search.dll" (Byval svr As String)
Declare Function HZS_GetSvr Lib "search.dll" (svr As String,Byval cSize As Integer)As Integer
调用

Sub Click(Source As Button)
Dim strSvr As String
strSvr=String(255,0)
strSvr="abc"
Call HZS_GetSvr(strSvr,255)
Messagebox strSvr
HZS_SetSvr("myserver/摩天集团")
Call HZS_GetSvr(strSvr,255)
Messagebox strSvr
End Sub
其实notes语法和vb差不多,希望大家给点有参考价值的建议。
...全文
169 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
守田人 2001-10-26
  • 打赏
  • 举报
回复
众位你们没发现我犯了一个错误,就是把strcpy的参数写反了,多谢你们了。我来收帖子。

另外帮忙关注http://www.csdn.net/expert/topic/336/336517.shtm

oicq=197575
huxianwei 2001-10-17
  • 打赏
  • 举报
回复
在dll中传字符串指针必须利用lstrcpy(str,a)而非strcpy(str,a).试试。
Gu_c_h 2001-10-16
  • 打赏
  • 举报
回复
傳遞 char * 也是可以的,程序已經測試通過,所以我認為 minotaurus 老兄失敗的原因應該是
傳入函數的指針沒有分配足夠的內存,導致無法載入字符串
Jeffery__Chen 2001-10-16
  • 打赏
  • 举报
回复
同意楼上,字符串显式传出应用双指针 。
lifekill1978 2001-10-16
  • 打赏
  • 举报
回复
返回值是传递地址,假如你要返回一个整数如void get(int *iBack){*iBack=16;},调用时int t; get(&t);完成后返回t=16;你这个我感觉应该传递char **str
Gu_c_h 2001-10-16
  • 打赏
  • 举报
回复
vc6.0 + win2000 通過

dll函数:
void GetStr(char *str)
{
char * a = "test";
strcpy(str,a);
}
用def文件聲明

調用;
gLibSample=LoadLibrary("TESTDLL1.DLL");
typedef void (*GETSTR)(char *);
GETSTR getstr;
getstr = (GETSTR)GetProcAddress(gLibSample,"GetStr");
char a[40];
getstr(a);
AfxMessageBox(a);
FreeLibrary(gLibSample);
hollysky 2001-10-16
  • 打赏
  • 举报
回复
What not use Variant Type?
Try again ^-^
守田人 2001-10-16
  • 打赏
  • 举报
回复
看我新写的,还是不行!
dll函数:
extern "C" __declspec(dllexport) int HZS_GetVer(char *str)
{
char * strTmp="1.1";
strcpy(str,strTmp);
return 0;
}
声明:
Declare Function HZS_GetVer Lib "search.dll"(Byval ver As String) As Integer
调用:
Dim i As Integer
Dim s As String
Call HZS_GetVer(s)
Msgbox s

结果是空的!
请高手继续关注!!!
perennialloser 2001-10-16
  • 打赏
  • 举报
回复
在VB中 Dim strSvr As String * 255 再试一下。
zfan333 2001-10-09
  • 打赏
  • 举报
回复
str=server.GetBuffer(len);
这样得到的是局部数据吧?你应该这样:
char *pTmp = server.GetBuffer(len);
strcpy(str,pTmp);//你要保证调用这个函数时str分配了足够大的内存
perennialloser 2001-10-09
  • 打赏
  • 举报
回复
Declare Function HZS_GetSvr Lib "search.dll" (svr As String,Byval cSize As Integer)As Integer

(svr As String,...
VB中好象默认是按引用传递参数,不知道Notes中怎样?这里是不是应该改为
(Byval svr as String,...
zfan333讲得很对 。
Gu_c_h 2001-10-09
  • 打赏
  • 举报
回复
錯啦,哈
你的原因可能是server已經被釋放

試試

strcpy(str,server);
Gu_c_h 2001-10-09
  • 打赏
  • 举报
回复
str=server.GetBuffer(0);
守田人 2001-10-09
  • 打赏
  • 举报
回复
结果还是和原来相同一样的. :-(..........
守田人 2001-10-09
  • 打赏
  • 举报
回复
结果和原来相同

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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