Вызов C# DLL из PowerBuilder

Итак, у меня есть приложение PowerBuilder. Могу ли я создать файл DLL С#, который открывает новый поток для запуска процесса в фоновом режиме? и вызвать эту dll в моем приложении PowerBUilder? такое возможно?

Вот мой пример кода:

Class2.cs

    string vartest;
    public void testonly()
    {
        vartest = "TESTING ONLY";
    }

    public string threadtest()
    {
        Thread workerThread = new Thread(new ThreadStart(testonly));
        workerThread.Start();
        Thread.Sleep(10000);
        workerThread.Abort();
        return vartest;
    }

Вот где я вызываю эту DLL из своего приложения PowerBuilder, расположенного в событии открытия окна:

OLEObject myoleobject
myoleobject = CREATE OLEObject
myoleobject.connecttonewobject("Sample.Class2") 

string test
test = myoleobject.threadtest()
messagebox('', test)

Однако я получаю сообщение об ошибке в своем приложении PowerBuilder, в котором говорится: «Ошибка при вызове внешней функции...» в строке, где я инициализирую переменную «тест».


person Dac    schedule 09.12.2015    source источник
comment
Вы пробовали сначала спросить г-на Google?   -  person L-Four    schedule 09.12.2015
comment
@ L-Three, да, к сожалению, у PowerBuilder минимальное сообщество поддержки.   -  person Dac    schedule 09.12.2015
comment
Не уверен, что вы сделали, но в Google есть множество результатов, например: blogs.artinsoft.net/Mrojas/archive/2009/03/03/.   -  person L-Four    schedule 09.12.2015
comment
Я уже знаю, как вызвать DLL из PowerBuilder. Забыл упомянуть об этом, извините. Мой вопрос: можно ли запустить новый поток в этой DLL при ее вызове?   -  person Dac    schedule 09.12.2015
comment
Почему нет? Создайте небольшой POC, чтобы протестировать его.   -  person L-Four    schedule 09.12.2015
comment
@ L-Three, проверьте мою правку, пожалуйста. :)   -  person Dac    schedule 09.12.2015


Ответы (3)


Какая версия PowerBuilder? Это PowerBuilder Classic или .Net? Правильно ли он зарегистрирован? Попробуйте протестировать на VBScript и посмотрите, что получится.

Официальный форум находится здесь: http://scn.sap.com/community/developer-center/powerbuilder

person Roland Smith    schedule 09.12.2015
comment
Здравствуйте, я использую PB Classic 12.5. Как проверить правильность регистрации? Я использую regasm.exe, например C:\Windows\Microsoft.NET\Framework64\v4.0.30319› regasm ‹dll path›\‹dll name.dll›, и он говорит, что тип зарегистрирован успешно. - person Dac; 10.12.2015

  • Вы проверили возвращаемое значение ConnectToNewObject? Это успешно?

  • Проверьте реестр, выполнив поиск класса, к которому вы пытаетесь подключиться.

  • Вы также можете использовать GUID в ConnectToNewObject, можете ли вы найти этот GUID в реестре?

  • Вы сделали класс C# ComVisible?

person Greko2009    schedule 14.12.2015

Извините за столь поздний ответ. Для справки: сведения о проблеме можно найти в объекте OleRuntimeError, который возвращается вместе с исключением, с которым вы столкнулись. Например, попробуйте добавить этот блок try catch в свой код:

try
    test = myoleobject.threadtest()
catch (OleRuntimeError oleex)
    Messagebox("OleRuntimeError", oleex.description + "~n" + oleex.GetMessage())
catch (RuntimeError ex)
    Messagebox("RuntimeError",ex.GetMessage())
end try

Это должно показать вам подробности о том, что произошло с ошибкой OLE, и вы сможете решить, что вам нужно сделать, чтобы исправить это.

person Kateract    schedule 10.06.2016