VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1562|回复: 8

[已解决]作dll时不能返回字符串

[复制链接]
41_avatar_middle
最佳答案
0 
在线会员 发表于 2023-1-12 19:18:53 | 显示全部楼层 |阅读模式
作了一个简单的dll ,有二个函数 一个int
int __stdcall  funmax(int a,int b)
{   
   return a + b ;
   
}
//另一个是想输入一个字符串,再返回一个字符串,为啥不行?
char str[40];
int __stdcall  funstr(str)
{
str = str  + "这是返回值"
return str;
}

function-style initializer appears to be a function definition,这个不能在cpp里面设置吗?
得放在哪个文件里声明?求教
最佳答案
60_avatar_small
2023-1-16 09:31:04
本帖最后由 netforfun 于 2023-1-16 09:33 编辑
sbw 发表于 2023-1-13 16:08
晕头,这样得想别的办法了,结贴


这么快就放弃了嘛?来给你个dll返回字符串的例子感受一下(VS2010编译通过,其他自行尝试,另外安全性起见建议以后用到生产环境自己补充为了防止内存泄漏的措施):
dll代码:
新建win32dll工程然后下面这样写
作dll时不能返回字符串
作dll时不能返回字符串
exe代码:
新建win32exe工程然后添加个菜单命令测试
作dll时不能返回字符串
作dll时不能返回字符串
最后测试结果:
作dll时不能返回字符串





上一篇:VC打包工具InstallShield2015安装中文版无效
下一篇:dll中这个类型怎么定义?
04_avatar_middle
最佳答案
22 
online_vip 发表于 2023-1-12 20:14:35 | 显示全部楼层
int __stdcall  funstr(str)
{
str = str  + "这是返回值"
return str;
}
这个函数本身是有问的,函数返回值是个int类型,你返回一个字符串类型?
41_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2023-1-12 20:47:07 | 显示全部楼层
本帖最后由 sbw 于 2023-1-12 21:00 编辑

str __stdcall  funstr(str)
{
str = str  + "这是返回值"
return str;
}  也试过了,也不行,

char __stdcall  funstr(char  *str )
{
  return "this!";
}
直接返一个字符串的值也不行,请问应该怎么声明
60_avatar_middle
最佳答案
3 
在线会员 发表于 2023-1-13 09:23:23 | 显示全部楼层
char str[40];
int __stdcall  funstr(str)
{
str = str  + "这是返回值"
return str;
}

char __stdcall  funstr(char  *str )
{
  return "this!";
}

哎哟两段问题都有点多啊,看起来你一般写算数函数会写到搞字符串就迷糊了。一般情况下char str[40];不建议写在函数体外面这等同于你给类声明了个私有成员除非你有意设置公共变量否则哪个函数都可以调用操作来修改一下危险性比较大。声明函数体是不能漏掉类型的你都知道参数里要写int a和int b就不知道char* str了;返回值你可以直接一个字符串随意,但是C++不重载运算符的情况下直接俩char*是加不到一块的用char肯定也有个算数类型的报错问你是不是该用int来加,所以你要么重载一下char*的+号运算符要么就用字符串操作函数类似strcpy或者strcat之类的再不济用sprintf当作打印输出也行,最后你的返回值要和return能对的上,你声明char返回值就要return个char而要返回char*的串串那么就不能用char声明返回值了。
57_avatar_middle
最佳答案
0 
在线会员 发表于 2023-1-13 13:10:37 | 显示全部楼层
作dll时不能返回字符串
41_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2023-1-13 16:08:38 | 显示全部楼层
晕头,这样得想别的办法了,结贴
60_avatar_middle
最佳答案
3 
在线会员 发表于 2023-1-16 09:31:04 | 显示全部楼层    本楼为最佳答案   
bestAnswer
本帖最后由 netforfun 于 2023-1-16 09:33 编辑
sbw 发表于 2023-1-13 16:08
晕头,这样得想别的办法了,结贴


这么快就放弃了嘛?来给你个dll返回字符串的例子感受一下(VS2010编译通过,其他自行尝试,另外安全性起见建议以后用到生产环境自己补充为了防止内存泄漏的措施):
dll代码:
新建win32dll工程然后下面这样写
作dll时不能返回字符串
作dll时不能返回字符串
exe代码:
新建win32exe工程然后添加个菜单命令测试
作dll时不能返回字符串
作dll时不能返回字符串
最后测试结果:
作dll时不能返回字符串

71_avatar_middle
最佳答案
1 
在线会员 发表于 2023-1-16 16:41:52 | 显示全部楼层
不同模块间不要用stl,一定要用可以protobuf转一下。
41_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 3 天前 | 显示全部楼层
感谢各位,解决了,问题简单的很,外部调用时space一个字符串空间来接收即可.我是其它语言调用这个dll,所以得预申请一个空间,接收的就是内容而不是指针了 .
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-2-6 08:51

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表