C#调用C++DLL int PrintString(const char* const str)

guitar100 2015-04-30 11:20:57
int PrintString(const char* const str)
Msprintdyn.dll
C#中怎么去声明?
const char* const str

我试过还几个类型调用 不报错但是对方只接受了第一个字节
[DllImport("Msprintdyn.dll", EntryPoint = "PrintString", CharSet = CharSet.Auto)]
public static extern unsafe int PrintString(StringBuilder str);

[DllImport("Msprintdyn.dll", EntryPoint = "PrintString", CharSet = CharSet.Auto)]
public static extern int PrintString(StringBuilder str);

[DllImport("Msprintdyn.dll", EntryPoint = "PrintString", CharSet = CharSet.Auto)]
public static extern int PrintString(String str);

[DllImport("Msprintdyn.dll", EntryPoint = "PrintString", CharSet = CharSet.Auto)]
public static extern unsafe int PrintString(Char[] str);

请问大家还有怎么解决呢?
...全文
206 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Poopaye 2015-04-30
  • 打赏
  • 举报
回复
直接用string就行
langyue555 2015-04-30
  • 打赏
  • 举报
回复
[DllImport("Msprintdyn.dll", EntryPoint = "PrintString", ExactSpelling = false, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern int PrintString(ref StringBuilder str); 试试
guitar100 2015-04-30
  • 打赏
  • 举报
回复
up up up
xian_wwq 2015-04-30
  • 打赏
  • 举报
回复
1. 修改CharSet = CharSet.Auto, 只传了首字符,个人怀疑是因为unicode到ansi转换的问题; CallingConvention = CallingConvention.StdCall 这个参数也加上 2. 传进去的数据不需要返回,用string足够,不需要stringbuilder

110,534

社区成员

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

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

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