问题描述
各位大家好.我在处理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);