C#调用C++提示 无法封送处理“return value”: 无效的托管/非托管类型组合。

问题描述

各位大家好.我在处理C#调用C++dll的提示遇到这个问题还请大家指点一二.谢谢无法封送处理“returnvalue”:无效的托管/非托管类型组合。引发异常的源码是C#[DllImport("CDLL.dll",EntryPoint="EncData")]privatestaticexternchar[]EncData(char[]_in,char[]key);staticvoidMain(string[]args){try{byte[]_b=newbyte[3]{0xff,0xf1,0xf2};char[]_inp=_b.Select(x=>(char)x).ToArray();char[]_key=UTF8Encoding.Unicode.GetBytes("XML").Select(x=>(char)x).ToArray();char[]i=EncData(_inp,_key);}catch(Exceptionex){Console.WriteLine("!!!:"+ex);}}

C++部分的代码片段如下xxx.h_declspec(dllexport)unsignedchar*EncData(unsignedcharinput[],unsignedcharkey[]);xxx.cppunsignedchar*EncData(unsignedcharinput[],unsignedcharkey[])

解决方案

解决方案二:
求助..................................
解决方案三:
谁能保证char*指向的是什么呢?用c#来实现功能,能不用c++的时候一定不要用它。只调用极个别的通用的操作。
解决方案四:
C#安全性能太差所以核心的部分还是要用C++来处理因此才会需要C++的DLL所以还请指教这个部分的问题该如何处理
解决方案五:
返回char*这种肯定是不行的,写C++的人醉了吧,应该传入地址和长度,然后在C++中填充这个区域,并返回实际填充的字节数.
解决方案六:
...还请指教怎么修改
解决方案七:
把你的c++改成这样子intEncData(chr*_in,chr*key,chr*_out);

时间: 2024-11-03 06:11:18

C#调用C++提示 无法封送处理“return value”: 无效的托管/非托管类型组合。的相关文章

调用Delphi Dll 出现无法封送处理return value错误

问题描述 如题,以下是代码部分[DllImport("ftpdll.dll",EntryPoint="FtpServerDir",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]protectedstaticexternbyte[]FtpServerDir(IntPtrTHandle,byte[]FTPServer,byte[]DirName);///<summary>/

下面模块代码,拨号时无法封送处理类型为“RASDIALPARAMS95”的字段“szEntryName”: 无效的托管/非托管类型组合(Array 类型的字段必

问题描述 ImportsSystem.Runtime.InteropServicesModulelinkPublichRasConnAsInt32'定义一个指向RAS调用的全局句柄PublicConstAPINULLAsInt32=0&PublicConstUNLENAsInt32=256PublicConstDNLENAsInt32=15PublicConstPWLENAsInt32=256PublicConstRAS95_MaxPhoneNumberAsInt32=128PublicCons

C#调用VC++写的DLL时报错:无效的托管/非托管类型组合(Int16/UInt16 必须与 I2 或 U2 成对出现)

问题描述 函数原型:unsignedshortGX_GetMessageForWindows(unsignedshortWaitTime,PGX_MESSAGE_INFOpMessageBuffer)功能:获取USB语音盒的事件参数:WaitTime无意义,保留pMessageBuffer指向GX_MESSAGE_INFO结构的地址指针,用于存放返回的事件,GX_MESSAGE_INFO的结构定义如下:typedefstruct_GX_MESSAGE_INFO{USHORTMessageCode

.NET简谈互操作(七:数据封送之介绍)

互操作系列文章: .NET简谈互操作(一:开篇介绍) .NET简谈互操作(二:先睹为快) .NET简谈互操作(三:基础知识之DllImport特性) .NET简谈互操作(四:基础知识之Dispose非托管内存) .NET简谈互操作(五:基础知识之Dynamic平台调用) .NET简谈互操作(六:基础知识之提升平台调用性能) .NET简谈互操作(七:数据封送之介绍) 我们继续.NET互操作学习.互操作的基础知识已经差不多完了,当然一篇小小的文章很难全面的讲述互操作的方方面面,本人只是总结出关键的地

C#调用c++ dll 封送结构体数组,无法成功

问题描述 C#调用c++ dll 封送结构体数组,无法成功 c++代码: class qf { private: char *id; char *mc; float sd; int LX; }; 函数:int EntryPoint(qf *qfw); c#代码: public class qf { private string id; private string mc; private float sd; private int LX; }; c#调用: qf[] qfw = new qf[2

C#调用COM组件时的结构类型数据封送问题,报PInvoke 签名错误

问题描述 Com的idl[id(4),helpstring("methodStructureTest")]HRESULTStructureTest(MyPointa);结构申明typedefstructPoint{intx;inty;}MyPoint;C#中结构包装,函数包装[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]publicstructPoint{[MarshalAs(UnmanagedType.I4)]pu

CLR完全介绍: 托管代码与非托管代码之间的封送处理

让我们面对现实吧.这个世界并不完美.几乎很少有公司在完全用托管代码开发程序,除此之外仍存在很多需要您处理的旧式非托管代码.您怎样将托管和非托管项目集成起来呢?在形式上是采用从托管应用程序调用非托管代码,还是从非托管代码应用程序调用托管代码? 幸运的是,Microsoft .NET Framework 互操作在托管和非托管代码之间开辟了一条通道,而封送处理则在该连接中扮演着非常重要的角色,因为它允许在两者之间进行数据交换(请参见图 1).有很多因素会影响 CLR 在非托管和托管领域之间封送数据的方

加载微信的jssdk后,通过文档提供的wx对象调用,提示wx为undefined

问题描述 加载微信的jssdk后,通过文档提供的wx对象调用,提示wx为undefined <head> <meta charset=""utf-8""> <meta http-equiv=""X-UA-Compatible"" content=""IE=edge""> <meta name=""viewport"&

class-eclipse已经倒导入jar包可是调用还是提示错误

问题描述 eclipse已经倒导入jar包可是调用还是提示错误 我已經导入jar包了,可是该如何import才能使用包里面的class呢? 解决方案 突然就搞好了 我把调用的方式从print(""..."")改为Print.print(""blabla"")就好了 谢谢大家帮助 解决方案二: 参考 eclipse中几种加入jar包方式的区别 解决方案三: 我是导入了一个print包,但是里面的方法没办法调用,print.jar