【发布时间】:2023-03-19 07:29:01
【问题描述】:
大家早上好 我正在使用 C# 语言使用 Visual Studio 2017 开发一个可执行软件 myExe.exe,它将在带有单声道的 ubuntu 14.04 的 PC 上运行 我需要使用一个 DLL,我们可以称之为 dll2import.dll,通过 TCP/IP 与特定设备(如驱动程序......)一起工作。 为了避免对一些无用的细节感到无聊,我只写了重要的信息(但如果您需要随时询问)和一个简单的示例。
在 C++ dll2import.dll 中,我有第一个函数来创建处理对象的处理程序,称为 d2iCreate,我以这种方式包装它:
//private const String dllPath = @"D:\ExtDll2Use\dll2import.dll";
//private const String dllPath = "/home/massi/dll2import.dll";
private const String dllPath = "dll2import.dll";
[DllImport(dllPath,EntryPoint = "d2iCreate",CallingConvention = CallingConvention.Cdecl)]
unsafe public static extern UInt32 CSd2iCreate();
还有很多其他的函数我都是用这种方式封装的,但是问题就是从那个开始的,所以没用全部写...
当我用我的电脑运行 .exe 时一切正常!!!但是当我用 ubuntu 把这个应用程序放在我的电脑上并尝试用单声道运行它时,出现了问题!!!我的代码进入异常调用 CSd2iCreate() !!!喜欢它没有找到库......我尝试了几个路径但没有成功......我尝试将库(和路径)放在我的主目录中,在我的根目录中,以及存在 .exe 的位置......但它是喜欢mono就不用了吧! 这很奇怪,因为如果我删除 dll2import.dll 错误不会改变..所以就像单声道没有找到 .dll ......我可以告诉你我使用其他 .dll 并且它们可以工作但 .dll 是c# 项目在 Visual Studio 中开发并链接到我的项目中.. 所以我想我必须在 mono 中配置一些东西或以其他方式安装该库,但我不知道如何!
.dll 是“按原样”提供的,我没有源代码...我无法重新编译它...
如果可以相关我这里写错误,但不是很详细,是通用的。
代码是这样的:
private unsafe bool CreateHandler() {
try {
pwxHandle = d2iCreate();
return true;
} catch(Exception ex) {
Log.Errore(pwxProcLog,System.Reflection.MethodBase.GetCurrentMethod().Name,"Error creating Handler",ex);
return false;
}
}
日志错误代码的例程是(摘录):
public void Errore(string Proc, string Metodo, string info, Exception e)
{
ScriviErr(Proc, Metodo, info);
ScriviErr(Proc, "Eccezione " + e.Source, e.Message);
ScriviErr(Proc, "Stack", Environment.NewLine + e.StackTrace + Environment.NewLine);
}
}
所以记录的错误是:
14/11/2017-17.38.23 <WV1> - CreateHandler: [Error creating Handler]
14/11/2017-17.38.23 <WV1> - Eccezione MyProject2LinkDLL: [dll2import.dll]
14/11/2017-17.38.23 <WV1> - Stack: [
at (wrapper managed-to-native) MyProject2LinkDLL.Perif:d2iCreate ()
at MyProject2LinkDLL.Perif.CreateHandler () [0x00000] in <filename unknown>:0
]
我可以在这一行告诉你:
14/11/2017-17.38.23 <WV1> - Eccezione MyProject2LinkDLL: [dll2import.dll]
在 [] 之间有我为拍摄库编写的路径...所以其他时间是错误
14/11/2017-14.11.37 <WV1> - Eccezione MyProject2LinkDLL: [/home/massi/dll2import.dll]
如果需要其他详细信息,请随时询问!
谢谢, 马西米利亚诺
【问题讨论】:
-
您是否在 Ubuntu 下编译了您的 C++ 库并创建了一个共享库,即
dll2import.so? -
您可能会遇到错误消息。你必须养成分享的习惯。
-
您好,感谢您的回答。这个库是“按原样”提供的,我没有源代码......所以我无法重新编译。我的项目是“Visual Studio 控制台应用程序”。错误消息是通用的,我刚刚添加了我的问题,谢谢