C++ char* 在C# 中用什么表示呢?  

ido0926 2016-07-06 05:33:22
C++



C++ 调用


我是这样写的,然后总是报错参数不正确。
C#



请各位大神相助!!
...全文
1863 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋的红果实 2016-07-07
  • 打赏
  • 举报
回复
举例 C里面, 方法: int myMethod(char *c); //c可能是char指针变量;或者是char数组的首地址 调用: char c="a"; char *Point=&c; int I=myMethod(Point); 或者,参数按数组传递 char c[]=new char[1]; c[0]="a"; int myMethod(c); C#里面, [DllImport(……)] public static extern int myMethod(StringBuilder sb); 调用: StringBuilder mySB = new StringBuilder(); mySB.Append("a"); int I=myMethod(mySB); 以上是例子,你的问题,根据例子自己构建
  • 打赏
  • 举报
回复
Char*就用string就可以了
xian_wwq 2016-07-07
  • 打赏
  • 举报
回复
引用 8 楼 ido0926 的回复:
C++
HT706_READER_API READER_ERR EXTERN TagInventoryLoopAndSelect(int hReader, int antennaNum, char *antennaID,
	unsigned char codeSel, unsigned char tRext, unsigned char BLF, unsigned char FHSS, unsigned char tc,
	unsigned char loopNotChangeNum,unsigned char everyLoopIsdifferentNum,
	unsigned short inventoryTime, char *EpcSet, int *tagcnt,int *loops)
我写的是这样的: C#
 [DllImport("ModuleAPI.dll", EntryPoint = "TagInventoryLoopAndSelect", CharSet = CharSet.Auto, SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
        public static extern int ReadTags(Int16 hReader, Int16 antennaNum, string antennaID, byte codeSel, byte tRext, byte BLF, byte FHSS,
            byte tc, byte loopNotChangeNum, byte everyLoopIsdifferentNum, ushort inventoryTime, [Out]StringBuilder EpcSet, ref int tagcnt,ref int loops);
这个几对应的参数类型对不对呀?
如果是传入参数,使用string就可以, 如果要返回,使用stringbuilder,stringbuilder记得要初始化 CallingConvention 使用Cdecl还是Stdcall,取决于HT706_READER_API的定义
sinat_33289816 2016-07-06
  • 打赏
  • 举报
回复
C# 里面也有 char
南天空 2016-07-06
  • 打赏
  • 举报
回复
ref string ,网上有很多两种语言的类型对应的文章,楼主可以看一下。
Poopaye 2016-07-06
  • 打赏
  • 举报
回复
能把int转成Int16,你也是个人才
ido0926 2016-07-06
  • 打赏
  • 举报
回复
C++
HT706_READER_API READER_ERR EXTERN TagInventoryLoopAndSelect(int hReader, int antennaNum, char *antennaID,
	unsigned char codeSel, unsigned char tRext, unsigned char BLF, unsigned char FHSS, unsigned char tc,
	unsigned char loopNotChangeNum,unsigned char everyLoopIsdifferentNum,
	unsigned short inventoryTime, char *EpcSet, int *tagcnt,int *loops)
我写的是这样的: C#
 [DllImport("ModuleAPI.dll", EntryPoint = "TagInventoryLoopAndSelect", CharSet = CharSet.Auto, SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
        public static extern int ReadTags(Int16 hReader, Int16 antennaNum, string antennaID, byte codeSel, byte tRext, byte BLF, byte FHSS,
            byte tc, byte loopNotChangeNum, byte everyLoopIsdifferentNum, ushort inventoryTime, [Out]StringBuilder EpcSet, ref int tagcnt,ref int loops);
这个几对应的参数类型对不对呀?
巴士上的邂逅 2016-07-06
  • 打赏
  • 举报
回复
如果还不行,就把项目改成X86
巴士上的邂逅 2016-07-06
  • 打赏
  • 举报
回复
Cdecl改成StdCall
ido0926 2016-07-06
  • 打赏
  • 举报
回复
引用 3 楼 johnliuyuan 的回复:
用char[],然后编译平台选x86
我那个引用写的有没有问题大神给看看。
51Crack 2016-07-06
  • 打赏
  • 举报
回复
ref 或 out
john_QQ:2335298917 2016-07-06
  • 打赏
  • 举报
回复
用char[],然后编译平台选x86
ido0926 2016-07-06
  • 打赏
  • 举报
回复
引用 1 楼 yuankaiwsl 的回复:
报什么错??
调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
巴士上的邂逅 2016-07-06
  • 打赏
  • 举报
回复
报什么错??

111,106

社区成员

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

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

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