请教C++中的一个结构体,怎么转到C#中
请高手将下面的代码转到C#中:struct A
{
byte DataLen;
byte Data;
byte Reserved;
}
struct B
{
A usA;
A usB;
volatileWORD usTxWrite;
volatileWORD UInt16 usTxRead;
volatileWORD UInt16 usRxWrite;
volatileWORD UInt16 usRxRead;
HANDLE usSend;
HANDLE usReceived;
CRITICAL_SECTION usCs;
void (*callback)(void);
} struct用class,callback用event C++中有byte类型吗?没见过 能力有限,只能写成这样了,不知道能不能用。
CRITICAL_SECTION 贴出来,没法写。
public struct A
{
public Byte DataLen;
public byte[] Data;
public byte[] Reserved;
}
struct B
{
public A[] usA;
public A[] usB;
public ushort usTxWrite;
public UInt16 usTxRead;
public UInt16 usRxWrite;
public UInt16 usRxRead;
IntPtr usSend;
IntPtr usReceived;
public CRITICAL_SECTION usCs;
public delegate void callback();
}
public struct CRITICAL_SECTION
{
} 这种转换关键看你要不要把这个用于平台调用(pinvoke),如果需要把内存块传递给原生代码那就要严格的布局一致;如果完全在托管CLR代码内使用,随便怎么写都可以! 小溪 发表于 2019-3-13 06:16
C++中有byte类型吗?没见过
typedef unsigned char BYTE; q457344370 发表于 2019-3-13 02:51
struct用class,callback用event
能否举个例子?
还有谢谢你上次的提醒,kvaser我已经弄好了。c#现在遇到新的困难了。。。 pursuits 发表于 2019-3-13 09:51
能力有限,只能写成这样了,不知道能不能用。
CRITICAL_SECTION 贴出来,没法写。
谢谢,CRITICAL_SECTION是C++内部封装库里面的,
typedef RTL_CRITICAL_SECTION CRITICAL_SECTION;
typedef struct _RTL_CRITICAL_SECTION {
PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
//
//The following three fields control entering and exiting the critical
//section for the resource
//
LONG LockCount;
LONG RecursionCount;
HANDLE OwningThread; // from the thread's ClientId->UniqueThread
HANDLE LockSemaphore;
DWORD SpinCount;
} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
难道要全部搬过来? armstrong 发表于 2019-3-13 14:44
这种转换关键看你要不要把这个用于平台调用(pinvoke),如果需要把内存块传递给原生代码那就要严格的布局 ...
太专业了,小白表示没理解。。。 推荐 LZ 看一下《精通.NET互操作》,网上有 PDF 电子版的
了解数据封送的一些基础知识后,以后这类问题就都能解决了
wudicgi 发表于 2019-3-13 23:25
推荐 LZ 看一下《精通.NET互操作》,网上有 PDF 电子版的
了解数据封送的一些基础知识后,以后这类问题就都 ...
非常感谢,非常感谢。 armstrong 发表于 2019-3-13 14:44
这种转换关键看你要不要把这个用于平台调用(pinvoke),如果需要把内存块传递给原生代码那就要严格的布局 ...
您好,我用【Dllimport dll】方式调用了C++的函数,可是执行下来运行速度反而比VC慢很多,是怎么回事? zw_7627 发表于 2019-6-17 23:52
您好,我用【Dllimport dll】方式调用了C++的函数,可是执行下来运行速度反而比VC慢很多,是怎么回事? ...
不要频繁的调用原生函数,应该减少调用次数;而每次调用的原生函数应尽量多地做事。
每次平台调用,都是一个资源分配和数据拷贝的交互过程,会有资源和性能消耗。 小溪 发表于 2019-3-13 06:16
C++中有byte类型吗?没见过
C++中的unsigned char就是C#byte armstrong 发表于 2019-6-18 15:54
不要频繁的调用原生函数,应该减少调用次数;而每次调用的原生函数应尽量多地做事。
每次平台调用,都是 ...
请教下关于C#线程同步的问题,我开了一个线程下载,需要在另一个接收线程里执行一个set();我在下载线程用了waitone,但实际是接收线程里的set()并未执行,请问下是什么原因?
页:
[1]