Передача переменной activex'у javascript
От: corpse56  
Дата: 09.04.09 07:43
Оценка:
Здравствуйте!
На C# написал свой activex компонент. зарегистрировал его в GAC и на вебстранице вызываю его на javascript:

function crape()
    {
        var objDownload = new ActiveXObject( "xotel.Download" );
        try
        {
            objDownload.InvokeMethod();
        }
        catch(exception) {
            alert( "Failed" );
        }
    };


все рабоает, но хочется передавать строку или целое или массив в метод InvokeMethod(). как это должно выглядеть в c# коде и в javascript?
вот код самого компонента:

namespace xotel
{
    [Guid("D187ADDA-86E8-479b-96C7-AEF36C382764")]
    interface IDownload
    {
        void InvokeMethod();
    }
    /// 
    /// COM exposed .Net class.
    ///
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [Guid("72D4D996-C909-46cc-88E4-81C471EAD56A")]
    public class Download : IDownload
    {
        ///
        /// COM exposed .Net Method.
        ///
        public void InvokeMethod()
        {
            System.Windows.Forms.MessageBox.Show("сюда хочу выводить то что передается из javascript", "!", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }


нашел только http://www.nathanm.com/activex-javascript-and-bstr/, но что-то ссылка там не работает и ничего там не понял...

сам пример взят отсюда http://www.codeproject.com/KB/cs/C__Deployment.aspx

никак не могу найти как передавать переменные activex компоненту...
спасибо.
Re: Передача переменной activex'у javascript
От: corpse56  
Дата: 09.04.09 11:08
Оценка:
сам отвечаю на свой вопрос. все проще некуда.


function crape()
    {
        var objDownload = new ActiveXObject( "xotel.Download" );
        try
        {
            objDownload.InvokeMethod("im string");
        }
        catch(exception) {
            alert( "Failed" );
        }
    };


namespace xotel
{
    [Guid("D187ADDA-86E8-479b-96C7-AEF36C382764")]
    interface IDownload
    {
        void InvokeMethod(string fromjavas);
    }
    /// 
    /// COM exposed .Net class.
    ///
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [Guid("72D4D996-C909-46cc-88E4-81C471EAD56A")]
    public class Download : IDownload
    {
        ///
        /// COM exposed .Net Method.
        ///
        public void InvokeMethod(string fromjavas)
        {
            System.Windows.Forms.MessageBox.Show(fromjavas, "!", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }


а я начал городить:
void InvokeMethod([In][MarshalAs(UnmanagedType.BStr)] string prs);

и все думал почему же не срабатывает. а оказалось дело в том что у меня solution под названием xotel есть 2 проекта: xotel и setup проект, который и инсталлирует мою dll. я каждый раз после изменений инсталлировал и думал что изменяется. но изменения не происходили пока не воспользуешься gacutil вручную. как сделать так чтобы gacutil регистрировал xotel.dll при запуске setup'a?
Re[2]: Передача переменной activex'у javascript
От: corpse56  
Дата: 09.04.09 13:04
Оценка:
Здравствуйте, corpse56, Вы писали:

C>сам отвечаю на свой вопрос. все проще некуда.



возникла другая проблема! русские буквы передаются ероглифами!
Re[3]: Передача переменной activex'у javascript
От: corpse56  
Дата: 09.04.09 13:20
Оценка:
Здравствуйте, corpse56, Вы писали:

C>Здравствуйте, corpse56, Вы писали:


C>>сам отвечаю на свой вопрос. все проще некуда.



C>возникла другая проблема! русские буквы передаются ероглифами!



       string preop = "Строка";
       link.NavigateUrl = "JavaScript:PrintDemand('" + preop + "');";


когда кликаешь на ссылку вызывается эта функция и первый оператор в ней: alert(preop); выводит иероглифы!
что тут не так?
Re[4]: Передача переменной activex'у javascript
От: corpse56  
Дата: 09.04.09 13:26
Оценка:
Здравствуйте, corpse56, Вы писали:

C>Здравствуйте, corpse56, Вы писали:


C>>Здравствуйте, corpse56, Вы писали:


C>>>сам отвечаю на свой вопрос. все проще некуда.



C>>возникла другая проблема! русские буквы передаются ероглифами!



C>
C>       string preop = "Строка";
C>       link.NavigateUrl = "JavaScript:PrintDemand('" + preop + "');";
C>


C>когда кликаешь на ссылку вызывается эта функция и первый оператор в ней: alert(preop); выводит иероглифы!

C>что тут не так?

причем в ФФ все по-русски, а в ИЕ7 все в иероглифах, а мне нужен именно ИЕ, потому что использую activex.
кстати если есть возможность использовать принтер через ФФ (не печать страницы, как то — файл->печать, а печать этикеток через принтер zebra) и работать со сканером штрихкода через ФФ по COM интерфейсу — подскажите! с удовольствием отказался бы от ИЕ...
спасибо за любую помощь!
Re[5]: Передача переменной activex'у javascript
От: corpse56  
Дата: 22.04.09 06:36
Оценка:
C>>
C>>       string preop = "Строка";
C>>       link.NavigateUrl = "JavaScript:PrintDemand('" + preop + "');";
C>>


C>>когда кликаешь на ссылку вызывается эта функция и первый оператор в ней: alert(preop); выводит иероглифы!

C>>что тут не так?

C>причем в ФФ все по-русски, а в ИЕ7 все в иероглифах.


anybody?
Re[6]: Передача переменной activex'у javascript
От: Stuw  
Дата: 22.04.09 08:01
Оценка:
Здравствуйте, corpse56, Вы писали:

C>>>
C>>>       string preop = "Строка";
C>>>       link.NavigateUrl = "JavaScript:PrintDemand('" + preop + "');";
C>>>


C>>>когда кликаешь на ссылку вызывается эта функция и первый оператор в ней: alert(preop); выводит иероглифы!

C>>>что тут не так?

C>>причем в ФФ все по-русски, а в ИЕ7 все в иероглифах.


C>anybody?


Посмотри кодировку страницы. Может она кривая стоит. Не знаю, правда, влияет ли кодировка на js
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.