private void button1_Click(object sender, EventArgs e)
{
IntPtr key = Marshal.AllocHGlobal(1024);
//Marshal.ReleaseComObject(GenerateKeyEx);
uint len = 4;
string seed = "abcd";
uint slen = (uint)seed.Length;
uint sl = 1;
uint keylen = 1024;
int r = GenerateKeyEx(seed, slen, sl, "car", ref key, keylen, len);
MessageBox.Show(key.ToString());
}
[DllImport("GenerateKey.dll",EntryPoint="GenerateKeyEx",CharSet=CharSet.Ansi,SetLastError=true,CallingConvention=CallingConvention.ThisCall)]
public static extern int GenerateKeyEx(string ipSeedArray, uint iSeedArraySize,
uint iSecurityLevel, string ipVariant, ref IntPtr iopKeyArray, uint iMaxKeyArraySize, uint oActualKeyArraySize);
关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率

已采纳
c#调用c++写的dll报错,尝试写入受保护的内存。。。求解答
收起
- 写回答
- 好问题 0 提建议
- 关注问题
微信扫一扫
点击复制链接分享
- 邀请回答
- 编辑 收藏 删除 结题
- 收藏 举报
5条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
Meteor_J 2015-11-21 08:54关注指针操作肯定有问题。
本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报微信扫一扫
点击复制链接分享
编辑预览轻敲空格完成输入- 显示为
- 卡片
- 标题
- 链接
评论按下Enter换行,Ctrl+Enter发表内容
编辑
预览

轻敲空格完成输入
- 显示为
- 卡片
- 标题
- 链接
报告相同问题?
提交
- 2021-08-14 02:34回答 2 已采纳 dll中是不是占用了其他资源没释放,检查C++代码。参考: C#调用c++的dll报错:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏“ - 亲福 - 博客园 一:c++代码内部报错引
- 2023-02-28 11:26回答 1 已采纳 该回答引用ChatGPT 要了解C#调用C++的整个过程,建议按照以下步骤逐步学习: 了解C#和C++的基本语法和编程概念。了解它们各自的特点,包括语法、数据类型、内存管理等。 了解C#和C++之间
- 2022-07-27 12:08回答 1 已采纳 已经解决了。
- 2018-04-27 11:54weixin_30855099的博客 原因:C#中的声明函数的参数类型与C++的函数的参数类型不一致,在参照C#与C++的参数类型对照表以后,修改相应参数类型,问题解决 转载于:https://www.cnblogs.com/BlogLwc/p/8964192.html...
- 2022-11-01 09:27回答 8 已采纳 自己电脑上打开软件,用Process Explorer查看软件加载的dll,把运行库相关的复制出来放软件目录,一般是同一个路径。
- 2018-08-15 07:49回答 1 已采纳 只有C++ CIL类型的项目,才可以调用C#的命名空间。首先确认下你的项目类型。 其次,检查下你C#代码中namespace的名字是不是Invoke,注意是命名空间名,不是dll名字或者项目名字。注
- 2023-03-17 01:29回答 4 已采纳 参考GPT和自己的思路: 根据你提供的代码和描述,可能的问题有以下几点: C++动态库的声明和定义不匹配 在C++动态库中声明和定义的函数需要和C#代码调用时的参数类型和返回类型一致,否则会报类型不匹
- 2019-08-16 05:06张小跑跑的博客 1.尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 经过多次测试,查找资料,原因是 C++ 写的 DLL 数据类型 不能直接用 string 类型,换成 char* 就好了; 2.对 PInvoke 函数“ConsoleTest!ConsoleTest...
- 回答 1 已采纳 文件没有找到,你dll exe放在相同的目录里面看看
- 2020-03-09 01:31回答 4 已采纳 BYTE bNodeaddr[6]; DWORD dwIp; 这两个写反了 而且考虑到数据对齐,bNodeaddr可能占用的是8个字节,具体你调试的时候看下内存
- 2022-05-06 12:41回答 3 已采纳 关于 DWORD 我有话要说
- 2020-10-26 04:23在编程和软件开发过程中,有时会遇到“尝试读取或写入受保护的内存”的错误,这通常是由于内存管理问题导致的。此错误表明程序试图访问的内存区域可能已被操作系统标记为不可读或不可写,这往往暗示着内存损坏或其他...
- 2019-05-08 14:11Hui_R_Q_XIONGDA的博客 我的是参数调用错误 原来是这样的 [DllImport("face_eye_nose_mouse.dll", CallingConvention = CallingConvention.Cdecl)] public static extern int eye_nose_mouse_detect(string pathname); eye_nose_mouse...
- 2019-02-22 06:24qq_25528267的博客 【原因1】 C++和C#的参数类型对应问题(详细内容参考...如C++: bool __declspec(dllimport) getImage(unsigned char** ppImage, int& nWidth, int& nHeight); 对应C#成: [DllImport(“tes...
- 2020-06-29 03:50Fhb_2018的博客 今天在C#中调用了C++dll中的方法,这个方法中包括了两个参数,其中一个参数是一个结构体,在定义这个方法的时候,忘记在结构体参数前边添加 “ref” 所以导致异常。参考了这篇文章...
- 没有解决我的问题, 去提问
联系我们(工作时间:8:30-22:00)
400-660-0108kefu@csdn.net在线客服
- 京ICP备19004658号
- 经营性网站备案信息
公安备案号11010502030143
- 营业执照
- 北京互联网违法和不良信息举报中心
- 家长监护
- 中国互联网举报中心
- 网络110报警服务
- Chrome商店下载
- 账号管理规范
- 版权与免责声明
- 版权申诉
- 出版物许可证
- ©1999-2025北京创新乐知网络技术有限公司