如何使用 dllimport 解决 DllNotFoundException? (单声道 Vb)
how to resolve DllNotFoundException using dllimport? (Mono Vb)
我是 Unix/Linux/Ubuntu 的新手。
我将 Mono 与 VB 一起使用,我正在尝试通过 DllImport (CliSiTef32I.dll / libclisitef.so) 使用库中的方法,但它一直给我 DllNotFoundException
在论坛中搜索我已经尝试了一些方法:
- 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
//project.exe.config文件中的dll映射
<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
我使用 mono_log_level=debug 发现了问题
它无法加载 32 位 dll,我尝试了 64 位版本并且它有效!
我是 Unix/Linux/Ubuntu 的新手。
我将 Mono 与 VB 一起使用,我正在尝试通过 DllImport (CliSiTef32I.dll / libclisitef.so) 使用库中的方法,但它一直给我 DllNotFoundException
在论坛中搜索我已经尝试了一些方法:
- 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
//project.exe.config文件中的dll映射
<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
我使用 mono_log_level=debug 发现了问题 它无法加载 32 位 dll,我尝试了 64 位版本并且它有效!