VS C ++ CLI事件到C# [英] VS C++ CLI event to C#

查看:70
本文介绍了VS C ++ CLI事件到C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一些示例代码

 命名空间 CppWrapper {
public delegate void OnStkQuote_Charp( double dPrice);
public delegate void OnDataOut (v_struct pData);

public ref class v_struct
{
public
float 新;
float 打开;
};
public ref class CppWrapperClass
{
public
CppWrapperClass();

静态 void OnStkQuot( struct STKDATA * pData)< - 循环回调
{
v_struct ^ vStruct = gcnew v_struct();
vStruct-> New = pData-> New;
vStruct-> Open = pData-> Open;

OnStkQuote_Charp ^ tmp1 = _Event;
if (tmp1){
tmp1-> Invoke(pData-> New);
}
OnDataOut ^ tmp = _DataOut;
if (tmp)
{
tmp-> Invoke(vStruct);
}
};
event OnStkQuote_Charp ^ OnQuote_Charp
{
void add (OnStkQuote_Charp ^ d){
_Event + = d;
}
void remove (OnStkQuote_Charp ^ d){
_Event - = d;
}
void raise( double dPrice){
OnStkQuote_Charp ^ tmp = _Event;
if (tmp){
tmp-> Invoke(dPrice);
}
}
}
事件 OnDataOut ^ OnData_Charp
{
void add (OnDataOut ^ d){
_DataOut + = d;
}
void remove (OnDataOut ^ d){
_DataOut - = d;
}
void raise(v_struct pData){
OnDataOut ^ tmp = _DataOut;
if (tmp){
tmp-> Invoke(pData);
}
}
}

私人
静态 OnDataOut ^ _DataOut;
static OnStkQuote_Charp ^ _Event;
};
}

XXX.h
C ++ struct

struct STKDATA
{
float 新;
float 打开;
}





我的尝试:



我想事件输出struct,我不能事件输出double / int / string但我不知道如何委托struct,也许这段代码是错误的......我怎么能修改这段代码?请帮忙谢谢〜

解决方案

首先使用double作为类型,因为它避免了混淆,在不同的语言中更精确和相同。



这些代表你可以设想一个变量,它们使用函数指针作为值。



设计的一些提示:< br $> b $ b

  public   delegate   void  OnStkQuote_Charp( double  newPrice, double  openPrice); 



你真正需要的是什么。不多,但更少。



如果我理解为股市用例,你最好有2个功能:

< pre lang =c#> public delegate void OnStkQuoteOpen_Charp( double openPrice); // 只有一个会话开盘价
public delegate void OnStkQuoteUpdate_Charp( double newPrice); // 永久更新





您应该从这篇文章


Some sample code

namespace CppWrapper {
	public delegate void OnStkQuote_Charp(double dPrice);
	public delegate void OnDataOut(v_struct pData);
	
	public ref class v_struct
	{
	public:
		float New;
		float Open;
	};
        public ref class CppWrapperClass
	{
	public:
			CppWrapperClass();
		
			static void OnStkQuot(struct STKDATA *pData) <-- loop callback
			{						
				v_struct^ vStruct = gcnew v_struct();	
				vStruct->New = pData->New;
				vStruct->Open = pData->Open;
							
                                OnStkQuote_Charp^ tmp1 = _Event;
				 if (tmp1) {
					 tmp1->Invoke(pData->New);
				 }
				OnDataOut^ tmp = _DataOut;
				if(tmp)
				{
					tmp->Invoke(vStruct);
				}	
			};			
		   event OnStkQuote_Charp^ OnQuote_Charp 
		   {
			  void add(OnStkQuote_Charp ^ d) {
				 _Event += d;
			  }
			  void remove(OnStkQuote_Charp ^ d) {
				_Event -= d;
			  }
			  void raise(double dPrice) {
				 OnStkQuote_Charp^ tmp = _Event;
				 if (tmp) {
					 tmp->Invoke(dPrice);
				 }
			  }
		   }					   
		   event OnDataOut^ OnData_Charp 
		   {
			  void add(OnDataOut ^ d) {
				 _DataOut += d;
			  }
			  void remove(OnDataOut ^ d) {
				_DataOut -= d;
			  }
			  void raise(v_struct pData) {
				 OnDataOut^ tmp = _DataOut;
				 if (tmp) {								 
					 tmp->Invoke(pData);
				 }
			  }
		   }
		
	private:
			static OnDataOut ^ _DataOut;
			static OnStkQuote_Charp ^ _Event;
	};
}

XXX.h
C++ struct

struct STKDATA 
{
	float	New;
	float	Open;			
}



What I have tried:

I want to event out struct,i cant event out double/int/string but i don't know how to delegate struct ,maybe this code is wrong .... How can i modifiy this code ? please help Thanks~

解决方案

At first use double as type, because it avoides confuses, is more precise and the same in the different languages.

These delegates you can imagine a variables which are using pointers to functions as as values.

Some tips for the design:

public delegate void OnStkQuote_Charp(double newPrice, double openPrice);


Is what you really need. Not more, but even less.

if I understand it right as stock market use case, you better served with 2 functions:

public delegate void OnStkQuoteOpen_Charp(double openPrice);//only one opening price a session
public delegate void OnStkQuoteUpdate_Charp(double newPrice);//permanent updates



A detailed example of such implementation you should fetch from this article.


这篇关于VS C ++ CLI事件到C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆