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

问题描述

C++C++调用我是这样写的,然后总是报错参数不正确。C#请各位大神相助!!

解决方案

解决方案二:
报什么错??
解决方案三:
引用1楼yuankaiwsl的回复:

报什么错??

调用导致堆栈不对称。原因可能是托管的PInvoke签名与非托管的目标签名不匹配。请检查PInvoke签名的调用约定和参数与非托管的目标签名是否匹配。
解决方案四:
用char[],然后编译平台选x86
解决方案五:
ref或out
解决方案六:
引用3楼johnliuyuan的回复:

用char[],然后编译平台选x86

我那个引用写的有没有问题大神给看看。
解决方案七:
Cdecl改成StdCall
解决方案八:
如果还不行,就把项目改成X86
解决方案九:
C++HT706_READER_APIREADER_ERREXTERNTagInventoryLoopAndSelect(inthReader,intantennaNum,char*antennaID,unsignedcharcodeSel,unsignedchartRext,unsignedcharBLF,unsignedcharFHSS,unsignedchartc,unsignedcharloopNotChangeNum,unsignedchareveryLoopIsdifferentNum,unsignedshortinventoryTime,char*EpcSet,int*tagcnt,int*loops)

我写的是这样的:C#[DllImport("ModuleAPI.dll",EntryPoint="TagInventoryLoopAndSelect",CharSet=CharSet.Auto,SetLastError=true,CallingConvention=CallingConvention.Cdecl)]publicstaticexternintReadTags(Int16hReader,Int16antennaNum,stringantennaID,bytecodeSel,bytetRext,byteBLF,byteFHSS,bytetc,byteloopNotChangeNum,byteeveryLoopIsdifferentNum,ushortinventoryTime,[Out]StringBuilderEpcSet,refinttagcnt,refintloops);

这个几对应的参数类型对不对呀?
解决方案十:
能把int转成Int16,你也是个人才
解决方案十一:
refstring,网上有很多两种语言的类型对应的文章,楼主可以看一下。
解决方案十二:
C#里面也有char
解决方案十三:
引用8楼ido0926的回复:

C++HT706_READER_APIREADER_ERREXTERNTagInventoryLoopAndSelect(inthReader,intantennaNum,char*antennaID,unsignedcharcodeSel,unsignedchartRext,unsignedcharBLF,unsignedcharFHSS,unsignedchartc,unsignedcharloopNotChangeNum,unsignedchareveryLoopIsdifferentNum,unsignedshortinventoryTime,char*EpcSet,int*tagcnt,int*loops)

我写的是这样的:C#[DllImport("ModuleAPI.dll",EntryPoint="TagInventoryLoopAndSelect",CharSet=CharSet.Auto,SetLastError=true,CallingConvention=CallingConvention.Cdecl)]publicstaticexternintReadTags(Int16hReader,Int16antennaNum,stringantennaID,bytecodeSel,bytetRext,byteBLF,byteFHSS,bytetc,byteloopNotChangeNum,byteeveryLoopIsdifferentNum,ushortinventoryTime,[Out]StringBuilderEpcSet,refinttagcnt,refintloops);

这个几对应的参数类型对不对呀?

如果是传入参数,使用string就可以,如果要返回,使用stringbuilder,stringbuilder记得要初始化CallingConvention使用Cdecl还是Stdcall,取决于HT706_READER_API的定义
解决方案十四:
Char*就用string就可以了
解决方案十五:
举例C里面,方法:intmyMethod(char*c);//c可能是char指针变量;或者是char数组的首地址调用:charc="a";char*Point=&c;intI=myMethod(Point);或者,参数按数组传递charc[]=newchar[1];c[0]="a";intmyMethod(c);C#里面,[DllImport(……)]publicstaticexternintmyMethod(StringBuildersb);调用:StringBuildermySB=newStringBuilder();mySB.Append("a");intI=myMethod(mySB);以上是例子,你的问题,根据例子自己构建

时间: 2024-09-23 21:25:45

C++ char* 在C# 中用什么表示呢?  的相关文章

如何更改其它程序ListView控件中某个Item的内容

一:程序说明 这次我将介绍如何更改其他程序ListView控件中某个Item的内容,关于类似的拙文我已经写了两篇,这是第三篇,本篇和第一篇<如何向其他程序的 ListView 控件发送 LVM_GETITEMTEXT 消息>类似,区别在于: 发送的消息不同:前者是读取pszText的内容--发送LVM_GETITEMTEXT:这次是设置pszText,应该发送LVM_SETITEMTEXT: 字符串缓冲区的作用不同:前者pItem用来接收ITEMTEXT,我们可以通过ReadProcessMe

java初学者必看经典

配置java环境变量:          JAVA_HOME:配置JDK的目录          CLASSPATH:指定到哪里去找运行时需要用到的类代码(字节码)          PATH:指定可执行程序的位置                   LINUX系统(在" .bash_profile "下的环境变量设置)                   JAVA_HOME=/opt/jdk1.5.0_06                   CLASSPATH=.:$JAVA_HO

请问C++中用string输入的字符串,如何转换成char[100]的字符串呢?

问题描述 请问C++中用string输入的字符串,如何转换成char[100]的字符串呢? 请问C++中用string输入的字符串,如何转换成char[100]的字符串呢? 解决方案 http://www.aichengxu.com/view/48568 解决方案二: stl 中的string,提供了c_str的方法 函数原型如下 const char* c_str() const 所以你只能得到const char *类型,结尾,但是你非要变成char[100]的类型,你自己去memcpy吧,

strlen-c++中用vs2013时strcpy_s的问题

问题描述 c++中用vs2013时strcpy_s的问题 #include #include int main(){ using namespace std; char animal[20] = ""bear""; const char * bird = ""wren""; char * ps; cout << animal << "" and "";cout &

turbo c-在graphics.h图形库函数中用数字动态显示系统时间(高分悬赏,求大神)

问题描述 在graphics.h图形库函数中用数字动态显示系统时间(高分悬赏,求大神) 并增加一个时间(时分秒)值输入功能,根据新时间调整系统时间,并按照新的系统时间显示数字形式时间. 解决方案 #include <stdio.h> #include <graphics.h> #define PI 3.1416 #include "math.h" #include "dos.h" main() { int x0 = 320, y0 = 240

java-Java中用TreeSet方法排序字符型数字怎么排序啊,求指教,谢谢

问题描述 Java中用TreeSet方法排序字符型数字怎么排序啊,求指教,谢谢 public class Demo implements Comparable{ //String str; String str; /*public Demo(){ }*/ public Demo(String str){ this.str=str; } public void getStr(String str){ this.str=str; } public String setStr(){ return st

c-C语言中用fgets()函数,输入过多会导致程序自动关闭!!

问题描述 C语言中用fgets()函数,输入过多会导致程序自动关闭!! 就是这个代码,只要输入的字符数量超过9,程序就自动关了. #include int main(void) { char name[10]; char name2[100]; char* c; c = fgets(name,9,stdin); // printf("%s%s",name,c); getchar(); getchar(); getchar(); return 0; } 解决方案 不是越界...fgets

vc 中用strcpy函数遇到的问题

问题描述 vc 中用strcpy函数遇到的问题 小弟我在做strcpy函数的测试,代码如下 char pContent[20]; CString str = "qwertyuiopasdfghjklzxcvbnm1312311111111111111111111111111111111111111111111111111"; strcpy(pContent,str); AfxMessageBox(pContent); 我很疑问,问啥我定义了长度给20的数组,str的长度明显是大于20的

在vs2010中用c++写代码时将textbox的文本转换为double类型时总是出错

问题描述 在vs2010中用c++写代码时将textbox的文本转换为double类型时总是出错 double du = double.Parse(textBox5->Text); double dlje = double.valueOf(textBox4->Text); double dljn = atof(textBox3->Text); 错误: 错误 2 error C2062: 意外的类型"double" 错误 5 error C2062: 意外的类型&quo