C#调用C# dll时传的参数StringBuilder没法赋值

啊哈五个字 2017-02-17 05:38:12
我用C#写了个dll,用C++封装成了非托管dll,C++可以调用,C#也可以调用。现在问题来了,动态库里有个方法,比如
public static string Add(string x,StringBuilder sb)
{
string str = "";
//sb = new StringBuilder();

try
{
sb.Append(x);
}
catch(Exception ex)
{
str = ex.Message+" sb.Capacity:"+sb.Length;
return str;
}
return str;
}
然后用C#来调用
[DllImport(".\\ClassLibrary2.dll")]
public static extern string Add(string x,StringBuilder sb);
static void Main(string[] args)
{

string s = "1";
StringBuilder sb1 = new StringBuilder(1024);
s = Add("qwert",sb1);
Console.Write("sb1:"+sb1+"\n");
Console.Write("s:"+s);

}
会报错,报错位置在动态库里的 sb.Append(x) :
容量小于当前大小。参数名:requiredLength sb.Capacity:0
就是这个传的StringBuffer不知道为什么长度成0了,怎么弄都赋不上值,求各位大神们帮帮忙
...全文
423 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
啊哈五个字 2017-02-20
  • 打赏
  • 举报
回复
引用 12 楼 Yokeqi 的回复:
请原谅完全没理通你的逻辑。 1. 那个Add函数所在的dll是你在网上找的程序的二次封装?(这个Dll是用C#写的类库吧?) 2. 那个Main函数的应该是你自己写的吧?
枫0子K 2017-02-20
  • 打赏
  • 举报
回复
请原谅完全没理通你的逻辑。 1. 那个Add函数所在的dll是你在网上找的程序的二次封装?(这个Dll是用C#写的类库吧?) 2. 那个Main函数的应该是你自己写的吧?
啊哈五个字 2017-02-20
  • 打赏
  • 举报
回复
那个dll 我是上网找了个小程序 里面是用C++\CLI对dll进行了二次封装的
啊哈五个字 2017-02-20
  • 打赏
  • 举报
回复
开头给的那个代码只是个测试代码,不是源程序里的
啊哈五个字 2017-02-20
  • 打赏
  • 举报
回复
引用 8 楼 Yokeqi 的回复:
[quote=引用 7 楼 a462575515 的回复:] [quote=引用 3 楼 stherix 的回复:] 这是出口转内销吗 c#写的转成c++又用c#调用? 这其实是混合dll,并不是非托管,还是要依赖.net环境 c#直接引用这个dll,调用原始的c#类方法不就行了 为何要dllImport
因为源程序是写死的,里面是dllimport调用的dll,上级不给源码,没办法只能从dll下手了[/quote] 那你在项目引用中,直接引用这个Dll可以不? 然后就跟你调用其他C#代码一样咯[/quote] 原项目我没有源码,只有程序,只能替换里面文件夹下的dll,没法添加引用
枫0子K 2017-02-20
  • 打赏
  • 举报
回复
引用 7 楼 a462575515 的回复:
[quote=引用 3 楼 stherix 的回复:] 这是出口转内销吗 c#写的转成c++又用c#调用? 这其实是混合dll,并不是非托管,还是要依赖.net环境 c#直接引用这个dll,调用原始的c#类方法不就行了 为何要dllImport
因为源程序是写死的,里面是dllimport调用的dll,上级不给源码,没办法只能从dll下手了[/quote] 那你在项目引用中,直接引用这个Dll可以不? 然后就跟你调用其他C#代码一样咯
啊哈五个字 2017-02-20
  • 打赏
  • 举报
回复
引用 3 楼 stherix 的回复:
这是出口转内销吗 c#写的转成c++又用c#调用? 这其实是混合dll,并不是非托管,还是要依赖.net环境 c#直接引用这个dll,调用原始的c#类方法不就行了 为何要dllImport
因为源程序是写死的,里面是dllimport调用的dll,上级不给源码,没办法只能从dll下手了
啊哈五个字 2017-02-20
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
[quote=引用 楼主 a462575515 的回复:] 用C++封装成了非托管dll
楼主真的明白啥是非托管的? StringBuilder是什么,标准库里有这个?如果是自己写的,c#的StringBuilder怎么可能直接转换过去。[/quote] 标准库是什么东东
啊哈五个字 2017-02-20
  • 打赏
  • 举报
回复
上级要求能够供c++或者C#调用,C++调用的时候,动态库里StringBuilder前面好像要加个东西转换一下,这个我懂,但C#调用的话该怎么改呢
Poopaye 2017-02-17
  • 打赏
  • 举报
回复
引用 楼主 a462575515 的回复:
用C++封装成了非托管dll
楼主真的明白啥是非托管的? StringBuilder是什么,标准库里有这个?如果是自己写的,c#的StringBuilder怎么可能直接转换过去。
stherix 2017-02-17
  • 打赏
  • 举报
回复
这是出口转内销吗 c#写的转成c++又用c#调用? 这其实是混合dll,并不是非托管,还是要依赖.net环境 c#直接引用这个dll,调用原始的c#类方法不就行了 为何要dllImport
啊哈五个字 2017-02-17
  • 打赏
  • 举报
回复
up!!!!!!!!!!!!!!!!!
啊哈五个字 2017-02-17
  • 打赏
  • 举报
回复
顶!!!!!!!!

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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