Когда я использую C# DLL из C ++ для использования Selenium, возникает проблема обработки исключений - PullRequest
0 голосов
/ 15 февраля 2020

Хорошо работает с кодом c#. Однако возникает ошибка обработки исключения, если я выполняю на c ++ с c# dll.

Сначала я покажу вам мой код.

  1. C# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;



namespace ManagedLibrary1
{
    public interface LoginClass
    {
        void LogIn(string id, string pw, int t, int num);
        void LogOut();
    }


    public class Class1 : LoginClass
    {

        IWebDriver driver = new ChromeDriver();
        IWebElement a;
        Boolean b;

        public void LogIn(string id, string pw, int t, int num)
        {


            if (num == 0)  
            {
                driver.Navigate().GoToUrl("this is url address"); 
            }

            else
            {
                driver.Url = "this is url address2";   
            }

            Thread.Sleep(50);


            if (t == 0)    
            {
                a = driver.FindElement(By.XPath("this is Xpath")); 
                b = a.Displayed;

                if (b == true)
                {
                    a.Click();
                }
            }

            driver.FindElement(By.XPath("this is xpath2")).SendKeys(id);  
            Thread.Sleep(50);
            driver.FindElement(By.XPath("this is xpath3"]")).SendKeys(pw);          
            Thread.Sleep(50);
            driver.FindElement(By.XPath("this is xpath4")).Click();   
            Thread.Sleep(5000);
            a = driver.FindElement(By.XPath("this is xpath5"));   


            if (b == true)  
            {


                driver.Url = "this is url address 3";

            }



            driver.Manage().Window.Maximize();  
            driver.FindElement(By.ClassName("this is classname")).Click(); 

        }

        public void LogOut()
        {



            a = driver.FindElement(By.XPath("this is xpath6"));  

            b = a.Displayed;

            if (b == true)   
            {
                a.Click();  

            }
        }

    }

}


код C ++
#include <windows.h>
#include "tchar.h"

#import "C:\Users\me\Desktop\Project Folder\ClassLibrary4\ClassLibrary4\bin\Debug\ClassLibrary4.tlb" raw_interface_only

using namespace ClassLibrary4;

int main()
{
    HRESULT hr = CoInitialize(NULL);

    LoginClassPtr pICalc(__uuidof(Class1));



    pICalc->LogIn("id","password",1,0);




    CoUninitialize();

    return 0;
}

при отладке кода C ++ здесь генерируется ошибка

LoginClassPtr pICalc(__uuidof(Class1));

Если процесс получения функции dll был неправильным, я пытался изменить функциональная часть C# в очень простую функцию, которая вычисляет сумму двух целых чисел, и она работала хорошо без ошибок.

Только эта одна проблема удерживала меня от продвижения вперед в течение двух дней. Я хочу твоей помощи.

1 Ответ

0 голосов
/ 06 марта 2020

Я работал над аналогичной проблемой, моя c# dll была подписана dll со строгим именем. Пакет с селеном Selenium Webdriver, который я использовал, не имел строгого имени. Очевидно, dll со строгим именем не может загрузить другую dll, которая не имеет строгого имени. Я удалил пакет selenium webdriver и установил selenium webdriver.strongname, у меня это сработало.

...