社区
C#
帖子详情
C#调用C++动态链接库报内存错误
chenwangfeng
2012-10-14 05:30:07
C#调用C++的一个动态链接库,调用的方法有一个参数是结构体,我在C#中也声明了结构体,但是每次调用都会报尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 是不是我在C#中声明的结构体与C++的结构体数据类型不一致导致的?
...全文
255
12
打赏
收藏
C#调用C++动态链接库报内存错误
C#调用C++的一个动态链接库,调用的方法有一个参数是结构体,我在C#中也声明了结构体,但是每次调用都会报尝试读取或写入受保护的内存。这通常指示其他内存已损坏。 是不是我在C#中声明的结构体与C++的结构体数据类型不一致导致的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
__天涯寻梦
2012-10-15
打赏
举报
回复
假设你的 NAME_LEN 和 PASSWD_LEN 没错,还有两处
char sDVRIP[16];
WORD wDVRPort;
对应
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[] sDVRIP;
public ushort wDVRPort;
chenwangfeng
2012-10-15
打赏
举报
回复
那我这个C++的结构体转换应该怎么写呢?如果C++的结构体中再套结构体的数组,我的C#中应该怎么进行转换?
chenwangfeng
2012-10-15
打赏
举报
回复
这是我调用的海康的SDK中的方法
chenwangfeng
2012-10-15
打赏
举报
回复
还是不行,尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
owennol
2012-10-15
打赏
举报
回复
某家硬盘录像机的SDK吧:)
public int wDVRPort;
改成
public ushort wDVRPort;
其他应该都是正确的。。。
qldsrx
2012-10-14
打赏
举报
回复
数组不恶心,数组最高,数组万岁。
楼主转换前没有看数据类型对应,C++的char 类型,只能对应byte(单字节),C#的char是双字节的,长度就不一样了。
Yumichika
2012-10-14
打赏
举报
回复
这么说吧
我当年做C#调用DLL的时候就发现
最恶心的就是结构体中含有数组
理论上像LZ这么写应该是可以的 但就是不能跑...
因为C#和C++的数组结构是完全不一样的 具体怎么个不一样法儿也找不到靠谱的资料
如果可以修改C++源代码的话
比较好的方法是(也就是我当年采用的) 自己来强制规定结构体的内存分配
或者最原始的方法 把结构体转成STRING来传递
chenwangfeng
2012-10-14
打赏
举报
回复
自己顶顶,有没有大侠指教下啊!
chenwangfeng
2012-10-14
打赏
举报
回复
郁闷,代码发错了
C++的
struct{
char sDVRIP[16];
WORD wDVRPort;
BYTE byChannel;
BYTE byTransProtocol;
BYTE byTransMode;
BYTE byRes[3];
BYTE sUserName[NAME_LEN];
BYTE sPassword[PASSWD_LEN];
}NET_DVR_MATRIX_DECINFO, *LPNET_DVR_MATRIX_DECINFO;
下面是C#的 public struct NET_DVR_MATRIX_DECINFO
{
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)]
public char[] sDVRIP;
public int wDVRPort;
public byte byChannel;
public byte byTransProtocol;
public byte byTransMode;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 3)]
public byte[] byRes;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] sUserName;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[] sPassword;
}
这是我C#声明的,有哪里不对吗?请大侠赐教
SocketUpEx
2012-10-14
打赏
举报
回复
看不懂
但有一点可以肯定的是:这是两个完全不一样的结构
chenwangfeng
2012-10-14
打赏
举报
回复
struct{
DWORD dwSize;
NET_DVR_MATRIX_DECINFO struDecChanInfo;
DWORD dwDecState;
NET_DVR_TIME StartTime;
NET_DVR_TIME StopTime;
char sFileName[128];
}NET_DVR_MATRIX_DEC_CHAN_INFO,*LPNET_DVR_MATRIX_DEC_CHAN_INFO;
这是C++的结构体
public struct NET_DVR_MATRIX_DECINFO
{
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)]
public char[] sDVRIP;
public int wDVRPort;
public byte byChannel;
public byte byTransProtocol;
public byte byTransMode;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 3)]
public byte[] byRes;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 32)]
public byte[] sUserName;
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 16)]
public byte[] sPassword;
}
这是我C#声明的,有哪里不对吗?请大侠赐教!
SocketUpEx
2012-10-14
打赏
举报
回复
[Quote=引用楼主 的回复:]
是不是我在C#中声明的结构体与C++的结构体数据类型不一致导致的?
[/Quote]
应该是的
创建和使用
动态
链
接
库
(C++)
C#
调用
创建和使用
动态
链
接
库
(C++)
C#
调用
创建和使用
动态
链
接
库
(C++)
C#
调用
创建和使用
动态
链
接
库
(C++)
C#
调用
C#
DllImport DLL非托管
动态
链
接
库
问题总结
C#
程序实现
动态
调用
DLL的研究(转载) - 黄金海岸 - 博客园 (cnblogs.com)https://www.cnblogs.com/goldenocean/archive/2006/09/20/509558.html
C#
调用
c++ dll 尝试读取或写入受保护的
内存
错误
-CSDN社区https://bbs.csdn.net/topics/340067302步骤: 1,确定是托管
动态
链
接
库
还是非托管
动态
链
接
库
; 2,如为C++ 等非托管
动态
链
接
库
:首先确定 C++ DLL的导出类型是否.
《
C#
语言入门 - 学习笔记 -
C#
调C/C++(Dll)方法总结》
文章目录前言一、基础知识1. 结构体对齐1.
内存
对齐2.
调用
约定3.
C#
与C/C++类型对应关系2. 创建并
调用
动态
链
接
库
3. Dllimport常用参数二、实例
调用
1.
C#
与Dll链
接
库
的数据交换1. 基本数据类型2. 数组(引用传递)3. 结构体2. C++回调
C#
前言 视频资源:B站:
C#
与C/C++
动态
链
接
库
本篇对
C#
与C/C++
动态
链
接
库
做一个小结。 一、基础知识 1. 结构体对齐 1.
内存
对齐 定义: 计算机系统对基本数据类型合法地址做出一些限制,要求某些类型地址必须是某
C++
调用
C#
编译的
动态
连
接
库
最近老板说要试下google的语音识别,于是上网找了一些代码,最多的一篇就是
C#
调用
Google语音识别。 下载过来运行,前面几天一直是服务器内部500
错误
。 以为代码问题,今天又试了一下,居然可以用了(不知道什么原因。。)。 由于需要在C++上用,偷懒的办法就是C++
调用
C#
动态
链
接
库
,下面是过程: 1. 编译
c#
动态
链
接
库
新建
C#
项目,选择“类
库
”。 代码如下:usin
c#
调用
c++
动态
链
接
库
c#
调用
c++
动态
链
接
库
dll
C#
109,897
社区成员
642,645
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章