Hello, 

below is my experimental c# code to illustrate the original VB IIR2 example and 
the VExampleMA from the ADK. 
from the Amibroker side the object creation in AFL will be: 

myobj = CreateObject("csharp.amlib1"); 
//call method 
iir2 = myobj.IIR2(Close, 0.2,1.2,-0.4); 
//calling Windows Forms 
myobj.ShowDialog("AFL called me"); 

// c# below 
using System;
using System.Runtime.InteropServices;
namespace ClassLibrary3
{
    [
        Guid("16308AFC-FB7E-4cc6-9A3B-F47B99B7F18B"),
        InterfaceType(ComInterfaceType.InterfaceIsDual),
        ComVisible(true)
    ]
    public interface IMyAmPlugin1
    {
        [DispId(1)]
        string HelloAmibroker();
        [DispId(2)]
        int ShowDialog(string msg);
        [DispId(3)]
        object IIR2( object input, float f0, float f1, float f2);
        [DispId(4)]
        object MyExampleMA(object input, int range); 
    };
    [
        Guid("4328EB81-CFFF-423b-B1B4-D5B1F1AC76B7"),
        ProgId("csharp.amlib1"),
        ClassInterface(ClassInterfaceType.None),
        ComDefaultInterface(typeof(IMyAmPlugin1)),
        ComVisible(true)
    ]
    public class Class1 : IMyAmPlugin1
    {
        private const float EMPTY_VAL = -1e10f;
         public string HelloAmibroker()
        {
            return "Hello Amibroker, I'm from C#";
        }
        public int ShowDialog(string msg)
        {
 
            System.Windows.Forms.MessageBox.Show(msg, "");
            return 0;
        }
        public object IIR2(object input, float f0, float f1, float f2)
       {
            object[] inputArray = (object[]) input;
            object[] outputArray = inputArray;
            outputArray[0] = inputArray[0];
            outputArray[1] = inputArray[1];
            for (int i = 2; i < inputArray.Length; i++)
            {
               outputArray[i] = f0 * Convert.ToSingle(inputArray[i]) + 
                   f1 * Convert.ToSingle(outputArray[i - 1]) + f2 * 
Convert.ToSingle(outputArray[i - 2]);
            }
            return outputArray ;
        }
        private int SkipEmptyValues(int nSize, object[] srcArray, object[] 
result)
        {
            int i; 
            for (i = 0; i < nSize && (Convert.ToSingle(srcArray[i]) == 
EMPTY_VAL); i++)
            {
                result[i] = EMPTY_VAL;
            }
            return i; 
        }
        public object MyExampleMA(object input, int range)
        {
            object[] inputArray = (object[]) input;
            int nSize = inputArray.Length;
            object[] result = new object[nSize]; 
            int j = SkipEmptyValues(nSize, inputArray, result);
            for (int i = j; i < nSize; i++)
            {
                if (i < j + range)
                {
                    result[i] = EMPTY_VAL;
                    continue;
                }
                float sum = 0.0f;
                for (int k = 0; k < range; k++)
                {
                    sum += Convert.ToSingle(inputArray[i - k]);
                }
                result[i] = sum / range;
            }
            return result; 
        }
    }
}

Regards
SW



________________________________
From: Yofa <[email protected]>
To: [email protected]
Sent: Monday, May 4, 2009 4:06:32 AM
Subject: Re: [amibroker] Amibroker Plugin C# template? Anyone?





Hi Dan,

1. make the c# code a "COM visible" component.
2. Register it on the AB machine.
3. write c++ plugin to access it as a COM component. (Use ADK)

Y

------------ --------- --------- --------- --------- --
From: "ccr1der" <d...@hottuna. com>
Sent: Thursday, April 30, 2009 7:46 AM
To: <amibro...@yahoogrou ps.com>
Subject: [amibroker] Amibroker Plugin C# template? Anyone?

> Does anyone have a C# based template for AB plugins? Has anyone ever 
> compiled a C# plugin for AB? I have a very important piece of code in C# 
> that I need accessible from within AB, and while I'm not at all well 
> versed in C#, I'm willing to take a stab at trying to get this to work.... 
> but I need some kind of a starting point?
>
> Any help would be greatly appreciated. Thanks.
>
> -Dan
>
>
>
>
> ------------ --------- --------- ------
>
> **** IMPORTANT PLEASE READ ****
> This group is for the discussion between users only.
> This is *NOT* technical support channel.
>
> TO GET TECHNICAL SUPPORT send an e-mail directly to
> SUPPORT {at} amibroker..com
>
> TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
> http://www.amibroker.com/feedback/
> (submissions sent via other channels won't be considered)
>
> For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> http://www.amibroker.com/devlog/
>
> Yahoo! Groups Links
>
>
>
> 




      

Reply via email to