C++结构转C#结构遇到
尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
C++ DLL中的结构:
typedef struct
{
	LONG		cfHeight;		//字符高度
	LONG		cfWidth;		//字符宽度
	LONG		cfWeight;		//字符粗细
	LONG		cfSpacing;		//字符间距
	BOOL		cfItalic;		//斜体
	BOOL		cfUnderline;	//下划线
	BOOL		cfStrikeOut;	//删除线
	BOOL		bTransparent;   //透明
	COLORREF	cfBkColor;		//背景色  
	COLORREF	cfTextColor;	//前景色
	TCHAR		cfFaceName[32];	//字体名
}OSDPARAM;
转成C#:
   [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
         public struct OSDPARAM
         {
             public Int32 cfHeight;		//字符高度
             public Int32 cfWidth;		//字符宽度
             public Int32 cfWeight;		//字符粗细
             public Int32 cfSpacing;		//字符间距
             public bool cfItalic;		//斜体
             public bool cfUnderline;	//下划线
             public bool cfStrikeOut;	//删除线
             public bool bTransparent;   //透明
             public Color cfBkColor;	//背景色  
             public Color cfTextColor;	//前景色
             public Font cfFaceName;
         }
函数VCASetVidCapDateTimeOSDParam(m_pDev[1].stuOSDPARAM[0].OSDParam);使用OSDPARAM结构报异常:
结构转C#结构遇到尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
查了很多资料都没有结果哦?////!
------解决方案--------------------
你的Color和Font定义是使用.NET Framwork的定义吗?这个10有89有问题。
.NET下的对象直接列集应该不会和Native的代码兼容的,你应该自己写 Color和Font的定义。
------解决方案--------------------COLORREF 这个是个int,至于如何转换,看下面
http://www.west263.com/www/info/35183-1.htm
TCHAR这个我建议你搞成byte[]类型的,再根据需要用System.Text.Encoding里面的编码转换器来GetString
------解决方案--------------------我现在怀疑你可能要这么做:
先把cfFaceName声明成Int(或者IntPtr)
接着用Marshal.AllocHGlobal分配一个64字节的内存
接着把cfFaceName指向AllocHGlobal返回的那个 IntPtr(其实就是个指针),然后再传入
这里麻烦就麻烦在你的TCHAR,究竟你是算作char(C++里的char),还是wchar_t来用
如果你是char,.NET里面就是byte[], 如果你是wchar_t, .NET里是char[]
------解决方案--------------------还要提示一句就是你AllocHGlobal之后记得Marshal.FreeHGlobal ,其实就像C++你new了要delete一样