c#-C#调用C DLL(char *传出参数)时,报错参数不匹配

问题描述

C#调用C DLL(char *传出参数)时,报错参数不匹配
public class LLht
{

    //手持机下载上传    [DllImport(""llht.dll"" CallingConvention = CallingConvention.StdCall CharSet = CharSet.Ansi SetLastError = true ExactSpelling = true)]    public static extern int llht_down(string PCFile string HTFile int port int baud int SerialNO);    [DllImport(""llht.dll"" CallingConvention = CallingConvention.StdCall CharSet = CharSet.Ansi SetLastError = true ExactSpelling = true)]    public static extern int llht_up(string PCFile string HTFile int iPort int iBaud int iSerialNo);    //取得HT 的文件放在FILEBUFF 中 每个文件的长度不超过12字节,返回是文件的数目      [DllImport(""ht32dll.dll"" CallingConvention = CallingConvention.Cdecl CharSet = CharSet.Ansi SetLastError = true ExactSpelling = true)]    public static extern long GetHtFile(ref byte filebuff uint iPort long iBaud);    }

这就是DLL的入口函数,没有DLL的头文件,注释也只有那一行,long GetHtFile(char * filebuff unsigned int iPort long iBaud);这是函数原型。
调用代码如下:

        string name = ""000000000000"";        byte[] filename = new byte[12];        for (int i = 0; i < name.Length; i++)        {            filename[i] = (byte)name[i];        }        long read = LLht.GetHtFile(ref filename[0] comid 57600);//此行报错        MessageBox.Show(read + "":"" + filename[0].ToString());

报错内容为:对 PInvoke 函数“数据审核!数据审核.LLht::GetHtFile”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

求助各位大神

时间: 2024-09-23 12:14:21

c#-C#调用C DLL(char *传出参数)时,报错参数不匹配的相关文章

c++-C#调用C++生成的dll时,报错参数不匹配

问题描述 C#调用C++生成的dll时,报错参数不匹配 C++代码 int WINAPI ilbc_encoder(short pin,unsigned char pout) { int k; float block[BLOCKL_MAX]; /* convert signal to float */ for (k=0; k<iLBCenc_inst.blockl; k++) block[k] = (float)pin[k]; /* do the actual encoding */ iLBC_

c# 调用vc++写的动态库 时含有指针参数时的问题

问题描述 c#调用vc++写的动态库时含有指针参数时的问题[DllImport("yhybReckoning.dll",EntryPoint="_DataDown_sp@12",CharSet=CharSet.Unicode,CallingConvention=CallingConvention.Cdecl)]publicstaticunsafeexternstringDataDown_sp(stringDownLoadStr,stringDownloadLSH,r

指令-VC6.0中dll创建失败,编译报错怎么处理

问题描述 VC6.0中dll创建失败,编译报错怎么处理 VC6.0环境,创建DCOM的服务器. 想要生成一个dll文件,在project setting里面输入了指令 然后就出现了编译错误 这个怎么破?求各位大神解答! 解决方案 -f是参数吧,中间缺少空格. 解决方案二: nmake命令路径是否正确,是否PATH环境变量中.跟参数之间要有空格.

c# 4 0-引用第三方dll文件,重新生成报错

问题描述 引用第三方dll文件,重新生成报错 警告 39 预定义类型"System.Runtime.CompilerServices.ExtensionAttribute"是在全局别名的多个程序集中定义的:将使用"c:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.5mscorlib.dll"中的定义 解决方案 解决方式是:"删除 Newtonsoft.Jso

new FileInputStream(file)参数类型报错

问题描述 new FileInputStream(file)参数类型报错 大侠们,我new一个FileInputStream的时候,传了一个File类型,但是myeclipse一直让我把参数类型改成String,我看FileInputStream类里有传File的构造方法啊,请问这是为什么??还是说不管他0.0 private void copy(File src,File dst){ InputStream in = null; OutputStream out = null; try { i

vc++-新人求帮助:VC6 调用delphi编写的com组件函数 报错

问题描述 新人求帮助:VC6 调用delphi编写的com组件函数 报错 代码: IElectric *ptr = NULL; CLSID clsid; HRESULT hr = CLSIDFromString((LPOLESTR)L"{18F86FFB-158B-42D6-9203-C4197A4E76FE}",&clsid); hr = CoInitialize(0); if(!SUCCEEDED(hr)) { int nCode = GetLastError(); } h

web服务-app 调用webservice的图片上传接口报错

问题描述 app 调用webservice的图片上传接口报错 以下为c#写的图片上传接口,图片是在app转为base64的:而当在服务上测试时是可以上传,即下图的位置 可是在app调用该接口时却出错,这是为什么,困扰了多天了.请大神帮忙哈 public JObject UploadPicture(string jsonString) { JToken Picture; JObject jobject = JObject.Parse(jsonString); Picture = jobject.G

android 调用webService 时 报错

问题描述 导入包wsdl4j.jar和jaxrpc.jar就会报错,publicstaticStringInvokerWeb(Stringa,Stringb,Stringc,Stringendpoint){Stringresult="";try{org.apache.axis.client.Serviceservice=neworg.apache.axis.client.Service();org.apache.axis.client.Callcall=(org.apache.axis

调用C++dll,需要传入一个函数指针,函数参数含有数组指针,用于传回数据,怎么老说我访问内存非法呀.

问题描述 C++dll代码回掉函数类型:voidcallback(BYTE*data,intnlen)//DLL设置回调函数voidSetCallBackFunc(CALL_BACK_FUNCcallback){m_callback=callback;}//dll调用回掉函数向C#传回数据voidStartDll(){BYTEbtData[100];for(bytei=0;i<100;i++){btData[i]=i;}m_callback(btData,100);//将数据通过回掉函数传回C#