C#中的byte[]对应C++中的什么

youjianwanlei 2010-03-22 05:18:26
C#中的byte[]对应C++中的什么,
 public static extern bool Read(Byte[] InBuf, int InBufSize, Byte[] OutBuf, int OutBufSize, uint ReCVLen);


C++ dll;
bool Read(BYTE* InBuf,int InBufSize,BYTE OutBuf,int OutBufSize,DWORD ReCVLen)



这样子编译没问题,运行后说尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

是不是参数写错了,该怎么写?

反正在vc中写read(inbuf,inbufsize,outbuf,outbufsize,&recvlen)
inbuf 和outbuf是byte数组, 在vc中是正确的我用过,

所有想做成dll,在c#中调用..
...全文
1394 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
十八道胡同 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 soaringbird 的回复:]

记住,调用前OutBuf要定义得足够大

[/Quote]
c++用了多少c#用多少就不可以了.
soaringbird 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 youjianwanlei 的回复:]

引用 25 楼 soaringbird 的回复:
,DWORD ReCVLen) 是不是应该是,DWORD* ReCVLen)?

恩,DWORD*,那对应什么uint*?写不来,所以不要*了。
[/Quote]

bool Read(BYTE* InBuf,int InBufSize,BYTE* OutBuf,int OutBufSize,DWORD* ReCVLen)


public static extern bool Read(Byte[] InBuf, int InBufSize, Byte[] OutBuf, int OutBufSize, ref uint ReCVLen);

记住,调用前OutBuf要定义得足够大
enaking 2010-03-23
  • 打赏
  • 举报
回复
c#的byte对应c++的char
youjianwanlei 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 soaringbird 的回复:]
,DWORD ReCVLen) 是不是应该是,DWORD* ReCVLen)?
[/Quote]
恩,DWORD*,那对应什么uint*?写不来,所以不要*了。
soaringbird 2010-03-23
  • 打赏
  • 举报
回复
,DWORD ReCVLen) 是不是应该是,DWORD* ReCVLen)?
youjianwanlei 2010-03-23
  • 打赏
  • 举报
回复
其实是想在c#调用DLL1的,反正很麻烦,要把DLL1的头文件写过,
所以想写DLL2,在DLL2中调用DLL1,然后我在C#中调用DLL2.
这样可以么?

关键就用到DLL1中的一个函数Read(要写入数据的缓存,写入的长度,读出数据的缓存,读出的长度,实际返回的长度);所以在DLL2中调用Read,最后在C#中调用DLL2,你说,数据会返回在OutBuf数组中吗?

youjianwanlei 2010-03-23
  • 打赏
  • 举报
回复
知道了, 你们都是对的。。。

是我dll中的错

extern "C" _declspec(dllexport) bool Read(char* InBuf, int InBufSize, char* OutBuf, int OutBufSize, DWORD RecvLen)
{
// DWORD tt= pXLow->readx(InBuf,InBufSize,OutBuf,OutBufSize,&RecvLen);
//

return true;
}


注释掉就没异常了。

youjianwanlei 2010-03-23
  • 打赏
  • 举报
回复
c++
bool Read(Char[] InBuf, int InBufsize, Char[] OutBuf, int OutBufSize, unsigned int ReCVLen);

error C2146: syntax error : missing ')' before identifier 'InBuf'

error C2146: syntax error : missing ';' before identifier 'InBuf'

fatal error C1004: unexpected end of file found
Baesky 2010-03-23
  • 打赏
  • 举报
回复
c#
bool Read(Byte[] InBuf, int InBufSize, Byte[] OutBuf, int OutBufSize, uint ReCVLen);

c++
bool Read(Char[] InBuf, int InBufsize, Char[] OutBuf, int OutBufSize, unsigned int ReCVLen);
youjianwanlei 2010-03-23
  • 打赏
  • 举报
回复
都试过了,。还是不行。、、

extern "C" _declspec(dllexport) bool Read(BYTE* InBuf,int InBufSize,BYTE* OutBuf,int OutBufSize,DWORD ReCVLen)



[DllImport("XLow.dll", EntryPoint = "Read")] public static extern bool Read(Byte[] InBuf, int InBufSize, out Byte[] OutBuf, int  OutBufSize,  uint ReCVLen);


调用:
Read(InBuf, 6,  out OutBuf,13 ,   RecvLen))
zhulinxiaofeng 2010-03-22
  • 打赏
  • 举报
回复
可以用char型数组的。
都是一个字节。
jackson35296 2010-03-22
  • 打赏
  • 举报
回复
bool Read(BYTE* InBuf,int InBufSize,BYTE OutBuf,int OutBufSize,DWORD ReCVLen)

在C#中DllImport的时候应该为
bool Read(IntPtr InBuf, int InBufSize, IntPtr OutBuf, int OutBufSize, uint32 RecvLen);
Alden 2010-03-22
  • 打赏
  • 举报
回复
char*
soaringbird 2010-03-22
  • 打赏
  • 举报
回复
public static extern bool Read(Byte[] InBuf, int InBufSize, Byte[] OutBuf, int OutBufSize, uint ReCVLen);
这么写是对的,不用什么ref和out.
出错可能是因为你分配的内存不够
youjianwanlei 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 baesky 的回复:]
引用 2 楼 youjianwanlei 的回复:

引用 1 楼 healer_kx 的回复:
C#的byte[] 对应的也是 C++ 的byte[] 或者 byte*

vc byte[]不让我过,弄Byte*是过了。

那怎么会说尝试读取或写入受保护的内存。这通常指示其他内存已损坏。

注意下数组的声明方式
c#是type【】XXX;
而c++ 是type XXX【】;……
[/Quote]

恩,好的、
mayonglong 2010-03-22
  • 打赏
  • 举报
回复
指针
--
maodehua718 2010-03-22
  • 打赏
  • 举报
回复
学学,顶下
Baesky 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 youjianwanlei 的回复:]

引用 1 楼 healer_kx 的回复:
C#的byte[] 对应的也是 C++ 的byte[] 或者 byte*

vc byte[]不让我过,弄Byte*是过了。

那怎么会说尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
[/Quote]
注意下数组的声明方式
c#是type【】XXX;
而c++ 是type XXX【】;
youjianwanlei 2010-03-22
  • 打赏
  • 举报
回复
返回的数据是放在outbuf里的
youjianwanlei 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 soaringbird 的回复:]
C/C++ code


bool Read(BYTE* InBuf,int InBufSize,BYTE OutBuf,int OutBufSize,DWORD ReCVLen)

第三个参数是不是写错了?
[/Quote]

恩,我第3个写byte*
是不是像你这样写就对了?
加载更多回复(9)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧