返回首页

在C#中如何使用C结构和方法吗?提供不同的数据类型的成员,在C的例子。

回答

评论会员:游客 时间:2012/02/04
Gajam苏雷什1759675:imgsrc=]
| Gajam苏雷什1759675:我提出这个问题提供几个例子,在C#中使用C方法。

例如基于一个小场景:我有一个C结构,这是在C的方法输出。我想在C#中使用此方法。
对于这一点,我必须创造一个相当于在C#中的结构和包装方法。返回的结构从C的指针。因此,我们赶上从C#和马歇尔的指针的指针结构。

enum CustomerType //C++ enum

    {

        Personal = 0,

        Corporate = 1

    };

 



  struct Customer //C++ structure

    {

		_TCHAR		CustomerName[50];

		_TCHAR		Address[250];

		INT32		CustomerNumber;

		CustomerType  	CustomerType;

		bool 		IsHandicapped;

	};

 



	//C++ method

	__declspec(dllexport) HRESULT ReadCustomer(LPCTSTR cNumber, LPVOID *pCustomer)

	{

		try

		{

			.....

			.....

			Customer* objCustomer = (Customer*)CoTaskMemAlloc(sizeof(Customer));

			......

			//Fill customer

			......

			*pCustomer = (LPVOID)(objCustomer);			

			return 0L;

		}

		catch(...)

		{

		}

	}
以上的C结构和方法是在本土"Customer.dll"的

{C}
我将实施的方法,使用这种包装,得到客户的详细信息和编组结构的指针。

 public Customer GetCustomerDetails(string cNumber, out bool bStatus)

{

 

	int result = -1;

            bStatus = false;

            IntPtr dataPtr = IntPtr.Zero;

            Customer objCustomer = new Customer();

            try

            {

                result = GetCustomerDetails(cNumber, out dataPtr);

                if (result == 0)

                {

                    objCustomer = (Customer)Marshal.PtrToStructure(dataPtr, typeof(Customer));

                    Marshal.FreeHGlobal(dataPtr);

                    bStatus = true;

                }

                else

                {

                    bStatus = false;

                }

            }

            catch (Exception ex)

            {

                Marshal.FreeHGlobal(dataPtr);

            }

            return objCustomer;

}

C和等价的C#方法的另一个例子。

EntryManager.dll包含以下方法:
{体C3}
等价的C#上面的方法是:
{的C4}
关于通知的一个不同的例子:当数据改变时,通知使用回调机制在C。我想在C#中使用相同的机制。当数据改变时,该通知应该调用C#的回调方法。
{C5的}


我已经提供了非常基本的信息和代码使用C方法和结构,在C#这是足够的了解这个主题
评论会员:游客 时间:2012/02/04
Prera​​k帕特尔:尝试使用CommandName和CommandArgument,,GridViewRowCommand事件。在这里我给的答案类似的类型,{A}]