C#调用C++编写的dll函数参数为指针

soar_jyh 2010-10-12 03:50:24
如题,c#调用c++编写的dll,其中函数为char*,如何传递参数值.
举例:c++函数原型为bool Test(char*,input,char* output);其中返回值为真表示函数调用成功,假表示调用失败,参数output是我们最终要的结果。如果是c++里调用此dll函数十分简单,没有任何问题,可在c#里就不知道如何操作了,我试了
[DllImport("****.dll",EntryPoint = "Test")]
static extern bool Test(string input, ref string output);
这样的调用,程序出错:“尝试读取或写入受保护的内存”

static extern bool Test(string input, ref char[] output);
这样的调用,程序出错:“System.ExecutionEngineException”

c#没怎么搞过,望高手指点!
...全文
215 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
soar_jyh 2010-10-12
  • 打赏
  • 举报
回复
感谢楼上几位,StringBuilder 没问题。

用intptr没错,但是得到的结果是一些乱码,可能如hdt兄台所说字符串编码没搞好,不太会
damjmk2 2010-10-12
  • 打赏
  • 举报
回复
StringBuilder sb = new StringBuilder(1000) 分配空间
soar_jyh 2010-10-12
  • 打赏
  • 举报
回复
[DllImport("****.dll",EntryPoint = "Test")]
static extern bool Test(string input, ref StringBuilder output);
加ref调用和string调用是一样的问题,不加ref出现警告:“警告: 非托管代码已经在 StringBuilder 缓冲区溢出。进程可能变得不稳定。在进行封送处理之前,未给 StringBuilder 分配足够的容量。”
如何解决?谢谢这位兄弟
真相重于对错 2010-10-12
  • 打赏
  • 举报
回复
[DllImport("****.dll",EntryPoint = "Test")]
static extern bool Test(string input, intptr output);

调用
intptr p = Marshal.AllocHGlobal(1024);
Test("stringinput",p);
String strout = Marshal.PtrToStringAuto(p);

注意字符串编码
damjmk2 2010-10-12
  • 打赏
  • 举报
回复
都用stringbulider试试吧
bloodish 2010-10-12
  • 打赏
  • 举报
回复
试试
[DllImport("****.dll",EntryPoint = "Test")]
static extern bool Test(string input, StringBuilder output);


传入用string没问题,传出要用StringBuilder


内容概要:本文围绕不确定环境下的多式联运路径优化问题展开研究,提出并实现了基于AFO算法、遗传算法(GA)和粒子群优化算法(PSO)的三种智能优化方法,并借助Matlab平台完成算法编程与仿真。研究构建了考虑时间、成本、转运风险等多重不确定因素的路径优化模型,系统比较了AFO、GA、PSO三种算法在收敛速度、全局寻优能力和稳定性方面的表现,同时引入Matlab自带的全局优化搜索器作为基准对照,深入分析各算法在复杂物流网络中的适用边界与性能差异。研究表明,AFO算法在解决此类组合优化问题时展现出更快的收敛效率和更强的局部规避能力。; 适合人群:具备一定Matlab编程基础与运筹优化知识,从事物流工程、交通运输规划、智能算法开发等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多式联运、综合货运网络中的路径决策支持系统构建;②为不确定性条件下复杂路径规划问题提供智能算法选型依据与技术实现方案;③支持科研人员复现主流优化算法并开展横向性能对比实验,推动算法改进与实际落地。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析算法实现流程,重点理解目标函数设计、约束条件处理及参数敏感性分析部分,可通过调整问题规模与算法参数进行对比实验,进一步拓展至动态路径规划或大规模网络优化等延伸场景。

111,129

社区成员

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

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

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