Создание окна в 1с из C#
От: Urazik  
Дата: 09.06.10 10:07
Оценка:
Уважаемые специалисты, подскажите начинающему
Пишу внешнюю компоненту на C# для 1с (7.7).
Стоит задача создать окно внутри главного окна 1с (чтобы потом работать с этим окном из c#)
1сина загружает мою внешнюю компоненту, но при попытке создания окна выдает сообщение "Создание формы в 1С: В результате вызова компонента COM возвращена ошибка в формате HRESULT E_FAIL"

вот что получилось :
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Drawing;

namespace Создание_Формы_В_1С.AddInLib
{
    [Guid("AB634001-F13D-11d0-A459-004095E1DAEA"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IInitDone
    {
        void Init([MarshalAs(UnmanagedType.IDispatch)] object pConnection);
        void Done();
        void GetInfo([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] ref object[] info);
    }

    [Guid("EFE19EA0-09E4-11D2-A601-008048DA00DE"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IExtWndsSupport
    {
        void GetAppMainFrame(IntPtr pHWnd);
        void GetAppMDIFrame(IntPtr pHWnd);
        void CreateAddInWindow( string bstrProgID, string bstrWindowName, 
                                int lStyles, int lExStyles, 
                                System.Drawing.Size rctSize, int lFlags, 
                                IntPtr pHWnd,
                                [MarshalAs(UnmanagedType.IDispatch)] object pDisp);
    }
}




using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Создание_Формы_В_1С
{
    [ComVisible(true), Guid("DAFF3CBF-7E3D-475b-856A-4E2047AB8B56"), ProgId("AddIn.SimpleVK9")]
    public class HelloWorld : AddInLib.IInitDone
    {
        private static object m_1cApp;

        // IInitDone
        public void Init([MarshalAs(UnmanagedType.IDispatch)] object pConnection) {
            m_1cApp = pConnection;
            MessageBox.Show("Загружена компонента HelloWorld", "", MessageBoxButtons.OK);
        }

        public void Done() {
            MessageBox.Show("Выгружена компонента HelloWorld", "", MessageBoxButtons.OK);
        }

        public void GetInfo([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_VARIANT)] ref object[] info){
            info[0] = 2000;
        }

        // Создание окна в 1с
        public string Run() {

            AddInLib.IExtWndsSupport n;

            n = (AddInLib.IExtWndsSupport)m_1cApp;

            string bstrProgID = "AddIn.SimpleVK9";
            string bstrWindowName = "Тест";
            int lStyles = 0;
            int lExStyles = 0;
            System.Drawing.Size rctSize = new System.Drawing.Size();
            rctSize.Height = 10;
            rctSize.Width = 10;
            int lFlags = 0;
            IntPtr pHWnd = new IntPtr();
            object pDisp = null;

            n.CreateAddInWindow(bstrProgID, bstrWindowName,
                                lStyles, lExStyles,
                                rctSize, lFlags,
                                pHWnd,
                                pDisp);
            
            return "Hello 4 !!!!";
        }
    }
}


в самой 1с делаю так:


    ПодключитьВнешнююКомпоненту("AddIn.SimpleVK9");
    ВК = СоздатьОбъект("AddIn.SimpleVK9");
    Сообщить(ВК.Run());


Что неправильно?
Значит то ли интерфейс объявляю неправильно, то ли при вызове что-то не так.
visual studio .net
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.