Как решить DllNotFoundException с помощью dllimport? (Моно Vb) - PullRequest
2 голосов
/ 07 мая 2019

Я новичок в Unix / Linux / Ubuntu.

Я использую Mono с VB и пытаюсь использовать методы из библиотеки через DllImport (CliSiTef32I.dll / libclisitef.so), однако он продолжает давать мне DllNotFoundException

Поиск в foruns Я уже пробовал несколько вещей:

  • ld.so.conf с путями, содержащими библиотеки
  • dllMap в project.exe.config

Любая помощь приветствуется.

Мой код: (Я пытался импортировать напрямую с помощью .Dll и .SO, но не сработал)

C #

using System;
using System.Runtime.InteropServices;

namespace SitefCSharp

{

static class MdlTEF

{

[DllImport("CliSiTef32I.dll")] // [DllImport("libclisitef.so")]    
private static extern int ConfiguraIntSiTefInterativo(string EndSitef, string IdLoja, string IdTerminal, Int16 Reservado);

        static void Main()
        {
            int sts = 0;
            try
            {
                sts = ConfiguraIntSiTefInterativo("", "", "", 0);                
            }
            catch (Exception ex)
            {
                string msg = ex.ToString();
                //the exception is System.DllNotFoundException at (wrapper managed-to-native)
            }
        }
    }
}

VB

Imports System
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.VisualBasic.Interaction


Public Module EmptyClass

    Public Sub Main()
    Dim sts as Integer
    Try
        sts = ConfiguraIntSiTefInterativo("", "", "", 0)
    Catch ex as Exception
        MsgBox(ex.ToString)
    End Try

    End Sub

    Public Declare Function ConfiguraIntSiTefInterativo Lib "libclisitef.so" (ByVal EndSiTef As String, ByVal IdLoja As String, ByVal IdTerminal As String, ByVal Reservado As Int16) As Int32
    'Public Declare Function ConfiguraIntSiTefInterativo Lib "CliSiTef32I.dll" (ByVal EndSiTef As String, ByVal IdLoja As String, ByVal IdTerminal As String, ByVal Reservado As Int16) As Int32

End Module

// карта dll в файле project.exe.config

<configuration>
    <dllmap dll="CliSiTef32I.dll" target="libclisitef.so"/>
</configuration>

// Мой файл ld.so.conf ... Я попытался поместить библиотеки во все эти пути

/home/pdv/Projetos/PDV/kaiser/clisitef
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/home/pdv/Projects/TesteTef/TesteTef/bin/Debug
include /etc/ld.so.conf.d/*.conf

1 Ответ

0 голосов
/ 07 мая 2019

Я нашел проблему, используя mono_log_level = debug он не смог загрузить 32-битную DLL, я попробовал 64 версию, и она работала!

...