最多能给这么多分!!!我在写一个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差不多,希望大家给点有参考价值的建议。
...全文
171 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
  • 打赏
  • 举报
回复
结果和原来相同
代码下载链接: https://pan.quark.cn/s/23ff226fe24b ### iTest自动化测试工具知识点详解#### 一、iTest自动化测试工具简介iTest是由业界领先测试设备制造商Spirent所研发的一款自动化测试工具。该工具为用户呈现了一个集成化的自动化测试解决方案,借助这一工具,用户能够完成软件及网络测试的编与自动化执行。iTest不仅适用于专业的测试工程师,对于非测试人员来说,同样是一个功能强大的工具,能够协助他们对网络中的设备和应用进行访问和自动化操作。#### 二、iTest Lite快速入门指南iTest Lite是一款免费提供给用户的版本,其目的是为用户呈现一个简明的iTest产品概览。用户可以从官方网站(www.fanfaresoftware.com)获取并安装iTest Lite。此工具不仅能够支持用户进行软件和网络测试,还能用于对网络上的设备或应用程序进行管理和自动化。#### 三、iTest的工作流程- **主页内容**:在iTest被启动之后,主页内容将展示在右侧,而活动列表则位于左侧。主页上不仅包含欢迎消息,还会提供iTest工作流程的高级图示以及链接到Fanfare社区的入口,用户可以通过论坛帖子、教程视频等资源进一步了解iTest。 - **活动列表**:这是使用iTest功能的推荐起点。活动列表包含以下几个部分: - **连接设备**:一种便捷的方法来验证iTest是否能够连接到测试设备。 - **构建拓扑结构**:在这一步骤中,可以迅速定义一组想要进行测试的设备或应用程序。 - **开发测试用例**:创建一个自动化的测试用例,用于针对任何特定的拓扑结构进行测试。 - **查看测试报告**:访问个人...
代码下载链接: https://pan.quark.cn/s/89ea75840350 STM32微控制器的实钟(RTC)作为一个独立的计单元,能够在系统重启或从休眠状态激活后持续保持间设置不变。本文将详细探究STM32 RTC的运行机制,涵盖钟结构图解析以及间显示的原理。需要明确的是,STM32的RTC模块坐落于备份领域(Backup domain),它借助32.768kHz的辅助晶体振荡器作为钟供给。在进行RTC编程实践,务必小心谨慎地处理与RTC相关的寄存器配置。随后,我们将借助RTC钟结构图展开深入剖析。钟结构图主要由两大块构成:APB1接口区块与RTC主控单元。APB1接口区块负责对与RTC关联的寄存器进行数据交互,而RTC主控单元内含两个子模块:RTC分频调节模块以及一个32位可变步长计数器。在RTC主控单元内部,有几个关键寄存器是必须掌握的:1. RTC_DIV(RTC分频调节余数寄存器):此寄存器旨在获取超越秒级的更高精度间(如0.1秒、0.01秒)。该寄存器在数值减至极值后会由硬件自动重置。其数值由RTC_PRL(RTC分频调节装载寄存器)提供,其钟频率源自RTCCLK。2. RTC_PRL(RTC分频调节装载寄存器):它为RTC_DIV提供重置数值,同用于设定钟频率的缩放比例。例如,若晶体振荡器频率为32.768KHz,将RTC_PRL设定为32767,即可得到每秒的计数速率。3. RTC_CNT(RTC计数器寄存器):该寄存器记录秒数,并可用于触发计数器溢出中断。4. RTC_ALR(RTC闹钟寄存器):用于设定闹钟刻,一旦计数器的数值与闹钟寄存器匹配,并且中断功能已启用,便会引发一个闹钟中断事件。在物理实现层...

16,551

社区成员

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

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

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