我的应用程序包含两个方面 - c ++上的客户端和c#上的服务器端。 我需要客户端接收具有最低延迟的结构。所以我希望它接收一个指向结构的指针并避免编组。结构是这样的:
struct OrderAction
{
OrderActionType actionType;
uint UserId;
int OrdersExecutorId;
int InstrumentId;
int StrategyId;
....
所以我想我想这样做:
将来我计划用c ++服务器端替换c#服务器端,所以我希望客户端完全独立。客户不应该知道它是从c#调用和使用的。
问题:
答案 0 :(得分:2)
您首先需要仔细检查您的结构是否是blittable。如果结构不是blittable,那么你不能避免某种形式的编组。根据情况,问题中的结构看起来像是blittable,给定您显示的字段,并假设OrderActionType
是enum
。
然后你只需要通过ref传递结构,它将被固定,然后固定的地址传递给本机代码。
在C ++方面,代码如下所示:
int __stdcall foo(OrderAction *orderAction)
{
....
}
在C#方面看起来像这样:
[DllImport(@"MyLib.dll")]
static extern int foo(ref OrderAction orderAction);
答案 1 :(得分:0)
这不可能像你描述的那样起作用。指针是内存参考。如果你有一个c#服务器,它保存结构,该结构是该机器上内存的本地结构。指针不能通过Web传递,并且仍然可以在另一台机器上使用,因为数据没有移动。
我会看看WCF在Windows世界中传递数据。如果这不起作用,如果这是基于Web的,则另一个选项是JSON。
答案 2 :(得分:0)
您可以做的是在要调用的本机C ++代码上编写C ++ / CLI包装器。
托管C ++ / CLI包装器可以提供一种方法,该方法对结构进行托管引用:
void DoStuff(OrderAction^ action)
{
//call in the native code
}
编辑:有关C ++ / CLI的一些基本信息(以防万一......)http://en.wikipedia.org/wiki/C%2B%2B/CLI