问题描述
调用一个自己写的c++的dll,结果出现问题提示如下:“System.AccessViolationException”类型的未经处理的异常出现在BidingSystem_Client.exe中。其他信息:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。--------------------------------------------c#[DllImport("PEKS.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]//对明文进行加密staticexternvoidEnc(stringplain);----------------------------------------------c++voidEnc(stringplain){//模拟上传文件加密//加密文件charaes_key[33];Miraclprecision(16,0);ECnpoint_key;miracl*mip=&precision;point_key.iszero();aes_set(point_key,aes_key);//准备好aes的密钥,点密钥为point_key,字符串密钥为aes_keyintlen=plain.length();stringname=plain.substr(0,len-4);//获得去掉后缀的文件名stringcipher="ciphertext\"+name+".aes";//获得密文文件存储路径plain="plaintext\"+plain;aes_enc(plain,cipher,aes_key);//用aes加密ifstreamfile("plaintext\"+name+".key");stringkeyword;while(getline(file,keyword,'')){charword[80];//将string型的keyword转化为char*型的wordstrcpy(word,keyword.c_str());peks_enc(word,"ciphertext\"+name+".kw");//用PEKS加密关键词放在文件夹ciphertext中的.kw文件中}fIBE_enc(point_key,"ciphertext\"+name+".ak");//加密对称密钥aes_keyfile.close();}求各位大神的解答
解决方案
解决方案二:
c++不要用string
解决方案三:
那改成什么?char*么?
解决方案四:
该回复于2012-04-24 08:28:20被版主删除
解决方案五:
该回复于2012-04-24 10:49:02被版主删除
解决方案六:
引用1楼的回复:
c++不要用string
那看你要实现的功能是什么了给你个网站你可以参考下http://hi.baidu.com/meng7782002/blog/item/74c15fee4d2d7fc8b31cb190.html
解决方案七:
引用5楼的回复:
引用1楼的回复:c++不要用string那看你要实现的功能是什么了给你个网站你可以参考下http://hi.baidu.com/meng7782002/blog/item/74c15fee4d2d7fc8b31cb190.html
我进入dll中进行调试,发现在c#传过去的string参数进入dll中以后就变了,并非原本的string这是什么情况?代码还是上面那个