C++ BYTE * 对应C#什么类型??

beargo 2009-04-02 10:10:20
C++ BYTE * 对应C#什么类型??
现重做一个C#通信类库.其中有一接口参数是BYTE * ,调用程序(C++)必须是传入 BYTE * ,所以仅能在C#程序上改成是C++ BYTE * 的相应参数. 尝试过string,StringBuilder 生成出来的C0M转换的.tlh里的参数都不是BYTE *.烦请知道的大大们告知道~谢谢~
...全文
3113 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
beargo 2009-04-03
  • 打赏
  • 举报
回复
这个程序上是有的,这里测试简了.
终于测试成功,谢谢各位帮忙
Dobzhansky 2009-04-03
  • 打赏
  • 举报
回复
BYTE 指针只是一个字节流开始的地址, 这个字节流多长呢?

所以参数传递时,
对于BYTE 指针, 还需要一个长度相伴, 才完整
bobgu 2009-04-03
  • 打赏
  • 举报
回复
public void Show(byte[] c)
{
byte[] value = Encoding.Unicode.GetBytes("测试");
value.CopyTo(c, 0);
}

改成
public void Show(ref byte[] c)
{
byte[] value = Encoding.Unicode.GetBytes("测试");
value.CopyTo(c, 0);
}

beargo 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bobgu 的回复:]
string text = "传入的字符串";
unsafe
{
fixed (char* p = text) C++函数(new IntPtr(p));
}

注:C++函数传入接口最好转换成IntPtr类型。
如:
[DllImport("User32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
[/Quote]
楼上的理解反了,我是要在C++上调用C#的COM.然后C++是指定传BYTE*的.C#的COM接口必须配合它改成相应的类型.现在的问题是我不知道C#用什么类型才能是接收到C++传给我的BYTE*指针,然后给它写入值.让C++得到这个写入的正确值.
bobgu 2009-04-03
  • 打赏
  • 举报
回复
string text = "传入的字符串";
unsafe
{
fixed (char* p = text) C++函数(new IntPtr(p));
}

注:C++函数传入接口最好转换成IntPtr类型。
如:
[DllImport("User32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
beargo 2009-04-03
  • 打赏
  • 举报
回复
不行,每次读的值在变~~
jingzhongrong 2009-04-03
  • 打赏
  • 举报
回复
unsigned char* pValue=NULL; //BYTE
SafeArrayAccessData(pArray,(void**)&pValue);
long low = 0, high = 0;

hr=SafeArrayGetLBound(pArray,1,&low);
hr=SafeArrayGetUBound(pArray,1,&high);

SafeArrayUnaccessData(pArray);
beargo 2009-04-03
  • 打赏
  • 举报
回复
用byte[]参数的话,在生成的COM DLL转换成C++的.tlh 时它并不是BYTE * 而是SAFEARRAY *.怎么办?
beargo 2009-04-03
  • 打赏
  • 举报
回复

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace AddCom
{
[Guid("298D881C-E2A3-4638-B872-73EADE25511C")]
public interface AddComInterface
{
[DispId(1)]
void Show(StringBuilder b);
[DispId(2)]
void Show( byte[] c);
}
[Guid("2C5B7580-4038-4d90-BABD-8B83FCE5A467")]
[ClassInterface(ClassInterfaceType.None)]
public class AddComService : AddComInterface
{
public AddComService()
{
}
#region AddComInterface 成员

public void Show(StringBuilder b)
{
b.Append("测试");
}

public void Show(byte[] c)
{
byte[] value = Encoding.Unicode.GetBytes("测试");
value.CopyTo(c, 0);
}

#endregion
}
}


麻烦懂C++的兄弟帮个忙写读取Show的BYTE *数值指针的C++代码.
我不懂电脑 2009-04-02
  • 打赏
  • 举报
回复
BYTE[]
jingzhongrong 2009-04-02
  • 打赏
  • 举报
回复
byte[]

C++中的BYTE就是unsigned char,1个字节
C#中的字符默认都是unicode的,2个字节
Cnapollo 2009-04-02
  • 打赏
  • 举报
回复
byte[]
yinxiaowei823 2009-04-02
  • 打赏
  • 举报
回复
试试 byte[]
yangqidong 2009-04-02
  • 打赏
  • 举报
回复
byte b=(byte)65;
Test(ref b)

110,499

社区成员

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

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

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